From 3b6bceb8e8b060641cb9dcb536a3f48c90485a7f Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 21 Oct 2026 21:38:28 -0700 Subject: [PATCH 001/194] Add a checkOrder test option Checker results should not depend on which files were checked first, or on which types an editor happened to ask for before diagnostics were requested. Tests had no way to show such dependence, so fixes for it could only be described, not demonstrated. The harness-only checkOrder option queries the checker in a different order: files in reverse, each file in its own program, or every expression's type and symbol before any diagnostics. Listing several orders produces a baseline for each, so order dependence shows up as differing baselines. --- tsc/internal/testrunner/compiler_runner.go | 11 ++- .../testutil/harnessutil/harnessutil.go | 97 ++++++++++++++++++- 2 files changed, 103 insertions(+), 5 deletions(-) diff --git a/tsc/internal/testrunner/compiler_runner.go b/tsc/internal/testrunner/compiler_runner.go index 6f2712632b5b8..3efc2ec3e71ca 100644 --- a/tsc/internal/testrunner/compiler_runner.go +++ b/tsc/internal/testrunner/compiler_runner.go @@ -13,6 +13,7 @@ import ( "github.com/microsoft/TypeScript/tsc/internal/ast" "github.com/microsoft/TypeScript/tsc/internal/checker" + "github.com/microsoft/TypeScript/tsc/internal/collections" "github.com/microsoft/TypeScript/tsc/internal/core" "github.com/microsoft/TypeScript/tsc/internal/repo" "github.com/microsoft/TypeScript/tsc/internal/testutil" @@ -186,6 +187,14 @@ func (r *CompilerBaselineRunner) runSingleConfigTest(t *testing.T, testName stri compilerTest.verifyParentPointers(t) } +// compilerTestVaryBy adds harness options that may vary to the compiler options +// that may vary. +var compilerTestVaryBy = func() *collections.Set[string] { + s := compilerVaryBy.Clone() + s.Add("checkorder") + return s +}() + type compilerFileBasedTest struct { filename string content string @@ -198,7 +207,7 @@ func getCompilerFileBasedTest(t *testing.T, filename string) *compilerFileBasedT panic("Could not read test file: " + filename) } settings := extractCompilerSettings(content) - configurations := harnessutil.GetFileBasedTestConfigurations(t, settings, compilerVaryBy) + configurations := harnessutil.GetFileBasedTestConfigurations(t, settings, compilerTestVaryBy) return &compilerFileBasedTest{ filename: filename, content: content, diff --git a/tsc/internal/testutil/harnessutil/harnessutil.go b/tsc/internal/testutil/harnessutil/harnessutil.go index bca59282a69fa..934eed305fa1b 100644 --- a/tsc/internal/testutil/harnessutil/harnessutil.go +++ b/tsc/internal/testutil/harnessutil/harnessutil.go @@ -18,6 +18,7 @@ import ( "github.com/microsoft/TypeScript/tsc/internal/ast" "github.com/microsoft/TypeScript/tsc/internal/bundled" + "github.com/microsoft/TypeScript/tsc/internal/checker" "github.com/microsoft/TypeScript/tsc/internal/collections" "github.com/microsoft/TypeScript/tsc/internal/compiler" "github.com/microsoft/TypeScript/tsc/internal/contentmapper" @@ -76,6 +77,7 @@ type HarnessOptions struct { ReportDiagnostics bool CaptureSuggestions bool TypescriptVersion string + CheckOrder string } func CompileFiles( @@ -362,6 +364,25 @@ var harnessCommandLineOptions = []*tsoptions.CommandLineOption{ Name: "captureSuggestions", Kind: tsoptions.CommandLineOptionTypeBoolean, }, + // Changes the order in which the checker is queried; see checkOrders + { + Name: "checkOrder", + Kind: tsoptions.CommandLineOptionTypeString, + }, +} + +// Checker results should not depend on the order in which files and +// locations are queried. These orders let tests demonstrate that. +var checkOrders = []string{ + // Check all files in program order. + "default", + // Check files one at a time in reverse program order. + "reverse", + // Check each file with a fresh program that has checked nothing else. + "isolated", + // Before checking, ask for the type and symbol of every expression and + // name in each file, innermost and last first, as an editor might. + "typesfirst", } func getHarnessOption(name string) *tsoptions.CommandLineOption { @@ -407,6 +428,12 @@ func parseHarnessOption(t *testing.T, key string, value any, harnessOptions *Har harnessOptions.CaptureSuggestions = value.(bool) case "typescriptVersion": harnessOptions.TypescriptVersion = value.(string) + case "checkOrder": + order := strings.ToLower(value.(string)) + if !slices.Contains(checkOrders, order) { + t.Fatalf("Unknown check order '%s'.", value) + } + harnessOptions.CheckOrder = order default: t.Fatalf("Unknown harness option '%s'.", key) } @@ -644,8 +671,7 @@ func compileFilesWithHost( preErrors = append(preErrors, preProgram.GetConfigFileParsingDiagnostics()...) preErrors = append(preErrors, preProgram.GetProgramDiagnostics()...) preErrors = append(preErrors, preProgram.GetSyntacticDiagnostics(ctx, nil)...) - preErrors = append(preErrors, preProgram.GetSemanticDiagnostics(ctx, nil)...) - preErrors = append(preErrors, preProgram.GetGlobalDiagnostics(ctx)...) + preErrors = append(preErrors, getCheckerDiagnostics(ctx, host, preConfig, preProgram, harnessOptions.CheckOrder)...) if harnessOptions.CaptureSuggestions { preErrors = append(preErrors, preProgram.GetSuggestionDiagnostics(ctx, nil)...) } @@ -660,8 +686,7 @@ func compileFilesWithHost( postErrors = append(postErrors, postProgram.GetConfigFileParsingDiagnostics()...) postErrors = append(postErrors, postProgram.GetProgramDiagnostics()...) postErrors = append(postErrors, postProgram.GetSyntacticDiagnostics(ctx, nil)...) - postErrors = append(postErrors, postProgram.GetSemanticDiagnostics(ctx, nil)...) - postErrors = append(postErrors, postProgram.GetGlobalDiagnostics(ctx)...) + postErrors = append(postErrors, getCheckerDiagnostics(ctx, host, config, postProgram, harnessOptions.CheckOrder)...) if postProgram.Options().GetEmitDeclarations() { postErrors = append(postErrors, postProgram.GetDeclarationDiagnostics(ctx, nil)...) } @@ -701,6 +726,67 @@ func compileFilesWithHost( return newCompilationResult(host, harnessOptions.CurrentDirectory, config.CompilerOptions(), postProgram, emitResult, errors, harnessOptions) } +// getCheckerDiagnostics returns the semantic and global diagnostics of +// program, querying the checker in the given order. +func getCheckerDiagnostics(ctx context.Context, host compiler.CompilerHost, config *tsoptions.ParsedCommandLine, program compiler.ProgramLike, order string) []*ast.Diagnostic { + var files []*ast.SourceFile + for _, file := range program.GetSourceFiles() { + if !program.Program().SkipTypeChecking(file, false) { + files = append(files, file) + } + } + var result []*ast.Diagnostic + switch order { + case "", "default": + result = append(result, program.GetSemanticDiagnostics(ctx, nil)...) + result = append(result, program.GetGlobalDiagnostics(ctx)...) + case "reverse": + for _, file := range slices.Backward(files) { + result = append(result, program.GetSemanticDiagnostics(ctx, file)...) + } + result = append(result, program.GetGlobalDiagnostics(ctx)...) + case "isolated": + for _, file := range files { + isolated := createProgram(host, config) + isolatedFile := isolated.GetSourceFile(file.FileName()) + result = append(result, isolated.GetSemanticDiagnostics(ctx, isolatedFile)...) + result = append(result, isolated.GetGlobalDiagnostics(ctx)...) + } + case "typesfirst": + for _, file := range slices.Backward(files) { + c, done := program.Program().GetTypeCheckerForFile(ctx, file) + queryTypesAndSymbols(c, file) + done() + } + result = append(result, program.GetSemanticDiagnostics(ctx, nil)...) + result = append(result, program.GetGlobalDiagnostics(ctx)...) + default: + panic("unknown check order " + order) + } + return compiler.SortAndDeduplicateDiagnostics(result) +} + +func queryTypesAndSymbols(c *checker.Checker, file *ast.SourceFile) { + var nodes []*ast.Node + var visit func(n *ast.Node) bool + visit = func(n *ast.Node) bool { + if n.Flags&ast.NodeFlagsReparsed == 0 { + nodes = append(nodes, n) + } + n.ForEachChild(visit) + return false + } + file.AsNode().ForEachChild(visit) + for _, n := range slices.Backward(nodes) { + if ast.IsExpressionNode(n) || n.Kind == ast.KindIdentifier || ast.IsDeclarationName(n) { + if !ast.IsPartOfTypeNode(n) && !ast.IsOmittedExpression(n) { + c.GetTypeAtLocation(n) + } + c.GetSymbolAtLocation(n) + } + } +} + type CompilationResult struct { Diagnostics []*ast.Diagnostic Result *compiler.EmitResult @@ -1159,6 +1245,9 @@ func getValueOfOptionString(t *testing.T, option string, value string) tsoptions func tryGetValueOfOptionString(option string, value string) (tsoptions.CompilerOptionsValue, bool) { optionDecl := getCommandLineOption(option) + if optionDecl == nil { + optionDecl = getHarnessOption(option) + } if optionDecl == nil { return nil, false } From ffcea82d81fd0199845e009982ffc479d1a5d3be Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 26 Oct 2026 13:32:11 -0700 Subject: [PATCH 002/194] Add a check order fuzzer to the test harness The checkOrder option only tries a few fixed orders over whole files, but results can depend on which single query a checker answers first, as when an editor asks for the type of one node before anything else is checked. Such dependence is hard to find by hand and easy to reintroduce. With TS_CHECK_ORDER_FUZZ=n, each test is checked again n times in fresh programs that first answer a seeded random selection of type, symbol, and diagnostics queries. Any change in diagnostics or in the type or symbol of a node fails the test with the seed and a minimized list of queries that reproduces it. The fuzzer is off by default, so it does not slow the normal suite. --- .../testutil/harnessutil/checkorderfuzz.go | 289 ++++++++++++++++++ .../testutil/harnessutil/harnessutil.go | 1 + 2 files changed, 290 insertions(+) create mode 100644 tsc/internal/testutil/harnessutil/checkorderfuzz.go diff --git a/tsc/internal/testutil/harnessutil/checkorderfuzz.go b/tsc/internal/testutil/harnessutil/checkorderfuzz.go new file mode 100644 index 0000000000000..4cd589d691fdd --- /dev/null +++ b/tsc/internal/testutil/harnessutil/checkorderfuzz.go @@ -0,0 +1,289 @@ +package harnessutil + +import ( + "context" + "fmt" + "hash/fnv" + "math/rand/v2" + "os" + "strconv" + "strings" + "testing" + + "github.com/microsoft/TypeScript/tsc/internal/ast" + "github.com/microsoft/TypeScript/tsc/internal/compiler" + "github.com/microsoft/TypeScript/tsc/internal/core" + "github.com/microsoft/TypeScript/tsc/internal/scanner" + "github.com/microsoft/TypeScript/tsc/internal/tsoptions" +) + +// Setting TS_CHECK_ORDER_FUZZ=n checks each test that has no checkOrder +// option n more times, each time in a fresh program that first answers a +// random selection of queries in a random order: the type or symbol of a +// node, or the diagnostics of a file. A test fails if its diagnostics, or +// the type or symbol of any node, then differ from checking in program +// order, and reports the smallest list of queries that still makes them +// differ. TS_CHECK_ORDER_FUZZ_SEED=s runs only seed s. + +type fuzzQuery struct { + file *ast.SourceFile + node *ast.Node // nil to get the diagnostics of file + index int // of node in fuzzNodes(file) + kind fuzzQueryKind +} + +type fuzzQueryKind int + +const ( + fuzzQueryType fuzzQueryKind = iota + fuzzQuerySymbol + fuzzQueryDiagnostics +) + +func (q fuzzQuery) String() string { + if q.kind == fuzzQueryDiagnostics { + return fmt.Sprintf("diagnostics of %s", q.file.FileName()) + } + kind := "type" + if q.kind == fuzzQuerySymbol { + kind = "symbol" + } + if ast.PositionIsSynthesized(q.node.Pos()) { + return fmt.Sprintf("%s of synthesized %s %d in %s", kind, q.node.Kind, q.index, q.file.FileName()) + } + pos := scanner.GetTokenPosOfNode(q.node, q.file, false) + line, character := scanner.GetECMALineAndUTF16CharacterOfPosition(q.file, pos) + return fmt.Sprintf("%s of %s at %s(%d,%d)", kind, scanner.GetTextOfNode(q.node), q.file.FileName(), line+1, int(character)+1) +} + +// fuzzResult is what a check order must not change: diagnostics and the +// type and symbol of every queryable node. +type fuzzResult []string + +func fuzzCheckOrder(t *testing.T, host compiler.CompilerHost, config *tsoptions.ParsedCommandLine, harnessOptions *HarnessOptions) { + n, _ := strconv.Atoi(os.Getenv("TS_CHECK_ORDER_FUZZ")) + if t == nil || n <= 0 || harnessOptions.CheckOrder != "" && harnessOptions.CheckOrder != "default" { + return + } + options := config.CompilerOptions().Clone() + options.TraceResolution = core.TSFalse + fuzzConfig := tsoptions.NewParsedCommandLine(options, config.FileNames(), config.ProjectReferences(), config.BaseDirectory(), config.CaseSensitivity()) + fuzzConfig.ParsedConfig.ContentMappers = config.ContentMappers() + fuzzConfig.ConfigFile = config.ConfigFile + fuzzConfig.Errors = config.Errors + + ctx := context.Background() + expected := fuzzRun(ctx, host, fuzzConfig, nil) + seeds := make([]uint64, n) + for i := range seeds { + seeds[i] = uint64(i) + } + if s := os.Getenv("TS_CHECK_ORDER_FUZZ_SEED"); s != "" { + seed, err := strconv.ParseUint(s, 10, 64) + if err != nil { + t.Fatalf("invalid TS_CHECK_ORDER_FUZZ_SEED: %v", err) + } + seeds = []uint64{seed} + } + h := fnv.New64a() + h.Write([]byte(t.Name())) + stream := h.Sum64() + for _, seed := range seeds { + queries := fuzzQueries(createProgram(host, fuzzConfig), rand.New(rand.NewPCG(seed, stream))) + diverges := func(queries []fuzzQuery) bool { + return fuzzDiff(expected, fuzzRun(ctx, host, fuzzConfig, queries)) != "" + } + if !diverges(queries) { + continue + } + queries = fuzzMinimize(queries, diverges) + var b strings.Builder + fmt.Fprintf(&b, "check order fuzzing with TS_CHECK_ORDER_FUZZ_SEED=%d changed results after querying:\n", seed) + for _, q := range queries { + fmt.Fprintf(&b, " %s\n", q) + } + b.WriteString("results in program order (-) and after the queries (+):\n") + b.WriteString(fuzzDiff(expected, fuzzRun(ctx, host, fuzzConfig, queries))) + t.Error(b.String()) + } +} + +// fuzzQueries returns the queries for one seed: a random selection of every +// possible query, often only a few so that the first query matters. +func fuzzQueries(program compiler.ProgramLike, rng *rand.Rand) []fuzzQuery { + var queries []fuzzQuery + for _, file := range fuzzCheckedFiles(program) { + queries = append(queries, fuzzQuery{file: file, kind: fuzzQueryDiagnostics}) + for i, node := range fuzzNodes(file) { + if fuzzHasType(node) { + queries = append(queries, fuzzQuery{file, node, i, fuzzQueryType}) + } + queries = append(queries, fuzzQuery{file, node, i, fuzzQuerySymbol}) + } + } + rng.Shuffle(len(queries), func(i, j int) { queries[i], queries[j] = queries[j], queries[i] }) + if len(queries) == 0 { + return nil + } + switch rng.IntN(3) { + case 0: + return queries[:1+rng.IntN(min(len(queries), 4))] + case 1: + return queries[:rng.IntN(len(queries)+1)] + default: + return queries + } +} + +// fuzzMinimize returns a 1-minimal sublist of queries for which diverges +// still holds (Zeller's ddmin). +func fuzzMinimize(queries []fuzzQuery, diverges func([]fuzzQuery) bool) []fuzzQuery { + n := 2 + for len(queries) >= 2 { + chunk := (len(queries) + n - 1) / n + reduced := false + for start := 0; start < len(queries); start += chunk { + complement := append(queries[:start:start], queries[min(start+chunk, len(queries)):]...) + if diverges(complement) { + queries = complement + n = max(n-1, 2) + reduced = true + break + } + } + if !reduced { + if n >= len(queries) { + break + } + n = min(n*2, len(queries)) + } + } + return queries +} + +func fuzzCheckedFiles(program compiler.ProgramLike) []*ast.SourceFile { + var files []*ast.SourceFile + for _, file := range program.GetSourceFiles() { + if !program.Program().SkipTypeChecking(file, false) { + files = append(files, file) + } + } + return files +} + +// fuzzNodes returns the nodes of file that queryTypesAndSymbols queries. +func fuzzNodes(file *ast.SourceFile) []*ast.Node { + var nodes []*ast.Node + var visit func(n *ast.Node) bool + visit = func(n *ast.Node) bool { + if n.Flags&ast.NodeFlagsReparsed == 0 && (ast.IsExpressionNode(n) || n.Kind == ast.KindIdentifier || ast.IsDeclarationName(n)) { + nodes = append(nodes, n) + } + n.ForEachChild(visit) + return false + } + file.AsNode().ForEachChild(visit) + return nodes +} + +func fuzzHasType(node *ast.Node) bool { + return !ast.IsPartOfTypeNode(node) && !ast.IsOmittedExpression(node) +} + +// fuzzRun answers queries, given in the files of the program that +// fuzzQueries was given, in a fresh program, then returns its results. +func fuzzRun(ctx context.Context, host compiler.CompilerHost, config *tsoptions.ParsedCommandLine, queries []fuzzQuery) fuzzResult { + program := createProgram(host, config) + files := fuzzCheckedFiles(program) + // Queries name nodes of another program over the same files, so find + // the same nodes here by their index. + nodesByFile := make(map[string][]*ast.Node) + for _, file := range files { + nodesByFile[string(file.FileName())] = fuzzNodes(file) + } + for _, q := range queries { + file := program.GetSourceFile(q.file.FileName()) + if q.kind == fuzzQueryDiagnostics { + program.GetSemanticDiagnostics(ctx, file) + continue + } + node := nodesByFile[string(file.FileName())][q.index] + c, done := program.Program().GetTypeCheckerForFile(ctx, file) + if q.kind == fuzzQueryType { + c.GetTypeAtLocation(node) + } else { + c.GetSymbolAtLocation(node) + } + done() + } + + var diags []*ast.Diagnostic + diags = append(diags, program.GetSyntacticDiagnostics(ctx, nil)...) + diags = append(diags, program.GetSemanticDiagnostics(ctx, nil)...) + diags = append(diags, program.GetGlobalDiagnostics(ctx)...) + if program.Options().GetEmitDeclarations() { + diags = append(diags, program.GetDeclarationDiagnostics(ctx, nil)...) + } + var result fuzzResult + for _, d := range compiler.SortAndDeduplicateDiagnostics(diags) { + var b strings.Builder + fuzzFormatDiagnostic(&b, d, "") + result = append(result, b.String()) + } + for _, file := range files { + c, done := program.Program().GetTypeCheckerForFile(ctx, file) + for i, node := range nodesByFile[string(file.FileName())] { + q := fuzzQuery{file, node, i, fuzzQuerySymbol} + if fuzzHasType(node) { + result = append(result, fmt.Sprintf("type of %s: %s", strings.TrimPrefix(q.String(), "symbol of "), c.TypeToString(c.GetTypeAtLocation(node)))) + } + if symbol := c.GetSymbolAtLocation(node); symbol != nil { + result = append(result, fmt.Sprintf("%s: %s", q, c.SymbolToString(symbol))) + } + } + done() + } + return result +} + +func fuzzFormatDiagnostic(b *strings.Builder, d *ast.Diagnostic, indent string) { + b.WriteString(indent) + if d.File() != nil { + line, character := scanner.GetECMALineAndUTF16CharacterOfPosition(d.File(), d.Pos()) + fmt.Fprintf(b, "%s(%d,%d): ", d.File().FileName(), line+1, int(character)+1) + } + fmt.Fprintf(b, "TS%d: %s", d.Code(), d.String()) + for _, chained := range d.MessageChain() { + b.WriteString("\n") + fuzzFormatDiagnostic(b, chained, indent+" ") + } + for _, related := range d.RelatedInformation() { + b.WriteString("\n") + fuzzFormatDiagnostic(b, related, indent+" related ") + } +} + +// fuzzDiff describes how actual differs from expected, or returns "". +func fuzzDiff(expected, actual fuzzResult) string { + count := make(map[string]int) + for _, line := range expected { + count[line]++ + } + for _, line := range actual { + count[line]-- + } + var b strings.Builder + for _, line := range expected { + if count[line] > 0 { + count[line]-- + fmt.Fprintf(&b, "- %s\n", line) + } + } + for _, line := range actual { + if count[line] < 0 { + count[line]++ + fmt.Fprintf(&b, "+ %s\n", line) + } + } + return b.String() +} diff --git a/tsc/internal/testutil/harnessutil/harnessutil.go b/tsc/internal/testutil/harnessutil/harnessutil.go index 934eed305fa1b..17e39a1a5104d 100644 --- a/tsc/internal/testutil/harnessutil/harnessutil.go +++ b/tsc/internal/testutil/harnessutil/harnessutil.go @@ -228,6 +228,7 @@ func CompileFilesEx( result := compileFilesWithHost(host, config, harnessOptions) result.Symlinks = symlinks result.Trace = host.tracer.String() + fuzzCheckOrder(t, host, config, harnessOptions) result.Repeat = func(testConfig TestConfiguration) *CompilationResult { newHarnessOptions := *harnessOptions newCompilerOptions := compilerOptions.Clone() From 86eb6d9f3a9e10afba5ba72f96847c02c953c2e9 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 21 Oct 2026 23:07:33 -0700 Subject: [PATCH 003/194] Check some existing tests in typesfirst order Asking the checker for types and symbols before requesting diagnostics changes the diagnostics and types reported for these tests. Recording them in that order too shows which later changes make the results independent of what was asked first. --- ...Identifier(checkorder=default).errors.txt} | 0 ...birtraryIdentifier(checkorder=default).js} | 0 ...aryIdentifier(checkorder=default).symbols} | 0 ...traryIdentifier(checkorder=default).types} | 0 ...entifier(checkorder=typesfirst).errors.txt | 72 ++++ ...rtraryIdentifier(checkorder=typesfirst).js | 44 +++ ...yIdentifier(checkorder=typesfirst).symbols | 34 ++ ...aryIdentifier(checkorder=typesfirst).types | 44 +++ ...Expression(checkorder=default).errors.txt} | 0 ...assExpression(checkorder=default).symbols} | 0 ...ClassExpression(checkorder=default).types} | 0 ...pression(checkorder=typesfirst).errors.txt | 24 ++ ...sExpression(checkorder=typesfirst).symbols | 33 ++ ...assExpression(checkorder=typesfirst).types | 47 +++ ...nnotations(checkorder=default).errors.txt} | 0 ...ccessorAnnotations(checkorder=default).js} | 0 ...orAnnotations(checkorder=default).symbols} | 0 ...ssorAnnotations(checkorder=default).types} | 0 ...otations(checkorder=typesfirst).errors.txt | 41 +++ ...essorAnnotations(checkorder=typesfirst).js | 55 +++ ...Annotations(checkorder=typesfirst).symbols | 67 ++++ ...orAnnotations(checkorder=typesfirst).types | 64 ++++ ...ypeNoCrash(checkorder=default).errors.txt} | 0 ...leTypeNoCrash(checkorder=default).symbols} | 0 ...upleTypeNoCrash(checkorder=default).types} | 0 ...eNoCrash(checkorder=typesfirst).errors.txt | 19 ++ ...TypeNoCrash(checkorder=typesfirst).symbols | 47 +++ ...leTypeNoCrash(checkorder=typesfirst).types | 40 +++ ...ypeParameters(checkorder=default).symbols} | 16 + ...rTypeParameters(checkorder=default).types} | 17 + ...eParameters(checkorder=typesfirst).symbols | 106 ++++++ ...ypeParameters(checkorder=typesfirst).types | 120 +++++++ ...rayPatternCallback(checkorder=default).js} | 0 ...tternCallback(checkorder=default).symbols} | 0 ...PatternCallback(checkorder=default).types} | 0 ...Callback(checkorder=typesfirst).errors.txt | 24 ++ ...yPatternCallback(checkorder=typesfirst).js | 32 ++ ...ernCallback(checkorder=typesfirst).symbols | 89 +++++ ...tternCallback(checkorder=typesfirst).types | 60 ++++ ...eckorder=default,strict=false).errors.txt} | 0 ...ional(checkorder=default,strict=false).js} | 0 ...(checkorder=default,strict=false).symbols} | 0 ...al(checkorder=default,strict=false).types} | 0 ...heckorder=default,strict=true).errors.txt} | 0 ...tional(checkorder=default,strict=true).js} | 0 ...l(checkorder=default,strict=true).symbols} | 0 ...nal(checkorder=default,strict=true).types} | 0 ...korder=typesfirst,strict=false).errors.txt | 47 +++ ...nal(checkorder=typesfirst,strict=false).js | 61 ++++ ...heckorder=typesfirst,strict=false).symbols | 124 +++++++ ...(checkorder=typesfirst,strict=false).types | 136 ++++++++ ...ckorder=typesfirst,strict=true).errors.txt | 59 ++++ ...onal(checkorder=typesfirst,strict=true).js | 61 ++++ ...checkorder=typesfirst,strict=true).symbols | 124 +++++++ ...l(checkorder=typesfirst,strict=true).types | 136 ++++++++ ...upleSpread(checkorder=default).errors.txt} | 0 ...lyLargeTupleSpread(checkorder=default).js} | 0 ...geTupleSpread(checkorder=default).symbols} | 0 ...argeTupleSpread(checkorder=default).types} | 0 ...ircularity(checkorder=default).errors.txt} | 0 ...chCheckCircularity(checkorder=default).js} | 0 ...ckCircularity(checkorder=default).symbols} | 0 ...heckCircularity(checkorder=default).types} | 0 ...cularity(checkorder=typesfirst).errors.txt | 43 +++ ...CheckCircularity(checkorder=typesfirst).js | 71 ++++ ...Circularity(checkorder=typesfirst).symbols | 68 ++++ ...ckCircularity(checkorder=typesfirst).types | 85 +++++ ...eInference(checkorder=default).errors.txt} | 0 ...rnForTypeInference(checkorder=default).js} | 0 ...TypeInference(checkorder=default).symbols} | 0 ...orTypeInference(checkorder=default).types} | 0 ...nference(checkorder=typesfirst).errors.txt | 60 ++++ ...ForTypeInference(checkorder=typesfirst).js | 18 + ...peInference(checkorder=typesfirst).symbols | 36 ++ ...TypeInference(checkorder=typesfirst).types | 49 +++ ...epeatedly2(checkorder=default).errors.txt} | 0 ...ametersRepeatedly2(checkorder=default).js} | 0 ...rsRepeatedly2(checkorder=default).symbols} | 0 ...tersRepeatedly2(checkorder=default).types} | 0 ...eatedly2(checkorder=typesfirst).errors.txt | 33 ++ ...etersRepeatedly2(checkorder=typesfirst).js | 25 ++ ...Repeatedly2(checkorder=typesfirst).symbols | 75 +++++ ...rsRepeatedly2(checkorder=typesfirst).types | 59 ++++ ...gmaComment(checkorder=default).errors.txt} | 0 ...ceNonPragmaComment(checkorder=default).js} | 0 ...PragmaComment(checkorder=default).symbols} | 0 ...onPragmaComment(checkorder=default).types} | 0 ...aComment(checkorder=typesfirst).errors.txt | 37 +++ ...NonPragmaComment(checkorder=typesfirst).js | 29 ++ ...agmaComment(checkorder=typesfirst).symbols | 22 ++ ...PragmaComment(checkorder=typesfirst).types | 29 ++ ...mentsExtendsRecord(checkorder=default).js} | 0 ...ExtendsRecord(checkorder=default).symbols} | 0 ...tsExtendsRecord(checkorder=default).types} | 0 ...dsRecord(checkorder=typesfirst).errors.txt | 12 + ...ntsExtendsRecord(checkorder=typesfirst).js | 13 + ...tendsRecord(checkorder=typesfirst).symbols | 14 + ...ExtendsRecord(checkorder=typesfirst).types | 11 + ...antiations(checkorder=default).errors.txt} | 0 ...DeepInstantiations(checkorder=default).js} | 0 ...nstantiations(checkorder=default).symbols} | 0 ...pInstantiations(checkorder=default).types} | 0 ...tiations(checkorder=typesfirst).errors.txt | 14 + ...epInstantiations(checkorder=typesfirst).js | 15 + ...tantiations(checkorder=typesfirst).symbols | 25 ++ ...nstantiations(checkorder=typesfirst).types | 15 + ...ngDeferred(checkorder=default).errors.txt} | 0 ...ntCheckingDeferred(checkorder=default).js} | 0 ...ckingDeferred(checkorder=default).symbols} | 0 ...heckingDeferred(checkorder=default).types} | 0 ...Deferred(checkorder=typesfirst).errors.txt | 76 +++++ ...CheckingDeferred(checkorder=typesfirst).js | 37 +++ ...ingDeferred(checkorder=typesfirst).symbols | 80 +++++ ...ckingDeferred(checkorder=typesfirst).types | 78 +++++ ...ferenceNotTooBroad(checkorder=default).js} | 0 ...ceNotTooBroad(checkorder=default).symbols} | 0 ...enceNotTooBroad(checkorder=default).types} | 0 ...renceNotTooBroad(checkorder=typesfirst).js | 24 ++ ...NotTooBroad(checkorder=typesfirst).symbols | 69 ++++ ...ceNotTooBroad(checkorder=typesfirst).types | 67 ++++ ...siveLength(checkorder=default).errors.txt} | 0 ...ypeExcessiveLength(checkorder=default).js} | 0 ...cessiveLength(checkorder=default).symbols} | 0 ...ExcessiveLength(checkorder=default).types} | 0 ...veLength(checkorder=typesfirst).errors.txt | 41 +++ ...eExcessiveLength(checkorder=typesfirst).js | 45 +++ ...ssiveLength(checkorder=typesfirst).symbols | 109 ++++++ ...cessiveLength(checkorder=typesfirst).types | 58 ++++ ...Constraint(checkorder=default).errors.txt} | 0 ...asSelfAsConstraint(checkorder=default).js} | 0 ...fAsConstraint(checkorder=default).symbols} | 0 ...elfAsConstraint(checkorder=default).types} | 0 ...nstraint(checkorder=typesfirst).errors.txt | 16 + ...SelfAsConstraint(checkorder=typesfirst).js | 14 + ...sConstraint(checkorder=typesfirst).symbols | 15 + ...fAsConstraint(checkorder=typesfirst).types | 12 + ...claration1(checkorder=default).errors.txt} | 0 ...nctionDeclaration1(checkorder=default).js} | 0 ...nDeclaration1(checkorder=default).symbols} | 0 ...ionDeclaration1(checkorder=default).types} | 0 ...aration1(checkorder=typesfirst).errors.txt | 25 ++ ...tionDeclaration1(checkorder=typesfirst).js | 20 ++ ...eclaration1(checkorder=typesfirst).symbols | 21 ++ ...nDeclaration1(checkorder=typesfirst).types | 25 ++ ...claration1(checkorder=default).errors.txt} | 0 ...nDeclaration1(checkorder=default).symbols} | 0 ...eInDeclaration1(checkorder=default).types} | 0 ...aration1(checkorder=typesfirst).errors.txt | 152 +++++++++ ...eclaration1(checkorder=typesfirst).symbols | 175 ++++++++++ ...nDeclaration1(checkorder=typesfirst).types | 205 ++++++++++++ ...iteralInitializers(checkorder=default).js} | 0 ...lInitializers(checkorder=default).symbols} | 0 ...ralInitializers(checkorder=default).types} | 0 ...ializers(checkorder=typesfirst).errors.txt | 75 +++++ ...eralInitializers(checkorder=typesfirst).js | 126 +++++++ ...nitializers(checkorder=typesfirst).symbols | 196 +++++++++++ ...lInitializers(checkorder=typesfirst).types | 312 ++++++++++++++++++ ...mportTag13(checkorder=default).errors.txt} | 0 ...> importTag13(checkorder=default).symbols} | 0 ... => importTag13(checkorder=default).types} | 0 ...ortTag13(checkorder=typesfirst).errors.txt | 19 ++ ...importTag13(checkorder=typesfirst).symbols | 6 + .../importTag13(checkorder=typesfirst).types | 6 + ...dShadowing(checkorder=default).errors.txt} | 0 ...lassFieldShadowing(checkorder=default).js} | 0 ...ieldShadowing(checkorder=default).symbols} | 0 ...sFieldShadowing(checkorder=default).types} | 0 ...hadowing(checkorder=typesfirst).errors.txt | 23 ++ ...ssFieldShadowing(checkorder=typesfirst).js | 46 +++ ...ldShadowing(checkorder=typesfirst).symbols | 43 +++ ...ieldShadowing(checkorder=typesfirst).types | 44 +++ .../compiler/bigintArbirtraryIdentifier.ts | 1 + ...exConstraintOfJavascriptClassExpression.ts | 1 + .../compiler/circularAccessorAnnotations.ts | 1 + ...ularInlineMappedGenericTupleTypeNoCrash.ts | 1 + .../compiler/contextualOuterTypeParameters.ts | 6 + .../contextualReturnArrayPatternCallback.ts | 1 + .../deleteExpressionMustBeOptional.ts | 1 + .../compiler/excessivelyLargeTupleSpread.ts | 1 + .../exhaustiveSwitchCheckCircularity.ts | 1 + ...allbackToBindingPatternForTypeInference.ts | 1 + .../fixingTypeParametersRepeatedly2.ts | 1 + .../jsxImportSourceNonPragmaComment.tsx | 1 + .../jsxIntrinsicElementsExtendsRecord.tsx | 1 + .../cases/compiler/limitDeepInstantiations.ts | 1 + ...esolutionWithConstraintCheckingDeferred.ts | 1 + .../returnTypeInferenceNotTooBroad.ts | 1 + .../templateLiteralTypeExcessiveLength.ts | 1 + .../typeParameterHasSelfAsConstraint.ts | 1 + ...onDeclarationWithinFunctionDeclaration1.ts | 1 + .../privateNameNestedClassFieldShadowing.ts | 1 + ...ucturedVariablesReferenceInDeclaration1.ts | 1 + .../destructuringWithLiteralInitializers.ts | 1 + .../cases/conformance/jsdoc/importTag13.ts | 1 + 194 files changed, 4989 insertions(+) rename tsc/testdata/baselines/reference/compiler/{bigintArbirtraryIdentifier.errors.txt => bigintArbirtraryIdentifier(checkorder=default).errors.txt} (100%) rename tsc/testdata/baselines/reference/compiler/{bigintArbirtraryIdentifier.js => bigintArbirtraryIdentifier(checkorder=default).js} (100%) rename tsc/testdata/baselines/reference/compiler/{bigintArbirtraryIdentifier.symbols => bigintArbirtraryIdentifier(checkorder=default).symbols} (100%) rename tsc/testdata/baselines/reference/compiler/{bigintArbirtraryIdentifier.types => bigintArbirtraryIdentifier(checkorder=default).types} (100%) create mode 100644 tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=typesfirst).js create mode 100644 tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=typesfirst).types rename tsc/testdata/baselines/reference/compiler/{checkIndexConstraintOfJavascriptClassExpression.errors.txt => checkIndexConstraintOfJavascriptClassExpression(checkorder=default).errors.txt} (100%) rename tsc/testdata/baselines/reference/compiler/{checkIndexConstraintOfJavascriptClassExpression.symbols => checkIndexConstraintOfJavascriptClassExpression(checkorder=default).symbols} (100%) rename tsc/testdata/baselines/reference/compiler/{checkIndexConstraintOfJavascriptClassExpression.types => checkIndexConstraintOfJavascriptClassExpression(checkorder=default).types} (100%) create mode 100644 tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression(checkorder=typesfirst).types rename tsc/testdata/baselines/reference/compiler/{circularAccessorAnnotations.errors.txt => circularAccessorAnnotations(checkorder=default).errors.txt} (100%) rename tsc/testdata/baselines/reference/compiler/{circularAccessorAnnotations.js => circularAccessorAnnotations(checkorder=default).js} (100%) rename tsc/testdata/baselines/reference/compiler/{circularAccessorAnnotations.symbols => circularAccessorAnnotations(checkorder=default).symbols} (100%) rename tsc/testdata/baselines/reference/compiler/{circularAccessorAnnotations.types => circularAccessorAnnotations(checkorder=default).types} (100%) create mode 100644 tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=typesfirst).js create mode 100644 tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=typesfirst).types rename tsc/testdata/baselines/reference/compiler/{circularInlineMappedGenericTupleTypeNoCrash.errors.txt => circularInlineMappedGenericTupleTypeNoCrash(checkorder=default).errors.txt} (100%) rename tsc/testdata/baselines/reference/compiler/{circularInlineMappedGenericTupleTypeNoCrash.symbols => circularInlineMappedGenericTupleTypeNoCrash(checkorder=default).symbols} (100%) rename tsc/testdata/baselines/reference/compiler/{circularInlineMappedGenericTupleTypeNoCrash.types => circularInlineMappedGenericTupleTypeNoCrash(checkorder=default).types} (100%) create mode 100644 tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=typesfirst).types rename tsc/testdata/baselines/reference/compiler/{contextualOuterTypeParameters.symbols => contextualOuterTypeParameters(checkorder=default).symbols} (85%) rename tsc/testdata/baselines/reference/compiler/{contextualOuterTypeParameters.types => contextualOuterTypeParameters(checkorder=default).types} (84%) create mode 100644 tsc/testdata/baselines/reference/compiler/contextualOuterTypeParameters(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/contextualOuterTypeParameters(checkorder=typesfirst).types rename tsc/testdata/baselines/reference/compiler/{contextualReturnArrayPatternCallback.js => contextualReturnArrayPatternCallback(checkorder=default).js} (100%) rename tsc/testdata/baselines/reference/compiler/{contextualReturnArrayPatternCallback.symbols => contextualReturnArrayPatternCallback(checkorder=default).symbols} (100%) rename tsc/testdata/baselines/reference/compiler/{contextualReturnArrayPatternCallback.types => contextualReturnArrayPatternCallback(checkorder=default).types} (100%) create mode 100644 tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=typesfirst).js create mode 100644 tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=typesfirst).types rename tsc/testdata/baselines/reference/compiler/{deleteExpressionMustBeOptional(strict=false).errors.txt => deleteExpressionMustBeOptional(checkorder=default,strict=false).errors.txt} (100%) rename tsc/testdata/baselines/reference/compiler/{deleteExpressionMustBeOptional(strict=false).js => deleteExpressionMustBeOptional(checkorder=default,strict=false).js} (100%) rename tsc/testdata/baselines/reference/compiler/{deleteExpressionMustBeOptional(strict=false).symbols => deleteExpressionMustBeOptional(checkorder=default,strict=false).symbols} (100%) rename tsc/testdata/baselines/reference/compiler/{deleteExpressionMustBeOptional(strict=false).types => deleteExpressionMustBeOptional(checkorder=default,strict=false).types} (100%) rename tsc/testdata/baselines/reference/compiler/{deleteExpressionMustBeOptional(strict=true).errors.txt => deleteExpressionMustBeOptional(checkorder=default,strict=true).errors.txt} (100%) rename tsc/testdata/baselines/reference/compiler/{deleteExpressionMustBeOptional(strict=true).js => deleteExpressionMustBeOptional(checkorder=default,strict=true).js} (100%) rename tsc/testdata/baselines/reference/compiler/{deleteExpressionMustBeOptional(strict=true).symbols => deleteExpressionMustBeOptional(checkorder=default,strict=true).symbols} (100%) rename tsc/testdata/baselines/reference/compiler/{deleteExpressionMustBeOptional(strict=true).types => deleteExpressionMustBeOptional(checkorder=default,strict=true).types} (100%) create mode 100644 tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=false).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=false).js create mode 100644 tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=false).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=false).types create mode 100644 tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=true).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=true).js create mode 100644 tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=true).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=true).types rename tsc/testdata/baselines/reference/compiler/{excessivelyLargeTupleSpread.errors.txt => excessivelyLargeTupleSpread(checkorder=default).errors.txt} (100%) rename tsc/testdata/baselines/reference/compiler/{excessivelyLargeTupleSpread.js => excessivelyLargeTupleSpread(checkorder=default).js} (100%) rename tsc/testdata/baselines/reference/compiler/{excessivelyLargeTupleSpread.symbols => excessivelyLargeTupleSpread(checkorder=default).symbols} (100%) rename tsc/testdata/baselines/reference/compiler/{excessivelyLargeTupleSpread.types => excessivelyLargeTupleSpread(checkorder=default).types} (100%) rename tsc/testdata/baselines/reference/compiler/{exhaustiveSwitchCheckCircularity.errors.txt => exhaustiveSwitchCheckCircularity(checkorder=default).errors.txt} (100%) rename tsc/testdata/baselines/reference/compiler/{exhaustiveSwitchCheckCircularity.js => exhaustiveSwitchCheckCircularity(checkorder=default).js} (100%) rename tsc/testdata/baselines/reference/compiler/{exhaustiveSwitchCheckCircularity.symbols => exhaustiveSwitchCheckCircularity(checkorder=default).symbols} (100%) rename tsc/testdata/baselines/reference/compiler/{exhaustiveSwitchCheckCircularity.types => exhaustiveSwitchCheckCircularity(checkorder=default).types} (100%) create mode 100644 tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=typesfirst).js create mode 100644 tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=typesfirst).types rename tsc/testdata/baselines/reference/compiler/{fallbackToBindingPatternForTypeInference.errors.txt => fallbackToBindingPatternForTypeInference(checkorder=default).errors.txt} (100%) rename tsc/testdata/baselines/reference/compiler/{fallbackToBindingPatternForTypeInference.js => fallbackToBindingPatternForTypeInference(checkorder=default).js} (100%) rename tsc/testdata/baselines/reference/compiler/{fallbackToBindingPatternForTypeInference.symbols => fallbackToBindingPatternForTypeInference(checkorder=default).symbols} (100%) rename tsc/testdata/baselines/reference/compiler/{fallbackToBindingPatternForTypeInference.types => fallbackToBindingPatternForTypeInference(checkorder=default).types} (100%) create mode 100644 tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=typesfirst).js create mode 100644 tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=typesfirst).types rename tsc/testdata/baselines/reference/compiler/{fixingTypeParametersRepeatedly2.errors.txt => fixingTypeParametersRepeatedly2(checkorder=default).errors.txt} (100%) rename tsc/testdata/baselines/reference/compiler/{fixingTypeParametersRepeatedly2.js => fixingTypeParametersRepeatedly2(checkorder=default).js} (100%) rename tsc/testdata/baselines/reference/compiler/{fixingTypeParametersRepeatedly2.symbols => fixingTypeParametersRepeatedly2(checkorder=default).symbols} (100%) rename tsc/testdata/baselines/reference/compiler/{fixingTypeParametersRepeatedly2.types => fixingTypeParametersRepeatedly2(checkorder=default).types} (100%) create mode 100644 tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=typesfirst).js create mode 100644 tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=typesfirst).types rename tsc/testdata/baselines/reference/compiler/{jsxImportSourceNonPragmaComment.errors.txt => jsxImportSourceNonPragmaComment(checkorder=default).errors.txt} (100%) rename tsc/testdata/baselines/reference/compiler/{jsxImportSourceNonPragmaComment.js => jsxImportSourceNonPragmaComment(checkorder=default).js} (100%) rename tsc/testdata/baselines/reference/compiler/{jsxImportSourceNonPragmaComment.symbols => jsxImportSourceNonPragmaComment(checkorder=default).symbols} (100%) rename tsc/testdata/baselines/reference/compiler/{jsxImportSourceNonPragmaComment.types => jsxImportSourceNonPragmaComment(checkorder=default).types} (100%) create mode 100644 tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=typesfirst).js create mode 100644 tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=typesfirst).types rename tsc/testdata/baselines/reference/compiler/{jsxIntrinsicElementsExtendsRecord.js => jsxIntrinsicElementsExtendsRecord(checkorder=default).js} (100%) rename tsc/testdata/baselines/reference/compiler/{jsxIntrinsicElementsExtendsRecord.symbols => jsxIntrinsicElementsExtendsRecord(checkorder=default).symbols} (100%) rename tsc/testdata/baselines/reference/compiler/{jsxIntrinsicElementsExtendsRecord.types => jsxIntrinsicElementsExtendsRecord(checkorder=default).types} (100%) create mode 100644 tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord(checkorder=typesfirst).js create mode 100644 tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord(checkorder=typesfirst).types rename tsc/testdata/baselines/reference/compiler/{limitDeepInstantiations.errors.txt => limitDeepInstantiations(checkorder=default).errors.txt} (100%) rename tsc/testdata/baselines/reference/compiler/{limitDeepInstantiations.js => limitDeepInstantiations(checkorder=default).js} (100%) rename tsc/testdata/baselines/reference/compiler/{limitDeepInstantiations.symbols => limitDeepInstantiations(checkorder=default).symbols} (100%) rename tsc/testdata/baselines/reference/compiler/{limitDeepInstantiations.types => limitDeepInstantiations(checkorder=default).types} (100%) create mode 100644 tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=typesfirst).js create mode 100644 tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=typesfirst).types rename tsc/testdata/baselines/reference/compiler/{overloadresolutionWithConstraintCheckingDeferred.errors.txt => overloadresolutionWithConstraintCheckingDeferred(checkorder=default).errors.txt} (100%) rename tsc/testdata/baselines/reference/compiler/{overloadresolutionWithConstraintCheckingDeferred.js => overloadresolutionWithConstraintCheckingDeferred(checkorder=default).js} (100%) rename tsc/testdata/baselines/reference/compiler/{overloadresolutionWithConstraintCheckingDeferred.symbols => overloadresolutionWithConstraintCheckingDeferred(checkorder=default).symbols} (100%) rename tsc/testdata/baselines/reference/compiler/{overloadresolutionWithConstraintCheckingDeferred.types => overloadresolutionWithConstraintCheckingDeferred(checkorder=default).types} (100%) create mode 100644 tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=typesfirst).js create mode 100644 tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=typesfirst).types rename tsc/testdata/baselines/reference/compiler/{returnTypeInferenceNotTooBroad.js => returnTypeInferenceNotTooBroad(checkorder=default).js} (100%) rename tsc/testdata/baselines/reference/compiler/{returnTypeInferenceNotTooBroad.symbols => returnTypeInferenceNotTooBroad(checkorder=default).symbols} (100%) rename tsc/testdata/baselines/reference/compiler/{returnTypeInferenceNotTooBroad.types => returnTypeInferenceNotTooBroad(checkorder=default).types} (100%) create mode 100644 tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad(checkorder=typesfirst).js create mode 100644 tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad(checkorder=typesfirst).types rename tsc/testdata/baselines/reference/compiler/{templateLiteralTypeExcessiveLength.errors.txt => templateLiteralTypeExcessiveLength(checkorder=default).errors.txt} (100%) rename tsc/testdata/baselines/reference/compiler/{templateLiteralTypeExcessiveLength.js => templateLiteralTypeExcessiveLength(checkorder=default).js} (100%) rename tsc/testdata/baselines/reference/compiler/{templateLiteralTypeExcessiveLength.symbols => templateLiteralTypeExcessiveLength(checkorder=default).symbols} (100%) rename tsc/testdata/baselines/reference/compiler/{templateLiteralTypeExcessiveLength.types => templateLiteralTypeExcessiveLength(checkorder=default).types} (100%) create mode 100644 tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).js create mode 100644 tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).types rename tsc/testdata/baselines/reference/compiler/{typeParameterHasSelfAsConstraint.errors.txt => typeParameterHasSelfAsConstraint(checkorder=default).errors.txt} (100%) rename tsc/testdata/baselines/reference/compiler/{typeParameterHasSelfAsConstraint.js => typeParameterHasSelfAsConstraint(checkorder=default).js} (100%) rename tsc/testdata/baselines/reference/compiler/{typeParameterHasSelfAsConstraint.symbols => typeParameterHasSelfAsConstraint(checkorder=default).symbols} (100%) rename tsc/testdata/baselines/reference/compiler/{typeParameterHasSelfAsConstraint.types => typeParameterHasSelfAsConstraint(checkorder=default).types} (100%) create mode 100644 tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=typesfirst).js create mode 100644 tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=typesfirst).types rename tsc/testdata/baselines/reference/compiler/{unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.errors.txt => unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=default).errors.txt} (100%) rename tsc/testdata/baselines/reference/compiler/{unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.js => unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=default).js} (100%) rename tsc/testdata/baselines/reference/compiler/{unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.symbols => unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=default).symbols} (100%) rename tsc/testdata/baselines/reference/compiler/{unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.types => unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=default).types} (100%) create mode 100644 tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=typesfirst).js create mode 100644 tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=typesfirst).types rename tsc/testdata/baselines/reference/conformance/{dependentDestructuredVariablesReferenceInDeclaration1.errors.txt => dependentDestructuredVariablesReferenceInDeclaration1(checkorder=default).errors.txt} (100%) rename tsc/testdata/baselines/reference/conformance/{dependentDestructuredVariablesReferenceInDeclaration1.symbols => dependentDestructuredVariablesReferenceInDeclaration1(checkorder=default).symbols} (100%) rename tsc/testdata/baselines/reference/conformance/{dependentDestructuredVariablesReferenceInDeclaration1.types => dependentDestructuredVariablesReferenceInDeclaration1(checkorder=default).types} (100%) create mode 100644 tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1(checkorder=typesfirst).types rename tsc/testdata/baselines/reference/conformance/{destructuringWithLiteralInitializers.js => destructuringWithLiteralInitializers(checkorder=default).js} (100%) rename tsc/testdata/baselines/reference/conformance/{destructuringWithLiteralInitializers.symbols => destructuringWithLiteralInitializers(checkorder=default).symbols} (100%) rename tsc/testdata/baselines/reference/conformance/{destructuringWithLiteralInitializers.types => destructuringWithLiteralInitializers(checkorder=default).types} (100%) create mode 100644 tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=typesfirst).js create mode 100644 tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=typesfirst).types rename tsc/testdata/baselines/reference/conformance/{importTag13.errors.txt => importTag13(checkorder=default).errors.txt} (100%) rename tsc/testdata/baselines/reference/conformance/{importTag13.symbols => importTag13(checkorder=default).symbols} (100%) rename tsc/testdata/baselines/reference/conformance/{importTag13.types => importTag13(checkorder=default).types} (100%) create mode 100644 tsc/testdata/baselines/reference/conformance/importTag13(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/conformance/importTag13(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/conformance/importTag13(checkorder=typesfirst).types rename tsc/testdata/baselines/reference/conformance/{privateNameNestedClassFieldShadowing.errors.txt => privateNameNestedClassFieldShadowing(checkorder=default).errors.txt} (100%) rename tsc/testdata/baselines/reference/conformance/{privateNameNestedClassFieldShadowing.js => privateNameNestedClassFieldShadowing(checkorder=default).js} (100%) rename tsc/testdata/baselines/reference/conformance/{privateNameNestedClassFieldShadowing.symbols => privateNameNestedClassFieldShadowing(checkorder=default).symbols} (100%) rename tsc/testdata/baselines/reference/conformance/{privateNameNestedClassFieldShadowing.types => privateNameNestedClassFieldShadowing(checkorder=default).types} (100%) create mode 100644 tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=typesfirst).js create mode 100644 tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=typesfirst).types diff --git a/tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier.errors.txt b/tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=default).errors.txt similarity index 100% rename from tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier.errors.txt rename to tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=default).errors.txt diff --git a/tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier.js b/tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=default).js similarity index 100% rename from tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier.js rename to tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=default).js diff --git a/tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier.symbols b/tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=default).symbols similarity index 100% rename from tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier.symbols rename to tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=default).symbols diff --git a/tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier.types b/tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=default).types similarity index 100% rename from tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier.types rename to tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=default).types diff --git a/tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..e70af53237c1f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=typesfirst).errors.txt @@ -0,0 +1,72 @@ +badExport.ts(1,10): error TS2304: Cannot find name 'foo'. +badExport.ts(1,17): error TS1003: Identifier expected. +badExport.ts(1,20): error TS1128: Declaration or statement expected. +badExport2.ts(1,10): error TS1003: Identifier expected. +badExport2.ts(1,16): error TS2304: Cannot find name 'foo'. +badExport2.ts(1,20): error TS1128: Declaration or statement expected. +badImport.ts(1,10): error TS1003: Identifier expected. +badImport.ts(1,10): error TS1141: String literal expected. +badImport.ts(1,16): error TS2304: Cannot find name 'foo'. +badImport.ts(1,20): error TS1128: Declaration or statement expected. +badImport.ts(1,22): error TS1434: Unexpected keyword or identifier. +badImport.ts(1,22): error TS2304: Cannot find name 'from'. +badImport2.ts(1,17): error TS1003: Identifier expected. +badImport2.ts(1,17): error TS1141: String literal expected. +badImport2.ts(1,20): error TS1128: Declaration or statement expected. +badImport2.ts(1,22): error TS1434: Unexpected keyword or identifier. +badImport2.ts(1,22): error TS2304: Cannot find name 'from'. + + +==== foo.ts (0 errors) ==== + const foo = 0n; + export { foo as "0n" }; + +==== correctUse.ts (0 errors) ==== + import { "0n" as foo } from "./foo"; + export { foo as "0n" }; + +==== badImport.ts (6 errors) ==== + import { 0n as foo } from "./foo"; + ~~ +!!! error TS1003: Identifier expected. + ~~~~~~~~~ +!!! error TS1141: String literal expected. + ~~~ +!!! error TS2304: Cannot find name 'foo'. + ~ +!!! error TS1128: Declaration or statement expected. + ~~~~ +!!! error TS1434: Unexpected keyword or identifier. + ~~~~ +!!! error TS2304: Cannot find name 'from'. + +==== badImport2.ts (5 errors) ==== + import { foo as 0n } from "./foo"; + ~~ +!!! error TS1003: Identifier expected. + ~~ +!!! error TS1141: String literal expected. + ~ +!!! error TS1128: Declaration or statement expected. + ~~~~ +!!! error TS1434: Unexpected keyword or identifier. + ~~~~ +!!! error TS2304: Cannot find name 'from'. + +==== badExport.ts (3 errors) ==== + export { foo as 0n }; + ~~~ +!!! error TS2304: Cannot find name 'foo'. + ~~ +!!! error TS1003: Identifier expected. + ~ +!!! error TS1128: Declaration or statement expected. + +==== badExport2.ts (3 errors) ==== + export { 0n as foo }; + ~~ +!!! error TS1003: Identifier expected. + ~~~ +!!! error TS2304: Cannot find name 'foo'. + ~ +!!! error TS1128: Declaration or statement expected. \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=typesfirst).js b/tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=typesfirst).js new file mode 100644 index 0000000000000..139c1991c8c3f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=typesfirst).js @@ -0,0 +1,44 @@ +//// [tests/cases/compiler/bigintArbirtraryIdentifier.ts] //// + +//// [foo.ts] +const foo = 0n; +export { foo as "0n" }; + +//// [correctUse.ts] +import { "0n" as foo } from "./foo"; +export { foo as "0n" }; + +//// [badImport.ts] +import { 0n as foo } from "./foo"; + +//// [badImport2.ts] +import { foo as 0n } from "./foo"; + +//// [badExport.ts] +export { foo as 0n }; + +//// [badExport2.ts] +export { 0n as foo }; + +//// [foo.js] +const foo = 0n; +export { foo as "0n" }; +//// [correctUse.js] +import { "0n" as foo } from "./foo"; +export { foo as "0n" }; +//// [badImport.js] +from; +"./foo"; +export {}; +//// [badImport2.js] +from; +"./foo"; +export {}; +//// [badExport.js] +export { foo as }; +0n; +; +//// [badExport2.js] +0n; +; +export {}; diff --git a/tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..8ef83a9eaec97 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=typesfirst).symbols @@ -0,0 +1,34 @@ +//// [tests/cases/compiler/bigintArbirtraryIdentifier.ts] //// + +=== foo.ts === +const foo = 0n; +>foo : Symbol(foo, Decl(foo.ts, 0, 5)) + +export { foo as "0n" }; +>foo : Symbol(foo, Decl(foo.ts, 0, 5)) +>"0n" : Symbol("0n", Decl(foo.ts, 1, 8)) + +=== correctUse.ts === +import { "0n" as foo } from "./foo"; +>foo : Symbol(foo, Decl(correctUse.ts, 0, 8)) + +export { foo as "0n" }; +>foo : Symbol(foo, Decl(correctUse.ts, 0, 8)) +>"0n" : Symbol("0n", Decl(correctUse.ts, 1, 8)) + +=== badImport.ts === +import { 0n as foo } from "./foo"; +>foo : Symbol(foo) + +=== badImport2.ts === +import { foo as 0n } from "./foo"; +> : Symbol((Missing), Decl(badImport2.ts, 0, 8)) + +=== badExport.ts === +export { foo as 0n }; +> : Symbol((Missing), Decl(badExport.ts, 0, 8)) + +=== badExport2.ts === +export { 0n as foo }; +>foo : Symbol(foo) + diff --git a/tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=typesfirst).types new file mode 100644 index 0000000000000..c3f2d2ceb5859 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=typesfirst).types @@ -0,0 +1,44 @@ +//// [tests/cases/compiler/bigintArbirtraryIdentifier.ts] //// + +=== foo.ts === +const foo = 0n; +>foo : 0n +>0n : 0n + +export { foo as "0n" }; +>foo : 0n +>"0n" : 0n + +=== correctUse.ts === +import { "0n" as foo } from "./foo"; +>foo : 0n + +export { foo as "0n" }; +>foo : 0n +>"0n" : 0n + +=== badImport.ts === +import { 0n as foo } from "./foo"; +>0n as foo : foo +>0n : 0n +>from : any +>"./foo" : "./foo" + +=== badImport2.ts === +import { foo as 0n } from "./foo"; +>foo : any +> : any +>from : any +>"./foo" : "./foo" + +=== badExport.ts === +export { foo as 0n }; +>foo : any +> : any +>0n : 0n + +=== badExport2.ts === +export { 0n as foo }; +>0n as foo : foo +>0n : 0n + diff --git a/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression.errors.txt b/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression(checkorder=default).errors.txt similarity index 100% rename from tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression.errors.txt rename to tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression(checkorder=default).errors.txt diff --git a/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression.symbols b/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression(checkorder=default).symbols similarity index 100% rename from tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression.symbols rename to tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression(checkorder=default).symbols diff --git a/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression.types b/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression(checkorder=default).types similarity index 100% rename from tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression.types rename to tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression(checkorder=default).types diff --git a/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..a15bd4d38db0d --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression(checkorder=typesfirst).errors.txt @@ -0,0 +1,24 @@ +weird.js(1,1): error TS2552: Cannot find name 'someFunction'. Did you mean 'Function'? +weird.js(9,17): error TS7006: Parameter 'error' implicitly has an 'any' type. + + +==== weird.js (2 errors) ==== + someFunction(function(BaseClass) { + ~~~~~~~~~~~~ +!!! error TS2552: Cannot find name 'someFunction'. Did you mean 'Function'? +!!! related TS2728 lib.es5.d.ts:--:--: 'Function' is declared here. + 'use strict'; + const DEFAULT_MESSAGE = "nop!"; + class Hello extends BaseClass { + constructor() { + super(); + this.foo = "bar"; + } + _render(error) { + ~~~~~ +!!! error TS7006: Parameter 'error' implicitly has an 'any' type. + const message = error.message || DEFAULT_MESSAGE; + } + } + }); + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..99ddd57e9d8cd --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression(checkorder=typesfirst).symbols @@ -0,0 +1,33 @@ +//// [tests/cases/compiler/checkIndexConstraintOfJavascriptClassExpression.ts] //// + +=== weird.js === +someFunction(function(BaseClass) { +>BaseClass : Symbol(BaseClass, Decl(weird.js, 0, 22)) + + 'use strict'; + const DEFAULT_MESSAGE = "nop!"; +>DEFAULT_MESSAGE : Symbol(DEFAULT_MESSAGE, Decl(weird.js, 2, 9)) + + class Hello extends BaseClass { +>Hello : Symbol(Hello, Decl(weird.js, 2, 35)) +>BaseClass : Symbol(BaseClass, Decl(weird.js, 0, 22)) + + constructor() { + super(); + this.foo = "bar"; +>this.foo : Symbol(Hello.foo, Decl(weird.js, 5, 20)) +>this : Symbol(Hello, Decl(weird.js, 2, 35)) +>foo : Symbol(Hello.foo, Decl(weird.js, 5, 20)) + } + _render(error) { +>_render : Symbol(Hello._render, Decl(weird.js, 7, 9)) +>error : Symbol(error, Decl(weird.js, 8, 16)) + + const message = error.message || DEFAULT_MESSAGE; +>message : Symbol(message, Decl(weird.js, 9, 17)) +>error : Symbol(error, Decl(weird.js, 8, 16)) +>DEFAULT_MESSAGE : Symbol(DEFAULT_MESSAGE, Decl(weird.js, 2, 9)) + } + } +}); + diff --git a/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression(checkorder=typesfirst).types new file mode 100644 index 0000000000000..7f98768cc3b3e --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression(checkorder=typesfirst).types @@ -0,0 +1,47 @@ +//// [tests/cases/compiler/checkIndexConstraintOfJavascriptClassExpression.ts] //// + +=== weird.js === +someFunction(function(BaseClass) { +>someFunction(function(BaseClass) { 'use strict'; const DEFAULT_MESSAGE = "nop!"; class Hello extends BaseClass { constructor() { super(); this.foo = "bar"; } _render(error) { const message = error.message || DEFAULT_MESSAGE; } }}) : any +>someFunction : any +>function(BaseClass) { 'use strict'; const DEFAULT_MESSAGE = "nop!"; class Hello extends BaseClass { constructor() { super(); this.foo = "bar"; } _render(error) { const message = error.message || DEFAULT_MESSAGE; } }} : (BaseClass: any) => void +>BaseClass : any + + 'use strict'; +>'use strict' : "use strict" + + const DEFAULT_MESSAGE = "nop!"; +>DEFAULT_MESSAGE : "nop!" +>"nop!" : "nop!" + + class Hello extends BaseClass { +>Hello : Hello +>BaseClass : any + + constructor() { + super(); +>super() : void +>super : any + + this.foo = "bar"; +>this.foo = "bar" : "bar" +>this.foo : any +>this : this +>foo : any +>"bar" : "bar" + } + _render(error) { +>_render : (error: any) => void +>error : any + + const message = error.message || DEFAULT_MESSAGE; +>message : any +>error.message || DEFAULT_MESSAGE : any +>error.message : any +>error : any +>message : any +>DEFAULT_MESSAGE : "nop!" + } + } +}); + diff --git a/tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations.errors.txt b/tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=default).errors.txt similarity index 100% rename from tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations.errors.txt rename to tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=default).errors.txt diff --git a/tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations.js b/tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=default).js similarity index 100% rename from tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations.js rename to tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=default).js diff --git a/tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations.symbols b/tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=default).symbols similarity index 100% rename from tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations.symbols rename to tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=default).symbols diff --git a/tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations.types b/tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=default).types similarity index 100% rename from tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations.types rename to tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=default).types diff --git a/tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..9254be443a6c1 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=typesfirst).errors.txt @@ -0,0 +1,41 @@ +circularAccessorAnnotations.ts(2,9): error TS2502: 'foo' is referenced directly or indirectly in its own type annotation. +circularAccessorAnnotations.ts(6,9): error TS2502: 'foo' is referenced directly or indirectly in its own type annotation. +circularAccessorAnnotations.ts(15,9): error TS2502: 'foo' is referenced directly or indirectly in its own type annotation. +circularAccessorAnnotations.ts(19,9): error TS2502: 'foo' is referenced directly or indirectly in its own type annotation. + + +==== circularAccessorAnnotations.ts (4 errors) ==== + declare const c1: { + get foo(): typeof c1.foo; + ~~~ +!!! error TS2502: 'foo' is referenced directly or indirectly in its own type annotation. + } + + declare const c2: { + set foo(value: typeof c2.foo); + ~~~ +!!! error TS2502: 'foo' is referenced directly or indirectly in its own type annotation. + } + + declare const c3: { + get foo(): string; + set foo(value: typeof c3.foo); + } + + type T1 = { + get foo(): T1["foo"]; + ~~~ +!!! error TS2502: 'foo' is referenced directly or indirectly in its own type annotation. + } + + type T2 = { + set foo(value: T2["foo"]); + ~~~ +!!! error TS2502: 'foo' is referenced directly or indirectly in its own type annotation. + } + + type T3 = { + get foo(): string; + set foo(value: T3["foo"]); + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=typesfirst).js b/tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=typesfirst).js new file mode 100644 index 0000000000000..5f976ec06b212 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=typesfirst).js @@ -0,0 +1,55 @@ +//// [tests/cases/compiler/circularAccessorAnnotations.ts] //// + +//// [circularAccessorAnnotations.ts] +declare const c1: { + get foo(): typeof c1.foo; +} + +declare const c2: { + set foo(value: typeof c2.foo); +} + +declare const c3: { + get foo(): string; + set foo(value: typeof c3.foo); +} + +type T1 = { + get foo(): T1["foo"]; +} + +type T2 = { + set foo(value: T2["foo"]); +} + +type T3 = { + get foo(): string; + set foo(value: T3["foo"]); +} + + +//// [circularAccessorAnnotations.js] +"use strict"; + + +//// [circularAccessorAnnotations.d.ts] +declare const c1: { + get foo(): typeof c1.foo; +}; +declare const c2: { + set foo(value: typeof c2.foo); +}; +declare const c3: { + get foo(): string; + set foo(value: typeof c3.foo); +}; +type T1 = { + get foo(): T1["foo"]; +}; +type T2 = { + set foo(value: T2["foo"]); +}; +type T3 = { + get foo(): string; + set foo(value: T3["foo"]); +}; diff --git a/tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..d95b8cec0782f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=typesfirst).symbols @@ -0,0 +1,67 @@ +//// [tests/cases/compiler/circularAccessorAnnotations.ts] //// + +=== circularAccessorAnnotations.ts === +declare const c1: { +>c1 : Symbol(c1, Decl(circularAccessorAnnotations.ts, 0, 13)) + + get foo(): typeof c1.foo; +>foo : Symbol(foo, Decl(circularAccessorAnnotations.ts, 0, 19)) +>c1.foo : Symbol(foo, Decl(circularAccessorAnnotations.ts, 0, 19)) +>c1 : Symbol(c1, Decl(circularAccessorAnnotations.ts, 0, 13)) +>foo : Symbol(foo, Decl(circularAccessorAnnotations.ts, 0, 19)) +} + +declare const c2: { +>c2 : Symbol(c2, Decl(circularAccessorAnnotations.ts, 4, 13)) + + set foo(value: typeof c2.foo); +>foo : Symbol(foo, Decl(circularAccessorAnnotations.ts, 4, 19)) +>value : Symbol(value, Decl(circularAccessorAnnotations.ts, 5, 12)) +>c2.foo : Symbol(foo, Decl(circularAccessorAnnotations.ts, 4, 19)) +>c2 : Symbol(c2, Decl(circularAccessorAnnotations.ts, 4, 13)) +>foo : Symbol(foo, Decl(circularAccessorAnnotations.ts, 4, 19)) +} + +declare const c3: { +>c3 : Symbol(c3, Decl(circularAccessorAnnotations.ts, 8, 13)) + + get foo(): string; +>foo : Symbol(foo, Decl(circularAccessorAnnotations.ts, 8, 19), Decl(circularAccessorAnnotations.ts, 9, 22)) + + set foo(value: typeof c3.foo); +>foo : Symbol(foo, Decl(circularAccessorAnnotations.ts, 8, 19), Decl(circularAccessorAnnotations.ts, 9, 22)) +>value : Symbol(value, Decl(circularAccessorAnnotations.ts, 10, 12)) +>c3.foo : Symbol(foo, Decl(circularAccessorAnnotations.ts, 8, 19), Decl(circularAccessorAnnotations.ts, 9, 22)) +>c3 : Symbol(c3, Decl(circularAccessorAnnotations.ts, 8, 13)) +>foo : Symbol(foo, Decl(circularAccessorAnnotations.ts, 8, 19), Decl(circularAccessorAnnotations.ts, 9, 22)) +} + +type T1 = { +>T1 : Symbol(T1, Decl(circularAccessorAnnotations.ts, 11, 1)) + + get foo(): T1["foo"]; +>foo : Symbol(foo, Decl(circularAccessorAnnotations.ts, 13, 11)) +>T1 : Symbol(T1, Decl(circularAccessorAnnotations.ts, 11, 1)) +} + +type T2 = { +>T2 : Symbol(T2, Decl(circularAccessorAnnotations.ts, 15, 1)) + + set foo(value: T2["foo"]); +>foo : Symbol(foo, Decl(circularAccessorAnnotations.ts, 17, 11)) +>value : Symbol(value, Decl(circularAccessorAnnotations.ts, 18, 12)) +>T2 : Symbol(T2, Decl(circularAccessorAnnotations.ts, 15, 1)) +} + +type T3 = { +>T3 : Symbol(T3, Decl(circularAccessorAnnotations.ts, 19, 1)) + + get foo(): string; +>foo : Symbol(foo, Decl(circularAccessorAnnotations.ts, 21, 11), Decl(circularAccessorAnnotations.ts, 22, 22)) + + set foo(value: T3["foo"]); +>foo : Symbol(foo, Decl(circularAccessorAnnotations.ts, 21, 11), Decl(circularAccessorAnnotations.ts, 22, 22)) +>value : Symbol(value, Decl(circularAccessorAnnotations.ts, 23, 12)) +>T3 : Symbol(T3, Decl(circularAccessorAnnotations.ts, 19, 1)) +} + diff --git a/tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=typesfirst).types new file mode 100644 index 0000000000000..e6b4d1fca90ca --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=typesfirst).types @@ -0,0 +1,64 @@ +//// [tests/cases/compiler/circularAccessorAnnotations.ts] //// + +=== circularAccessorAnnotations.ts === +declare const c1: { +>c1 : { readonly foo: any; } + + get foo(): typeof c1.foo; +>foo : any +>c1.foo : any +>c1 : { readonly foo: any; } +>foo : any +} + +declare const c2: { +>c2 : { foo: any; } + + set foo(value: typeof c2.foo); +>foo : any +>value : any +>c2.foo : any +>c2 : { foo: any; } +>foo : any +} + +declare const c3: { +>c3 : { foo: string; } + + get foo(): string; +>foo : string + + set foo(value: typeof c3.foo); +>foo : string +>value : string +>c3.foo : string +>c3 : { foo: string; } +>foo : string +} + +type T1 = { +>T1 : T1 + + get foo(): T1["foo"]; +>foo : any +} + +type T2 = { +>T2 : T2 + + set foo(value: T2["foo"]); +>foo : any +>value : any +} + +type T3 = { +>T3 : T3 + + get foo(): string; +>foo : string + + set foo(value: T3["foo"]); +>foo : string +>value : string +} + diff --git a/tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash.errors.txt b/tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=default).errors.txt similarity index 100% rename from tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash.errors.txt rename to tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=default).errors.txt diff --git a/tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash.symbols b/tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=default).symbols similarity index 100% rename from tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash.symbols rename to tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=default).symbols diff --git a/tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash.types b/tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=default).types similarity index 100% rename from tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash.types rename to tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=default).types diff --git a/tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..e78f397fc931f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=typesfirst).errors.txt @@ -0,0 +1,19 @@ +error TS2589: Type instantiation is excessively deep and possibly infinite. + + +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. +==== circularInlineMappedGenericTupleTypeNoCrash.ts (0 errors) ==== + class Foo { + public readonly elements: { [P in keyof Elements]: { bar: Elements[P] } }; + + public constructor( + ...elements: { [P in keyof Elements]: { bar: Elements[P] } } + ) { + this.elements = elements; + } + + public add(): Foo<[...Elements, "abc"]> { + return new Foo<[...Elements, "abc"]>(...this.elements, { bar: "abc" }); + } + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..c5a706f25c93c --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=typesfirst).symbols @@ -0,0 +1,47 @@ +//// [tests/cases/compiler/circularInlineMappedGenericTupleTypeNoCrash.ts] //// + +=== circularInlineMappedGenericTupleTypeNoCrash.ts === +class Foo { +>Foo : Symbol(Foo, Decl(circularInlineMappedGenericTupleTypeNoCrash.ts, 0, 0)) +>Elements : Symbol(Elements, Decl(circularInlineMappedGenericTupleTypeNoCrash.ts, 0, 10)) + + public readonly elements: { [P in keyof Elements]: { bar: Elements[P] } }; +>elements : Symbol(Foo.elements, Decl(circularInlineMappedGenericTupleTypeNoCrash.ts, 0, 48)) +>P : Symbol(P, Decl(circularInlineMappedGenericTupleTypeNoCrash.ts, 1, 31)) +>Elements : Symbol(Elements, Decl(circularInlineMappedGenericTupleTypeNoCrash.ts, 0, 10)) +>bar : Symbol(bar, Decl(circularInlineMappedGenericTupleTypeNoCrash.ts, 1, 54)) +>Elements : Symbol(Elements, Decl(circularInlineMappedGenericTupleTypeNoCrash.ts, 0, 10)) +>P : Symbol(P, Decl(circularInlineMappedGenericTupleTypeNoCrash.ts, 1, 31)) + + public constructor( + ...elements: { [P in keyof Elements]: { bar: Elements[P] } } +>elements : Symbol(elements, Decl(circularInlineMappedGenericTupleTypeNoCrash.ts, 3, 21)) +>P : Symbol(P, Decl(circularInlineMappedGenericTupleTypeNoCrash.ts, 4, 20)) +>Elements : Symbol(Elements, Decl(circularInlineMappedGenericTupleTypeNoCrash.ts, 0, 10)) +>bar : Symbol(bar, Decl(circularInlineMappedGenericTupleTypeNoCrash.ts, 4, 43)) +>Elements : Symbol(Elements, Decl(circularInlineMappedGenericTupleTypeNoCrash.ts, 0, 10)) +>P : Symbol(P, Decl(circularInlineMappedGenericTupleTypeNoCrash.ts, 4, 20)) + + ) { + this.elements = elements; +>this.elements : Symbol(Foo.elements, Decl(circularInlineMappedGenericTupleTypeNoCrash.ts, 0, 48)) +>this : Symbol(Foo, Decl(circularInlineMappedGenericTupleTypeNoCrash.ts, 0, 0)) +>elements : Symbol(Foo.elements, Decl(circularInlineMappedGenericTupleTypeNoCrash.ts, 0, 48)) +>elements : Symbol(elements, Decl(circularInlineMappedGenericTupleTypeNoCrash.ts, 3, 21)) + } + + public add(): Foo<[...Elements, "abc"]> { +>add : Symbol(Foo.add, Decl(circularInlineMappedGenericTupleTypeNoCrash.ts, 7, 3)) +>Foo : Symbol(Foo, Decl(circularInlineMappedGenericTupleTypeNoCrash.ts, 0, 0)) +>Elements : Symbol(Elements, Decl(circularInlineMappedGenericTupleTypeNoCrash.ts, 0, 10)) + + return new Foo<[...Elements, "abc"]>(...this.elements, { bar: "abc" }); +>Foo : Symbol(Foo, Decl(circularInlineMappedGenericTupleTypeNoCrash.ts, 0, 0)) +>Elements : Symbol(Elements, Decl(circularInlineMappedGenericTupleTypeNoCrash.ts, 0, 10)) +>this.elements : Symbol(Foo.elements, Decl(circularInlineMappedGenericTupleTypeNoCrash.ts, 0, 48)) +>this : Symbol(Foo, Decl(circularInlineMappedGenericTupleTypeNoCrash.ts, 0, 0)) +>elements : Symbol(Foo.elements, Decl(circularInlineMappedGenericTupleTypeNoCrash.ts, 0, 48)) +>bar : Symbol(bar, Decl(circularInlineMappedGenericTupleTypeNoCrash.ts, 10, 60)) + } +} + diff --git a/tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=typesfirst).types new file mode 100644 index 0000000000000..660b3ff1bac7e --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=typesfirst).types @@ -0,0 +1,40 @@ +//// [tests/cases/compiler/circularInlineMappedGenericTupleTypeNoCrash.ts] //// + +=== circularInlineMappedGenericTupleTypeNoCrash.ts === +class Foo { +>Foo : Foo + + public readonly elements: { [P in keyof Elements]: { bar: Elements[P] } }; +>elements : { [P in keyof Elements]: { bar: Elements[P]; }; } +>bar : Elements[P] + + public constructor( + ...elements: { [P in keyof Elements]: { bar: Elements[P] } } +>elements : { [P in keyof Elements]: { bar: Elements[P]; }; } +>bar : Elements[P] + + ) { + this.elements = elements; +>this.elements = elements : { [P in keyof Elements]: { bar: Elements[P]; }; } +>this.elements : { [P in keyof Elements]: { bar: Elements[P]; }; } +>this : this +>elements : { [P in keyof Elements]: { bar: Elements[P]; }; } +>elements : { [P in keyof Elements]: { bar: Elements[P]; }; } + } + + public add(): Foo<[...Elements, "abc"]> { +>add : () => Foo<[...Elements, "abc"]> + + return new Foo<[...Elements, "abc"]>(...this.elements, { bar: "abc" }); +>new Foo<[...Elements, "abc"]>(...this.elements, { bar: "abc" }) : Foo<[...Elements, "abc"]> +>Foo : typeof Foo +>...this.elements : { bar: unknown; } +>this.elements : { [P in keyof Elements]: { bar: Elements[P]; }; } +>this : this +>elements : { [P in keyof Elements]: { bar: Elements[P]; }; } +>{ bar: "abc" } : { bar: string; } +>bar : string +>"abc" : "abc" + } +} + diff --git a/tsc/testdata/baselines/reference/compiler/contextualOuterTypeParameters.symbols b/tsc/testdata/baselines/reference/compiler/contextualOuterTypeParameters(checkorder=default).symbols similarity index 85% rename from tsc/testdata/baselines/reference/compiler/contextualOuterTypeParameters.symbols rename to tsc/testdata/baselines/reference/compiler/contextualOuterTypeParameters(checkorder=default).symbols index 72ec61e99b1a7..3fe6805b944a0 100644 --- a/tsc/testdata/baselines/reference/compiler/contextualOuterTypeParameters.symbols +++ b/tsc/testdata/baselines/reference/compiler/contextualOuterTypeParameters(checkorder=default).symbols @@ -88,3 +88,19 @@ const obj: { f: (x: T) => void } = { } }; +f(function self(t) { +>f : Symbol(f, Decl(contextualOuterTypeParameters.ts, 0, 0)) +>self : Symbol(self, Decl(contextualOuterTypeParameters.ts, 26, 2)) +>t : Symbol(t, Decl(contextualOuterTypeParameters.ts, 26, 16)) + + const s = self; +>s : Symbol(s, Decl(contextualOuterTypeParameters.ts, 27, 9)) +>self : Symbol(self, Decl(contextualOuterTypeParameters.ts, 26, 2)) + + type P = Parameters; +>P : Symbol(P, Decl(contextualOuterTypeParameters.ts, 27, 19)) +>Parameters : Symbol(Parameters, Decl(lib.es5.d.ts, --, --)) +>s : Symbol(s, Decl(contextualOuterTypeParameters.ts, 27, 9)) + +}); + diff --git a/tsc/testdata/baselines/reference/compiler/contextualOuterTypeParameters.types b/tsc/testdata/baselines/reference/compiler/contextualOuterTypeParameters(checkorder=default).types similarity index 84% rename from tsc/testdata/baselines/reference/compiler/contextualOuterTypeParameters.types rename to tsc/testdata/baselines/reference/compiler/contextualOuterTypeParameters(checkorder=default).types index 03e7ade20825b..3be38bfec4e31 100644 --- a/tsc/testdata/baselines/reference/compiler/contextualOuterTypeParameters.types +++ b/tsc/testdata/baselines/reference/compiler/contextualOuterTypeParameters(checkorder=default).types @@ -101,3 +101,20 @@ const obj: { f: (x: T) => void } = { } }; +f(function self(t) { +>f(function self(t) { const s = self; type P = Parameters;}) : void +>f : (fun: (t: T) => void) => void +>function self(t) { const s = self; type P = Parameters;} : (t: T) => void +>self : (t: T) => void +>t : T + + const s = self; +>s : (t: T) => void +>self : (t: T) => void + + type P = Parameters; +>P : [t: unknown] +>s : (t: T) => void + +}); + diff --git a/tsc/testdata/baselines/reference/compiler/contextualOuterTypeParameters(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/contextualOuterTypeParameters(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..3fe6805b944a0 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/contextualOuterTypeParameters(checkorder=typesfirst).symbols @@ -0,0 +1,106 @@ +//// [tests/cases/compiler/contextualOuterTypeParameters.ts] //// + +=== contextualOuterTypeParameters.ts === +// https://github.com/microsoft/TypeScript/issues/59450 + +declare function f(fun: (t: T) => void): void +>f : Symbol(f, Decl(contextualOuterTypeParameters.ts, 0, 0)) +>fun : Symbol(fun, Decl(contextualOuterTypeParameters.ts, 2, 19)) +>T : Symbol(T, Decl(contextualOuterTypeParameters.ts, 2, 25)) +>t : Symbol(t, Decl(contextualOuterTypeParameters.ts, 2, 28)) +>T : Symbol(T, Decl(contextualOuterTypeParameters.ts, 2, 25)) + +f(t => { +>f : Symbol(f, Decl(contextualOuterTypeParameters.ts, 0, 0)) +>t : Symbol(t, Decl(contextualOuterTypeParameters.ts, 4, 2)) + + type isArray = (typeof t)[] extends string[] ? true : false; +>isArray : Symbol(isArray, Decl(contextualOuterTypeParameters.ts, 4, 8)) +>t : Symbol(t, Decl(contextualOuterTypeParameters.ts, 4, 2)) + + type IsObject = { x: typeof t } extends { x: string } ? true : false; +>IsObject : Symbol(IsObject, Decl(contextualOuterTypeParameters.ts, 5, 64)) +>x : Symbol(x, Decl(contextualOuterTypeParameters.ts, 6, 21)) +>t : Symbol(t, Decl(contextualOuterTypeParameters.ts, 4, 2)) +>x : Symbol(x, Decl(contextualOuterTypeParameters.ts, 6, 45)) + +}); + +const fn1: (x: T) => void = t => { +>fn1 : Symbol(fn1, Decl(contextualOuterTypeParameters.ts, 9, 5)) +>T : Symbol(T, Decl(contextualOuterTypeParameters.ts, 9, 12)) +>x : Symbol(x, Decl(contextualOuterTypeParameters.ts, 9, 15)) +>T : Symbol(T, Decl(contextualOuterTypeParameters.ts, 9, 12)) +>t : Symbol(t, Decl(contextualOuterTypeParameters.ts, 9, 30)) + + type isArray = (typeof t)[] extends string[] ? true : false; +>isArray : Symbol(isArray, Decl(contextualOuterTypeParameters.ts, 9, 37)) +>t : Symbol(t, Decl(contextualOuterTypeParameters.ts, 9, 30)) + + type IsObject = { x: typeof t } extends { x: string } ? true : false; +>IsObject : Symbol(IsObject, Decl(contextualOuterTypeParameters.ts, 10, 64)) +>x : Symbol(x, Decl(contextualOuterTypeParameters.ts, 11, 21)) +>t : Symbol(t, Decl(contextualOuterTypeParameters.ts, 9, 30)) +>x : Symbol(x, Decl(contextualOuterTypeParameters.ts, 11, 45)) + +}; + +const fn2: (x: T) => void = function test(t) { +>fn2 : Symbol(fn2, Decl(contextualOuterTypeParameters.ts, 14, 5)) +>T : Symbol(T, Decl(contextualOuterTypeParameters.ts, 14, 12)) +>x : Symbol(x, Decl(contextualOuterTypeParameters.ts, 14, 15)) +>T : Symbol(T, Decl(contextualOuterTypeParameters.ts, 14, 12)) +>test : Symbol(test, Decl(contextualOuterTypeParameters.ts, 14, 30)) +>t : Symbol(t, Decl(contextualOuterTypeParameters.ts, 14, 45)) + + type isArray = (typeof t)[] extends string[] ? true : false; +>isArray : Symbol(isArray, Decl(contextualOuterTypeParameters.ts, 14, 49)) +>t : Symbol(t, Decl(contextualOuterTypeParameters.ts, 14, 45)) + + type IsObject = { x: typeof t } extends { x: string } ? true : false; +>IsObject : Symbol(IsObject, Decl(contextualOuterTypeParameters.ts, 15, 64)) +>x : Symbol(x, Decl(contextualOuterTypeParameters.ts, 16, 21)) +>t : Symbol(t, Decl(contextualOuterTypeParameters.ts, 14, 45)) +>x : Symbol(x, Decl(contextualOuterTypeParameters.ts, 16, 45)) + +}; + +const obj: { f: (x: T) => void } = { +>obj : Symbol(obj, Decl(contextualOuterTypeParameters.ts, 19, 5)) +>f : Symbol(f, Decl(contextualOuterTypeParameters.ts, 19, 12)) +>T : Symbol(T, Decl(contextualOuterTypeParameters.ts, 19, 17)) +>x : Symbol(x, Decl(contextualOuterTypeParameters.ts, 19, 20)) +>T : Symbol(T, Decl(contextualOuterTypeParameters.ts, 19, 17)) + + f(t) { +>f : Symbol(f, Decl(contextualOuterTypeParameters.ts, 19, 39)) +>t : Symbol(t, Decl(contextualOuterTypeParameters.ts, 20, 6)) + + type isArray = (typeof t)[] extends string[] ? true : false; +>isArray : Symbol(isArray, Decl(contextualOuterTypeParameters.ts, 20, 10)) +>t : Symbol(t, Decl(contextualOuterTypeParameters.ts, 20, 6)) + + type IsObject = { x: typeof t } extends { x: string } ? true : false; +>IsObject : Symbol(IsObject, Decl(contextualOuterTypeParameters.ts, 21, 68)) +>x : Symbol(x, Decl(contextualOuterTypeParameters.ts, 22, 25)) +>t : Symbol(t, Decl(contextualOuterTypeParameters.ts, 20, 6)) +>x : Symbol(x, Decl(contextualOuterTypeParameters.ts, 22, 49)) + } +}; + +f(function self(t) { +>f : Symbol(f, Decl(contextualOuterTypeParameters.ts, 0, 0)) +>self : Symbol(self, Decl(contextualOuterTypeParameters.ts, 26, 2)) +>t : Symbol(t, Decl(contextualOuterTypeParameters.ts, 26, 16)) + + const s = self; +>s : Symbol(s, Decl(contextualOuterTypeParameters.ts, 27, 9)) +>self : Symbol(self, Decl(contextualOuterTypeParameters.ts, 26, 2)) + + type P = Parameters; +>P : Symbol(P, Decl(contextualOuterTypeParameters.ts, 27, 19)) +>Parameters : Symbol(Parameters, Decl(lib.es5.d.ts, --, --)) +>s : Symbol(s, Decl(contextualOuterTypeParameters.ts, 27, 9)) + +}); + diff --git a/tsc/testdata/baselines/reference/compiler/contextualOuterTypeParameters(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/contextualOuterTypeParameters(checkorder=typesfirst).types new file mode 100644 index 0000000000000..8ce78e0dad408 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/contextualOuterTypeParameters(checkorder=typesfirst).types @@ -0,0 +1,120 @@ +//// [tests/cases/compiler/contextualOuterTypeParameters.ts] //// + +=== contextualOuterTypeParameters.ts === +// https://github.com/microsoft/TypeScript/issues/59450 + +declare function f(fun: (t: T) => void): void +>f : (fun: (t: T) => void) => void +>fun : (t: T) => void +>t : T + +f(t => { +>f(t => { type isArray = (typeof t)[] extends string[] ? true : false; type IsObject = { x: typeof t } extends { x: string } ? true : false;}) : void +>f : (fun: (t: T) => void) => void +>t => { type isArray = (typeof t)[] extends string[] ? true : false; type IsObject = { x: typeof t } extends { x: string } ? true : false;} : (t: T) => void +>t : T + + type isArray = (typeof t)[] extends string[] ? true : false; +>isArray : T[] extends string[] ? true : false +>t : T +>true : true +>false : false + + type IsObject = { x: typeof t } extends { x: string } ? true : false; +>IsObject : { x: typeof t; } extends { x: string; } ? true : false +>x : T +>t : T +>x : string +>true : true +>false : false + +}); + +const fn1: (x: T) => void = t => { +>fn1 : (x: T) => void +>x : T +>t => { type isArray = (typeof t)[] extends string[] ? true : false; type IsObject = { x: typeof t } extends { x: string } ? true : false;} : (t: T) => void +>t : T + + type isArray = (typeof t)[] extends string[] ? true : false; +>isArray : false +>t : T +>true : true +>false : false + + type IsObject = { x: typeof t } extends { x: string } ? true : false; +>IsObject : false +>x : T +>t : T +>x : string +>true : true +>false : false + +}; + +const fn2: (x: T) => void = function test(t) { +>fn2 : (x: T) => void +>x : T +>function test(t) { type isArray = (typeof t)[] extends string[] ? true : false; type IsObject = { x: typeof t } extends { x: string } ? true : false;} : (t: T) => void +>test : (t: T) => void +>t : T + + type isArray = (typeof t)[] extends string[] ? true : false; +>isArray : false +>t : T +>true : true +>false : false + + type IsObject = { x: typeof t } extends { x: string } ? true : false; +>IsObject : false +>x : T +>t : T +>x : string +>true : true +>false : false + +}; + +const obj: { f: (x: T) => void } = { +>obj : { f: (x: T) => void; } +>f : (x: T) => void +>x : T +>{ f(t) { type isArray = (typeof t)[] extends string[] ? true : false; type IsObject = { x: typeof t } extends { x: string } ? true : false; }} : { f(t: T): void; } + + f(t) { +>f : (t: T) => void +>t : T + + type isArray = (typeof t)[] extends string[] ? true : false; +>isArray : false +>t : T +>true : true +>false : false + + type IsObject = { x: typeof t } extends { x: string } ? true : false; +>IsObject : false +>x : T +>t : T +>x : string +>true : true +>false : false + } +}; + +f(function self(t) { +>f(function self(t) { const s = self; type P = Parameters;}) : void +>f : (fun: (t: T) => void) => void +>function self(t) { const s = self; type P = Parameters;} : (t: T) => void +>self : (t: T) => void +>t : T + + const s = self; +>s : (t: T) => void +>self : (t: T) => void + + type P = Parameters; +>P : [t: T] +>s : (t: T) => void + +}); + diff --git a/tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback.js b/tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=default).js similarity index 100% rename from tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback.js rename to tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=default).js diff --git a/tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback.symbols b/tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=default).symbols similarity index 100% rename from tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback.symbols rename to tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=default).symbols diff --git a/tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback.types b/tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=default).types similarity index 100% rename from tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback.types rename to tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=default).types diff --git a/tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..0976f43f81f01 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=typesfirst).errors.txt @@ -0,0 +1,24 @@ +contextualReturnArrayPatternCallback.ts(13,19): error TS2322: Type 'unknown' is not assignable to type 'string'. + + +==== contextualReturnArrayPatternCallback.ts (1 errors) ==== + interface Matcher { + matcher(): { match(value: Input): boolean; value?: Value }; + } + type Pattern = Input | Matcher | { [Key in keyof Input]?: Pattern }; + type ArrayElement = Input extends readonly (infer Value)[] ? Value : unknown; + declare function array>>(value: Value): Matcher; + declare function when unknown>(callback: Callback): Matcher; + declare function accept>(value: Value): void; + + accept({ + list: array({ + prop: when(value => { + const text: string = value; + ~~~~ +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. + return true; + }), + }), + }); + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=typesfirst).js b/tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=typesfirst).js new file mode 100644 index 0000000000000..6772baec879f7 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=typesfirst).js @@ -0,0 +1,32 @@ +//// [tests/cases/compiler/contextualReturnArrayPatternCallback.ts] //// + +//// [contextualReturnArrayPatternCallback.ts] +interface Matcher { + matcher(): { match(value: Input): boolean; value?: Value }; +} +type Pattern = Input | Matcher | { [Key in keyof Input]?: Pattern }; +type ArrayElement = Input extends readonly (infer Value)[] ? Value : unknown; +declare function array>>(value: Value): Matcher; +declare function when unknown>(callback: Callback): Matcher; +declare function accept>(value: Value): void; + +accept({ + list: array({ + prop: when(value => { + const text: string = value; + return true; + }), + }), +}); + + +//// [contextualReturnArrayPatternCallback.js] +"use strict"; +accept({ + list: array({ + prop: when(value => { + const text = value; + return true; + }), + }), +}); diff --git a/tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..2e6faa18727fd --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=typesfirst).symbols @@ -0,0 +1,89 @@ +//// [tests/cases/compiler/contextualReturnArrayPatternCallback.ts] //// + +=== contextualReturnArrayPatternCallback.ts === +interface Matcher { +>Matcher : Symbol(Matcher, Decl(contextualReturnArrayPatternCallback.ts, 0, 0)) +>Input : Symbol(Input, Decl(contextualReturnArrayPatternCallback.ts, 0, 18)) +>Value : Symbol(Value, Decl(contextualReturnArrayPatternCallback.ts, 0, 24)) + + matcher(): { match(value: Input): boolean; value?: Value }; +>matcher : Symbol(Matcher.matcher, Decl(contextualReturnArrayPatternCallback.ts, 0, 43)) +>match : Symbol(match, Decl(contextualReturnArrayPatternCallback.ts, 1, 16)) +>value : Symbol(value, Decl(contextualReturnArrayPatternCallback.ts, 1, 23)) +>Input : Symbol(Input, Decl(contextualReturnArrayPatternCallback.ts, 0, 18)) +>value : Symbol(value, Decl(contextualReturnArrayPatternCallback.ts, 1, 46)) +>Value : Symbol(Value, Decl(contextualReturnArrayPatternCallback.ts, 0, 24)) +} +type Pattern = Input | Matcher | { [Key in keyof Input]?: Pattern }; +>Pattern : Symbol(Pattern, Decl(contextualReturnArrayPatternCallback.ts, 2, 1)) +>Input : Symbol(Input, Decl(contextualReturnArrayPatternCallback.ts, 3, 13)) +>Input : Symbol(Input, Decl(contextualReturnArrayPatternCallback.ts, 3, 13)) +>Matcher : Symbol(Matcher, Decl(contextualReturnArrayPatternCallback.ts, 0, 0)) +>Input : Symbol(Input, Decl(contextualReturnArrayPatternCallback.ts, 3, 13)) +>Key : Symbol(Key, Decl(contextualReturnArrayPatternCallback.ts, 3, 50)) +>Input : Symbol(Input, Decl(contextualReturnArrayPatternCallback.ts, 3, 13)) +>Pattern : Symbol(Pattern, Decl(contextualReturnArrayPatternCallback.ts, 2, 1)) +>Input : Symbol(Input, Decl(contextualReturnArrayPatternCallback.ts, 3, 13)) +>Key : Symbol(Key, Decl(contextualReturnArrayPatternCallback.ts, 3, 50)) + +type ArrayElement = Input extends readonly (infer Value)[] ? Value : unknown; +>ArrayElement : Symbol(ArrayElement, Decl(contextualReturnArrayPatternCallback.ts, 3, 94)) +>Input : Symbol(Input, Decl(contextualReturnArrayPatternCallback.ts, 4, 18)) +>Input : Symbol(Input, Decl(contextualReturnArrayPatternCallback.ts, 4, 18)) +>Value : Symbol(Value, Decl(contextualReturnArrayPatternCallback.ts, 4, 56)) +>Value : Symbol(Value, Decl(contextualReturnArrayPatternCallback.ts, 4, 56)) + +declare function array>>(value: Value): Matcher; +>array : Symbol(array, Decl(contextualReturnArrayPatternCallback.ts, 4, 84)) +>Input : Symbol(Input, Decl(contextualReturnArrayPatternCallback.ts, 5, 23)) +>Value : Symbol(Value, Decl(contextualReturnArrayPatternCallback.ts, 5, 29)) +>Pattern : Symbol(Pattern, Decl(contextualReturnArrayPatternCallback.ts, 2, 1)) +>ArrayElement : Symbol(ArrayElement, Decl(contextualReturnArrayPatternCallback.ts, 3, 94)) +>Input : Symbol(Input, Decl(contextualReturnArrayPatternCallback.ts, 5, 23)) +>value : Symbol(value, Decl(contextualReturnArrayPatternCallback.ts, 5, 74)) +>Value : Symbol(Value, Decl(contextualReturnArrayPatternCallback.ts, 5, 29)) +>Matcher : Symbol(Matcher, Decl(contextualReturnArrayPatternCallback.ts, 0, 0)) +>Input : Symbol(Input, Decl(contextualReturnArrayPatternCallback.ts, 5, 23)) +>Value : Symbol(Value, Decl(contextualReturnArrayPatternCallback.ts, 5, 29)) + +declare function when unknown>(callback: Callback): Matcher; +>when : Symbol(when, Decl(contextualReturnArrayPatternCallback.ts, 5, 111)) +>Input : Symbol(Input, Decl(contextualReturnArrayPatternCallback.ts, 6, 22)) +>Callback : Symbol(Callback, Decl(contextualReturnArrayPatternCallback.ts, 6, 28)) +>value : Symbol(value, Decl(contextualReturnArrayPatternCallback.ts, 6, 47)) +>Input : Symbol(Input, Decl(contextualReturnArrayPatternCallback.ts, 6, 22)) +>callback : Symbol(callback, Decl(contextualReturnArrayPatternCallback.ts, 6, 73)) +>Callback : Symbol(Callback, Decl(contextualReturnArrayPatternCallback.ts, 6, 28)) +>Matcher : Symbol(Matcher, Decl(contextualReturnArrayPatternCallback.ts, 0, 0)) +>Input : Symbol(Input, Decl(contextualReturnArrayPatternCallback.ts, 6, 22)) + +declare function accept>(value: Value): void; +>accept : Symbol(accept, Decl(contextualReturnArrayPatternCallback.ts, 6, 109)) +>Value : Symbol(Value, Decl(contextualReturnArrayPatternCallback.ts, 7, 24)) +>Pattern : Symbol(Pattern, Decl(contextualReturnArrayPatternCallback.ts, 2, 1)) +>list : Symbol(list, Decl(contextualReturnArrayPatternCallback.ts, 7, 47)) +>prop : Symbol(prop, Decl(contextualReturnArrayPatternCallback.ts, 7, 55)) +>value : Symbol(value, Decl(contextualReturnArrayPatternCallback.ts, 7, 77)) +>Value : Symbol(Value, Decl(contextualReturnArrayPatternCallback.ts, 7, 24)) + +accept({ +>accept : Symbol(accept, Decl(contextualReturnArrayPatternCallback.ts, 6, 109)) + + list: array({ +>list : Symbol(list, Decl(contextualReturnArrayPatternCallback.ts, 9, 8)) +>array : Symbol(array, Decl(contextualReturnArrayPatternCallback.ts, 4, 84)) + + prop: when(value => { +>prop : Symbol(prop, Decl(contextualReturnArrayPatternCallback.ts, 10, 17)) +>when : Symbol(when, Decl(contextualReturnArrayPatternCallback.ts, 5, 111)) +>value : Symbol(value, Decl(contextualReturnArrayPatternCallback.ts, 11, 19)) + + const text: string = value; +>text : Symbol(text, Decl(contextualReturnArrayPatternCallback.ts, 12, 17)) +>value : Symbol(value, Decl(contextualReturnArrayPatternCallback.ts, 11, 19)) + + return true; + }), + }), +}); + diff --git a/tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=typesfirst).types new file mode 100644 index 0000000000000..68eb717e1e135 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=typesfirst).types @@ -0,0 +1,60 @@ +//// [tests/cases/compiler/contextualReturnArrayPatternCallback.ts] //// + +=== contextualReturnArrayPatternCallback.ts === +interface Matcher { + matcher(): { match(value: Input): boolean; value?: Value }; +>matcher : () => { match(value: Input): boolean; value?: Value; } +>match : (value: Input) => boolean +>value : Input +>value : Value | undefined +} +type Pattern = Input | Matcher | { [Key in keyof Input]?: Pattern }; +>Pattern : Pattern + +type ArrayElement = Input extends readonly (infer Value)[] ? Value : unknown; +>ArrayElement : ArrayElement + +declare function array>>(value: Value): Matcher; +>array : >>(value: Value) => Matcher +>value : Value + +declare function when unknown>(callback: Callback): Matcher; +>when : unknown>(callback: Callback) => Matcher +>value : Input +>callback : Callback + +declare function accept>(value: Value): void; +>accept : >(value: Value) => void +>list : { prop: string; }[] +>prop : string +>value : Value + +accept({ +>accept({ list: array({ prop: when(value => { const text: string = value; return true; }), }),}) : void +>accept : >(value: Value) => void +>{ list: array({ prop: when(value => { const text: string = value; return true; }), }),} : { list: Matcher<{ prop: string; }[], { prop: Matcher; }>; } + + list: array({ +>list : Matcher<{ prop: string; }[], { prop: Matcher; }> +>array({ prop: when(value => { const text: string = value; return true; }), }) : Matcher<{ prop: string; }[], { prop: Matcher; }> +>array : >>(value: Value) => Matcher +>{ prop: when(value => { const text: string = value; return true; }), } : { prop: Matcher; } + + prop: when(value => { +>prop : Matcher +>when(value => { const text: string = value; return true; }) : Matcher +>when : unknown>(callback: Callback) => Matcher +>value => { const text: string = value; return true; } : (value: unknown) => boolean +>value : unknown + + const text: string = value; +>text : string +>value : unknown + + return true; +>true : true + + }), + }), +}); + diff --git a/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(strict=false).errors.txt b/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=default,strict=false).errors.txt similarity index 100% rename from tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(strict=false).errors.txt rename to tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=default,strict=false).errors.txt diff --git a/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(strict=false).js b/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=default,strict=false).js similarity index 100% rename from tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(strict=false).js rename to tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=default,strict=false).js diff --git a/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(strict=false).symbols b/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=default,strict=false).symbols similarity index 100% rename from tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(strict=false).symbols rename to tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=default,strict=false).symbols diff --git a/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(strict=false).types b/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=default,strict=false).types similarity index 100% rename from tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(strict=false).types rename to tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=default,strict=false).types diff --git a/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(strict=true).errors.txt b/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=default,strict=true).errors.txt similarity index 100% rename from tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(strict=true).errors.txt rename to tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=default,strict=true).errors.txt diff --git a/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(strict=true).js b/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=default,strict=true).js similarity index 100% rename from tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(strict=true).js rename to tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=default,strict=true).js diff --git a/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(strict=true).symbols b/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=default,strict=true).symbols similarity index 100% rename from tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(strict=true).symbols rename to tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=default,strict=true).symbols diff --git a/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(strict=true).types b/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=default,strict=true).types similarity index 100% rename from tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(strict=true).types rename to tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=default,strict=true).types diff --git a/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=false).errors.txt b/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=false).errors.txt new file mode 100644 index 0000000000000..a1514a254b857 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=false).errors.txt @@ -0,0 +1,47 @@ +deleteExpressionMustBeOptional.ts(34,10): error TS2339: Property 'j' does not exist on type 'Foo'. + + +==== deleteExpressionMustBeOptional.ts (1 errors) ==== + interface Foo { + a: number + b: number | undefined + c: number | null + d?: number + e: number | undefined | null + f?: number | undefined | null + g: unknown + h: any + i: never + } + + interface AA { + [s: string]: number + } + + type BB = { + [P in keyof any]: number + } + + declare const f: Foo + declare const a: AA + declare const b: BB + + delete f.a + delete f.b + delete f.c + delete f.d + delete f.e + delete f.f + delete f.g + delete f.h + delete f.i + delete f.j + ~ +!!! error TS2339: Property 'j' does not exist on type 'Foo'. + + delete a.a + delete a.b + + delete b.a + delete b.b + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=false).js b/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=false).js new file mode 100644 index 0000000000000..262eac63738f9 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=false).js @@ -0,0 +1,61 @@ +//// [tests/cases/compiler/deleteExpressionMustBeOptional.ts] //// + +//// [deleteExpressionMustBeOptional.ts] +interface Foo { + a: number + b: number | undefined + c: number | null + d?: number + e: number | undefined | null + f?: number | undefined | null + g: unknown + h: any + i: never +} + +interface AA { + [s: string]: number +} + +type BB = { + [P in keyof any]: number +} + +declare const f: Foo +declare const a: AA +declare const b: BB + +delete f.a +delete f.b +delete f.c +delete f.d +delete f.e +delete f.f +delete f.g +delete f.h +delete f.i +delete f.j + +delete a.a +delete a.b + +delete b.a +delete b.b + + +//// [deleteExpressionMustBeOptional.js] +"use strict"; +delete f.a; +delete f.b; +delete f.c; +delete f.d; +delete f.e; +delete f.f; +delete f.g; +delete f.h; +delete f.i; +delete f.j; +delete a.a; +delete a.b; +delete b.a; +delete b.b; diff --git a/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=false).symbols b/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=false).symbols new file mode 100644 index 0000000000000..9182dec2bc43d --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=false).symbols @@ -0,0 +1,124 @@ +//// [tests/cases/compiler/deleteExpressionMustBeOptional.ts] //// + +=== deleteExpressionMustBeOptional.ts === +interface Foo { +>Foo : Symbol(Foo, Decl(deleteExpressionMustBeOptional.ts, 0, 0)) + + a: number +>a : Symbol(Foo.a, Decl(deleteExpressionMustBeOptional.ts, 0, 15)) + + b: number | undefined +>b : Symbol(Foo.b, Decl(deleteExpressionMustBeOptional.ts, 1, 13)) + + c: number | null +>c : Symbol(Foo.c, Decl(deleteExpressionMustBeOptional.ts, 2, 25)) + + d?: number +>d : Symbol(Foo.d, Decl(deleteExpressionMustBeOptional.ts, 3, 20)) + + e: number | undefined | null +>e : Symbol(Foo.e, Decl(deleteExpressionMustBeOptional.ts, 4, 14)) + + f?: number | undefined | null +>f : Symbol(Foo.f, Decl(deleteExpressionMustBeOptional.ts, 5, 32)) + + g: unknown +>g : Symbol(Foo.g, Decl(deleteExpressionMustBeOptional.ts, 6, 33)) + + h: any +>h : Symbol(Foo.h, Decl(deleteExpressionMustBeOptional.ts, 7, 14)) + + i: never +>i : Symbol(Foo.i, Decl(deleteExpressionMustBeOptional.ts, 8, 10)) +} + +interface AA { +>AA : Symbol(AA, Decl(deleteExpressionMustBeOptional.ts, 10, 1)) + + [s: string]: number +>s : Symbol(s, Decl(deleteExpressionMustBeOptional.ts, 13, 5)) +} + +type BB = { +>BB : Symbol(BB, Decl(deleteExpressionMustBeOptional.ts, 14, 1)) + + [P in keyof any]: number +>P : Symbol(P, Decl(deleteExpressionMustBeOptional.ts, 17, 5)) +} + +declare const f: Foo +>f : Symbol(f, Decl(deleteExpressionMustBeOptional.ts, 20, 13)) +>Foo : Symbol(Foo, Decl(deleteExpressionMustBeOptional.ts, 0, 0)) + +declare const a: AA +>a : Symbol(a, Decl(deleteExpressionMustBeOptional.ts, 21, 13)) +>AA : Symbol(AA, Decl(deleteExpressionMustBeOptional.ts, 10, 1)) + +declare const b: BB +>b : Symbol(b, Decl(deleteExpressionMustBeOptional.ts, 22, 13)) +>BB : Symbol(BB, Decl(deleteExpressionMustBeOptional.ts, 14, 1)) + +delete f.a +>f.a : Symbol(Foo.a, Decl(deleteExpressionMustBeOptional.ts, 0, 15)) +>f : Symbol(f, Decl(deleteExpressionMustBeOptional.ts, 20, 13)) +>a : Symbol(Foo.a, Decl(deleteExpressionMustBeOptional.ts, 0, 15)) + +delete f.b +>f.b : Symbol(Foo.b, Decl(deleteExpressionMustBeOptional.ts, 1, 13)) +>f : Symbol(f, Decl(deleteExpressionMustBeOptional.ts, 20, 13)) +>b : Symbol(Foo.b, Decl(deleteExpressionMustBeOptional.ts, 1, 13)) + +delete f.c +>f.c : Symbol(Foo.c, Decl(deleteExpressionMustBeOptional.ts, 2, 25)) +>f : Symbol(f, Decl(deleteExpressionMustBeOptional.ts, 20, 13)) +>c : Symbol(Foo.c, Decl(deleteExpressionMustBeOptional.ts, 2, 25)) + +delete f.d +>f.d : Symbol(Foo.d, Decl(deleteExpressionMustBeOptional.ts, 3, 20)) +>f : Symbol(f, Decl(deleteExpressionMustBeOptional.ts, 20, 13)) +>d : Symbol(Foo.d, Decl(deleteExpressionMustBeOptional.ts, 3, 20)) + +delete f.e +>f.e : Symbol(Foo.e, Decl(deleteExpressionMustBeOptional.ts, 4, 14)) +>f : Symbol(f, Decl(deleteExpressionMustBeOptional.ts, 20, 13)) +>e : Symbol(Foo.e, Decl(deleteExpressionMustBeOptional.ts, 4, 14)) + +delete f.f +>f.f : Symbol(Foo.f, Decl(deleteExpressionMustBeOptional.ts, 5, 32)) +>f : Symbol(f, Decl(deleteExpressionMustBeOptional.ts, 20, 13)) +>f : Symbol(Foo.f, Decl(deleteExpressionMustBeOptional.ts, 5, 32)) + +delete f.g +>f.g : Symbol(Foo.g, Decl(deleteExpressionMustBeOptional.ts, 6, 33)) +>f : Symbol(f, Decl(deleteExpressionMustBeOptional.ts, 20, 13)) +>g : Symbol(Foo.g, Decl(deleteExpressionMustBeOptional.ts, 6, 33)) + +delete f.h +>f.h : Symbol(Foo.h, Decl(deleteExpressionMustBeOptional.ts, 7, 14)) +>f : Symbol(f, Decl(deleteExpressionMustBeOptional.ts, 20, 13)) +>h : Symbol(Foo.h, Decl(deleteExpressionMustBeOptional.ts, 7, 14)) + +delete f.i +>f.i : Symbol(Foo.i, Decl(deleteExpressionMustBeOptional.ts, 8, 10)) +>f : Symbol(f, Decl(deleteExpressionMustBeOptional.ts, 20, 13)) +>i : Symbol(Foo.i, Decl(deleteExpressionMustBeOptional.ts, 8, 10)) + +delete f.j +>f : Symbol(f, Decl(deleteExpressionMustBeOptional.ts, 20, 13)) + +delete a.a +>a.a : Symbol(AA.__index, Decl(deleteExpressionMustBeOptional.ts, 12, 14)) +>a : Symbol(a, Decl(deleteExpressionMustBeOptional.ts, 21, 13)) +>a : Symbol(AA.__index, Decl(deleteExpressionMustBeOptional.ts, 12, 14)) + +delete a.b +>a.b : Symbol(AA.__index, Decl(deleteExpressionMustBeOptional.ts, 12, 14)) +>a : Symbol(a, Decl(deleteExpressionMustBeOptional.ts, 21, 13)) +>b : Symbol(AA.__index, Decl(deleteExpressionMustBeOptional.ts, 12, 14)) + +delete b.a +>b : Symbol(b, Decl(deleteExpressionMustBeOptional.ts, 22, 13)) + +delete b.b +>b : Symbol(b, Decl(deleteExpressionMustBeOptional.ts, 22, 13)) + diff --git a/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=false).types b/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=false).types new file mode 100644 index 0000000000000..3c0777475c7fc --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=false).types @@ -0,0 +1,136 @@ +//// [tests/cases/compiler/deleteExpressionMustBeOptional.ts] //// + +=== deleteExpressionMustBeOptional.ts === +interface Foo { + a: number +>a : number + + b: number | undefined +>b : number + + c: number | null +>c : number + + d?: number +>d : number + + e: number | undefined | null +>e : number + + f?: number | undefined | null +>f : number + + g: unknown +>g : unknown + + h: any +>h : any + + i: never +>i : never +} + +interface AA { + [s: string]: number +>s : string +} + +type BB = { +>BB : BB + + [P in keyof any]: number +} + +declare const f: Foo +>f : Foo + +declare const a: AA +>a : AA + +declare const b: BB +>b : BB + +delete f.a +>delete f.a : boolean +>f.a : number +>f : Foo +>a : number + +delete f.b +>delete f.b : boolean +>f.b : number +>f : Foo +>b : number + +delete f.c +>delete f.c : boolean +>f.c : number +>f : Foo +>c : number + +delete f.d +>delete f.d : boolean +>f.d : number +>f : Foo +>d : number + +delete f.e +>delete f.e : boolean +>f.e : number +>f : Foo +>e : number + +delete f.f +>delete f.f : boolean +>f.f : number +>f : Foo +>f : number + +delete f.g +>delete f.g : boolean +>f.g : unknown +>f : Foo +>g : unknown + +delete f.h +>delete f.h : boolean +>f.h : any +>f : Foo +>h : any + +delete f.i +>delete f.i : boolean +>f.i : never +>f : Foo +>i : never + +delete f.j +>delete f.j : boolean +>f.j : any +>f : Foo +>j : any + +delete a.a +>delete a.a : boolean +>a.a : number +>a : AA +>a : number + +delete a.b +>delete a.b : boolean +>a.b : number +>a : AA +>b : number + +delete b.a +>delete b.a : boolean +>b.a : number +>b : BB +>a : number + +delete b.b +>delete b.b : boolean +>b.b : number +>b : BB +>b : number + diff --git a/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=true).errors.txt b/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=true).errors.txt new file mode 100644 index 0000000000000..d3c1fd53cc93f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=true).errors.txt @@ -0,0 +1,59 @@ +deleteExpressionMustBeOptional.ts(25,8): error TS2790: The operand of a 'delete' operator must be optional. +deleteExpressionMustBeOptional.ts(27,8): error TS2790: The operand of a 'delete' operator must be optional. +deleteExpressionMustBeOptional.ts(34,10): error TS2339: Property 'j' does not exist on type 'Foo'. +deleteExpressionMustBeOptional.ts(36,8): error TS2790: The operand of a 'delete' operator must be optional. +deleteExpressionMustBeOptional.ts(37,8): error TS2790: The operand of a 'delete' operator must be optional. + + +==== deleteExpressionMustBeOptional.ts (5 errors) ==== + interface Foo { + a: number + b: number | undefined + c: number | null + d?: number + e: number | undefined | null + f?: number | undefined | null + g: unknown + h: any + i: never + } + + interface AA { + [s: string]: number + } + + type BB = { + [P in keyof any]: number + } + + declare const f: Foo + declare const a: AA + declare const b: BB + + delete f.a + ~~~ +!!! error TS2790: The operand of a 'delete' operator must be optional. + delete f.b + delete f.c + ~~~ +!!! error TS2790: The operand of a 'delete' operator must be optional. + delete f.d + delete f.e + delete f.f + delete f.g + delete f.h + delete f.i + delete f.j + ~ +!!! error TS2339: Property 'j' does not exist on type 'Foo'. + + delete a.a + ~~~ +!!! error TS2790: The operand of a 'delete' operator must be optional. + delete a.b + ~~~ +!!! error TS2790: The operand of a 'delete' operator must be optional. + + delete b.a + delete b.b + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=true).js b/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=true).js new file mode 100644 index 0000000000000..262eac63738f9 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=true).js @@ -0,0 +1,61 @@ +//// [tests/cases/compiler/deleteExpressionMustBeOptional.ts] //// + +//// [deleteExpressionMustBeOptional.ts] +interface Foo { + a: number + b: number | undefined + c: number | null + d?: number + e: number | undefined | null + f?: number | undefined | null + g: unknown + h: any + i: never +} + +interface AA { + [s: string]: number +} + +type BB = { + [P in keyof any]: number +} + +declare const f: Foo +declare const a: AA +declare const b: BB + +delete f.a +delete f.b +delete f.c +delete f.d +delete f.e +delete f.f +delete f.g +delete f.h +delete f.i +delete f.j + +delete a.a +delete a.b + +delete b.a +delete b.b + + +//// [deleteExpressionMustBeOptional.js] +"use strict"; +delete f.a; +delete f.b; +delete f.c; +delete f.d; +delete f.e; +delete f.f; +delete f.g; +delete f.h; +delete f.i; +delete f.j; +delete a.a; +delete a.b; +delete b.a; +delete b.b; diff --git a/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=true).symbols b/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=true).symbols new file mode 100644 index 0000000000000..9182dec2bc43d --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=true).symbols @@ -0,0 +1,124 @@ +//// [tests/cases/compiler/deleteExpressionMustBeOptional.ts] //// + +=== deleteExpressionMustBeOptional.ts === +interface Foo { +>Foo : Symbol(Foo, Decl(deleteExpressionMustBeOptional.ts, 0, 0)) + + a: number +>a : Symbol(Foo.a, Decl(deleteExpressionMustBeOptional.ts, 0, 15)) + + b: number | undefined +>b : Symbol(Foo.b, Decl(deleteExpressionMustBeOptional.ts, 1, 13)) + + c: number | null +>c : Symbol(Foo.c, Decl(deleteExpressionMustBeOptional.ts, 2, 25)) + + d?: number +>d : Symbol(Foo.d, Decl(deleteExpressionMustBeOptional.ts, 3, 20)) + + e: number | undefined | null +>e : Symbol(Foo.e, Decl(deleteExpressionMustBeOptional.ts, 4, 14)) + + f?: number | undefined | null +>f : Symbol(Foo.f, Decl(deleteExpressionMustBeOptional.ts, 5, 32)) + + g: unknown +>g : Symbol(Foo.g, Decl(deleteExpressionMustBeOptional.ts, 6, 33)) + + h: any +>h : Symbol(Foo.h, Decl(deleteExpressionMustBeOptional.ts, 7, 14)) + + i: never +>i : Symbol(Foo.i, Decl(deleteExpressionMustBeOptional.ts, 8, 10)) +} + +interface AA { +>AA : Symbol(AA, Decl(deleteExpressionMustBeOptional.ts, 10, 1)) + + [s: string]: number +>s : Symbol(s, Decl(deleteExpressionMustBeOptional.ts, 13, 5)) +} + +type BB = { +>BB : Symbol(BB, Decl(deleteExpressionMustBeOptional.ts, 14, 1)) + + [P in keyof any]: number +>P : Symbol(P, Decl(deleteExpressionMustBeOptional.ts, 17, 5)) +} + +declare const f: Foo +>f : Symbol(f, Decl(deleteExpressionMustBeOptional.ts, 20, 13)) +>Foo : Symbol(Foo, Decl(deleteExpressionMustBeOptional.ts, 0, 0)) + +declare const a: AA +>a : Symbol(a, Decl(deleteExpressionMustBeOptional.ts, 21, 13)) +>AA : Symbol(AA, Decl(deleteExpressionMustBeOptional.ts, 10, 1)) + +declare const b: BB +>b : Symbol(b, Decl(deleteExpressionMustBeOptional.ts, 22, 13)) +>BB : Symbol(BB, Decl(deleteExpressionMustBeOptional.ts, 14, 1)) + +delete f.a +>f.a : Symbol(Foo.a, Decl(deleteExpressionMustBeOptional.ts, 0, 15)) +>f : Symbol(f, Decl(deleteExpressionMustBeOptional.ts, 20, 13)) +>a : Symbol(Foo.a, Decl(deleteExpressionMustBeOptional.ts, 0, 15)) + +delete f.b +>f.b : Symbol(Foo.b, Decl(deleteExpressionMustBeOptional.ts, 1, 13)) +>f : Symbol(f, Decl(deleteExpressionMustBeOptional.ts, 20, 13)) +>b : Symbol(Foo.b, Decl(deleteExpressionMustBeOptional.ts, 1, 13)) + +delete f.c +>f.c : Symbol(Foo.c, Decl(deleteExpressionMustBeOptional.ts, 2, 25)) +>f : Symbol(f, Decl(deleteExpressionMustBeOptional.ts, 20, 13)) +>c : Symbol(Foo.c, Decl(deleteExpressionMustBeOptional.ts, 2, 25)) + +delete f.d +>f.d : Symbol(Foo.d, Decl(deleteExpressionMustBeOptional.ts, 3, 20)) +>f : Symbol(f, Decl(deleteExpressionMustBeOptional.ts, 20, 13)) +>d : Symbol(Foo.d, Decl(deleteExpressionMustBeOptional.ts, 3, 20)) + +delete f.e +>f.e : Symbol(Foo.e, Decl(deleteExpressionMustBeOptional.ts, 4, 14)) +>f : Symbol(f, Decl(deleteExpressionMustBeOptional.ts, 20, 13)) +>e : Symbol(Foo.e, Decl(deleteExpressionMustBeOptional.ts, 4, 14)) + +delete f.f +>f.f : Symbol(Foo.f, Decl(deleteExpressionMustBeOptional.ts, 5, 32)) +>f : Symbol(f, Decl(deleteExpressionMustBeOptional.ts, 20, 13)) +>f : Symbol(Foo.f, Decl(deleteExpressionMustBeOptional.ts, 5, 32)) + +delete f.g +>f.g : Symbol(Foo.g, Decl(deleteExpressionMustBeOptional.ts, 6, 33)) +>f : Symbol(f, Decl(deleteExpressionMustBeOptional.ts, 20, 13)) +>g : Symbol(Foo.g, Decl(deleteExpressionMustBeOptional.ts, 6, 33)) + +delete f.h +>f.h : Symbol(Foo.h, Decl(deleteExpressionMustBeOptional.ts, 7, 14)) +>f : Symbol(f, Decl(deleteExpressionMustBeOptional.ts, 20, 13)) +>h : Symbol(Foo.h, Decl(deleteExpressionMustBeOptional.ts, 7, 14)) + +delete f.i +>f.i : Symbol(Foo.i, Decl(deleteExpressionMustBeOptional.ts, 8, 10)) +>f : Symbol(f, Decl(deleteExpressionMustBeOptional.ts, 20, 13)) +>i : Symbol(Foo.i, Decl(deleteExpressionMustBeOptional.ts, 8, 10)) + +delete f.j +>f : Symbol(f, Decl(deleteExpressionMustBeOptional.ts, 20, 13)) + +delete a.a +>a.a : Symbol(AA.__index, Decl(deleteExpressionMustBeOptional.ts, 12, 14)) +>a : Symbol(a, Decl(deleteExpressionMustBeOptional.ts, 21, 13)) +>a : Symbol(AA.__index, Decl(deleteExpressionMustBeOptional.ts, 12, 14)) + +delete a.b +>a.b : Symbol(AA.__index, Decl(deleteExpressionMustBeOptional.ts, 12, 14)) +>a : Symbol(a, Decl(deleteExpressionMustBeOptional.ts, 21, 13)) +>b : Symbol(AA.__index, Decl(deleteExpressionMustBeOptional.ts, 12, 14)) + +delete b.a +>b : Symbol(b, Decl(deleteExpressionMustBeOptional.ts, 22, 13)) + +delete b.b +>b : Symbol(b, Decl(deleteExpressionMustBeOptional.ts, 22, 13)) + diff --git a/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=true).types b/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=true).types new file mode 100644 index 0000000000000..9a17de9e03b2e --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=true).types @@ -0,0 +1,136 @@ +//// [tests/cases/compiler/deleteExpressionMustBeOptional.ts] //// + +=== deleteExpressionMustBeOptional.ts === +interface Foo { + a: number +>a : number + + b: number | undefined +>b : number | undefined + + c: number | null +>c : number | null + + d?: number +>d : number | undefined + + e: number | undefined | null +>e : number | null | undefined + + f?: number | undefined | null +>f : number | null | undefined + + g: unknown +>g : unknown + + h: any +>h : any + + i: never +>i : never +} + +interface AA { + [s: string]: number +>s : string +} + +type BB = { +>BB : BB + + [P in keyof any]: number +} + +declare const f: Foo +>f : Foo + +declare const a: AA +>a : AA + +declare const b: BB +>b : BB + +delete f.a +>delete f.a : boolean +>f.a : number +>f : Foo +>a : number + +delete f.b +>delete f.b : boolean +>f.b : number | undefined +>f : Foo +>b : number | undefined + +delete f.c +>delete f.c : boolean +>f.c : number | null +>f : Foo +>c : number | null + +delete f.d +>delete f.d : boolean +>f.d : number | undefined +>f : Foo +>d : number | undefined + +delete f.e +>delete f.e : boolean +>f.e : number | null | undefined +>f : Foo +>e : number | null | undefined + +delete f.f +>delete f.f : boolean +>f.f : number | null | undefined +>f : Foo +>f : number | null | undefined + +delete f.g +>delete f.g : boolean +>f.g : unknown +>f : Foo +>g : unknown + +delete f.h +>delete f.h : boolean +>f.h : any +>f : Foo +>h : any + +delete f.i +>delete f.i : boolean +>f.i : never +>f : Foo +>i : never + +delete f.j +>delete f.j : boolean +>f.j : any +>f : Foo +>j : any + +delete a.a +>delete a.a : boolean +>a.a : number +>a : AA +>a : number + +delete a.b +>delete a.b : boolean +>a.b : number +>a : AA +>b : number + +delete b.a +>delete b.a : boolean +>b.a : number +>b : BB +>a : number + +delete b.b +>delete b.b : boolean +>b.b : number +>b : BB +>b : number + diff --git a/tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread.errors.txt b/tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread(checkorder=default).errors.txt similarity index 100% rename from tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread.errors.txt rename to tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread(checkorder=default).errors.txt diff --git a/tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread.js b/tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread(checkorder=default).js similarity index 100% rename from tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread.js rename to tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread(checkorder=default).js diff --git a/tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread.symbols b/tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread(checkorder=default).symbols similarity index 100% rename from tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread.symbols rename to tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread(checkorder=default).symbols diff --git a/tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread.types b/tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread(checkorder=default).types similarity index 100% rename from tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread.types rename to tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread(checkorder=default).types diff --git a/tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity.errors.txt b/tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=default).errors.txt similarity index 100% rename from tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity.errors.txt rename to tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=default).errors.txt diff --git a/tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity.js b/tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=default).js similarity index 100% rename from tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity.js rename to tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=default).js diff --git a/tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity.symbols b/tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=default).symbols similarity index 100% rename from tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity.symbols rename to tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=default).symbols diff --git a/tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity.types b/tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=default).types similarity index 100% rename from tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity.types rename to tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=default).types diff --git a/tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..a309088cfbee7 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=typesfirst).errors.txt @@ -0,0 +1,43 @@ +exhaustiveSwitchCheckCircularity.ts(14,26): error TS2345: Argument of type '"bbb"' is not assignable to parameter of type 'never'. + + +==== exhaustiveSwitchCheckCircularity.ts (1 errors) ==== + // Repro from #47539 + + declare function isNever(n: never): boolean; + + function f() { + let foo: "aaa" | "bbb" = "aaa"; + while (true) { + switch (foo) { + case "aaa": + } + if (foo === "aaa") { + foo = "bbb"; + } + else if (isNever(foo)) { // Error expected + ~~~ +!!! error TS2345: Argument of type '"bbb"' is not assignable to parameter of type 'never'. + break; + } + } + } + + // Repro from #51688 + + declare function functionB(key: string): string; + + function functionC(): void { + let unionVal: "A" | "B" = "A"; + while (true) { + let key: string; + switch (unionVal) { + case "A": { + key = "AA"; + break; + } + } + functionB(key); + } + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=typesfirst).js b/tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=typesfirst).js new file mode 100644 index 0000000000000..8357fd67e0c74 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=typesfirst).js @@ -0,0 +1,71 @@ +//// [tests/cases/compiler/exhaustiveSwitchCheckCircularity.ts] //// + +//// [exhaustiveSwitchCheckCircularity.ts] +// Repro from #47539 + +declare function isNever(n: never): boolean; + +function f() { + let foo: "aaa" | "bbb" = "aaa"; + while (true) { + switch (foo) { + case "aaa": + } + if (foo === "aaa") { + foo = "bbb"; + } + else if (isNever(foo)) { // Error expected + break; + } + } +} + +// Repro from #51688 + +declare function functionB(key: string): string; + +function functionC(): void { + let unionVal: "A" | "B" = "A"; + while (true) { + let key: string; + switch (unionVal) { + case "A": { + key = "AA"; + break; + } + } + functionB(key); + } +} + + +//// [exhaustiveSwitchCheckCircularity.js] +"use strict"; +// Repro from #47539 +function f() { + let foo = "aaa"; + while (true) { + switch (foo) { + case "aaa": + } + if (foo === "aaa") { + foo = "bbb"; + } + else if (isNever(foo)) { // Error expected + break; + } + } +} +function functionC() { + let unionVal = "A"; + while (true) { + let key; + switch (unionVal) { + case "A": { + key = "AA"; + break; + } + } + functionB(key); + } +} diff --git a/tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..61aad225f49ab --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=typesfirst).symbols @@ -0,0 +1,68 @@ +//// [tests/cases/compiler/exhaustiveSwitchCheckCircularity.ts] //// + +=== exhaustiveSwitchCheckCircularity.ts === +// Repro from #47539 + +declare function isNever(n: never): boolean; +>isNever : Symbol(isNever, Decl(exhaustiveSwitchCheckCircularity.ts, 0, 0)) +>n : Symbol(n, Decl(exhaustiveSwitchCheckCircularity.ts, 2, 25)) + +function f() { +>f : Symbol(f, Decl(exhaustiveSwitchCheckCircularity.ts, 2, 44)) + + let foo: "aaa" | "bbb" = "aaa"; +>foo : Symbol(foo, Decl(exhaustiveSwitchCheckCircularity.ts, 5, 7)) + + while (true) { + switch (foo) { +>foo : Symbol(foo, Decl(exhaustiveSwitchCheckCircularity.ts, 5, 7)) + + case "aaa": + } + if (foo === "aaa") { +>foo : Symbol(foo, Decl(exhaustiveSwitchCheckCircularity.ts, 5, 7)) + + foo = "bbb"; +>foo : Symbol(foo, Decl(exhaustiveSwitchCheckCircularity.ts, 5, 7)) + } + else if (isNever(foo)) { // Error expected +>isNever : Symbol(isNever, Decl(exhaustiveSwitchCheckCircularity.ts, 0, 0)) +>foo : Symbol(foo, Decl(exhaustiveSwitchCheckCircularity.ts, 5, 7)) + + break; + } + } +} + +// Repro from #51688 + +declare function functionB(key: string): string; +>functionB : Symbol(functionB, Decl(exhaustiveSwitchCheckCircularity.ts, 17, 1)) +>key : Symbol(key, Decl(exhaustiveSwitchCheckCircularity.ts, 21, 27)) + +function functionC(): void { +>functionC : Symbol(functionC, Decl(exhaustiveSwitchCheckCircularity.ts, 21, 48)) + + let unionVal: "A" | "B" = "A"; +>unionVal : Symbol(unionVal, Decl(exhaustiveSwitchCheckCircularity.ts, 24, 7)) + + while (true) { + let key: string; +>key : Symbol(key, Decl(exhaustiveSwitchCheckCircularity.ts, 26, 11)) + + switch (unionVal) { +>unionVal : Symbol(unionVal, Decl(exhaustiveSwitchCheckCircularity.ts, 24, 7)) + + case "A": { + key = "AA"; +>key : Symbol(key, Decl(exhaustiveSwitchCheckCircularity.ts, 26, 11)) + + break; + } + } + functionB(key); +>functionB : Symbol(functionB, Decl(exhaustiveSwitchCheckCircularity.ts, 17, 1)) +>key : Symbol(key, Decl(exhaustiveSwitchCheckCircularity.ts, 26, 11)) + } +} + diff --git a/tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=typesfirst).types new file mode 100644 index 0000000000000..651cd4a45a647 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=typesfirst).types @@ -0,0 +1,85 @@ +//// [tests/cases/compiler/exhaustiveSwitchCheckCircularity.ts] //// + +=== exhaustiveSwitchCheckCircularity.ts === +// Repro from #47539 + +declare function isNever(n: never): boolean; +>isNever : (n: never) => boolean +>n : never + +function f() { +>f : () => void + + let foo: "aaa" | "bbb" = "aaa"; +>foo : "aaa" | "bbb" +>"aaa" : "aaa" + + while (true) { +>true : true + + switch (foo) { +>foo : "aaa" | "bbb" + + case "aaa": +>"aaa" : "aaa" + } + if (foo === "aaa") { +>foo === "aaa" : boolean +>foo : "aaa" | "bbb" +>"aaa" : "aaa" + + foo = "bbb"; +>foo = "bbb" : "bbb" +>foo : "aaa" | "bbb" +>"bbb" : "bbb" + } + else if (isNever(foo)) { // Error expected +>isNever(foo) : boolean +>isNever : (n: never) => boolean +>foo : never + + break; + } + } +} + +// Repro from #51688 + +declare function functionB(key: string): string; +>functionB : (key: string) => string +>key : string + +function functionC(): void { +>functionC : () => void + + let unionVal: "A" | "B" = "A"; +>unionVal : "A" | "B" +>"A" : "A" + + while (true) { +>true : true + + let key: string; +>key : string + + switch (unionVal) { +>unionVal : "A" + + case "A": { +>"A" : "A" + + key = "AA"; +>key = "AA" : "AA" +>key : string +>"AA" : "AA" + + break; + } + } + functionB(key); +>functionB(key) : string +>functionB : (key: string) => string +>key : string + } +} + diff --git a/tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference.errors.txt b/tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=default).errors.txt similarity index 100% rename from tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference.errors.txt rename to tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=default).errors.txt diff --git a/tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference.js b/tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=default).js similarity index 100% rename from tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference.js rename to tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=default).js diff --git a/tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference.symbols b/tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=default).symbols similarity index 100% rename from tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference.symbols rename to tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=default).symbols diff --git a/tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference.types b/tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=default).types similarity index 100% rename from tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference.types rename to tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=default).types diff --git a/tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..9ccfe991abcd1 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=typesfirst).errors.txt @@ -0,0 +1,60 @@ +fallbackToBindingPatternForTypeInference.ts(2,7): error TS2345: Argument of type '({ a }: { a: any; }) => any' is not assignable to parameter of type '(x: unknown) => string'. + Types of parameters '__0' and 'x' are incompatible. + Type 'unknown' is not assignable to type '{ a: any; }'. +fallbackToBindingPatternForTypeInference.ts(2,9): error TS2339: Property 'a' does not exist on type 'unknown'. +fallbackToBindingPatternForTypeInference.ts(3,7): error TS2345: Argument of type '([b, c]: [any, any]) => string' is not assignable to parameter of type '(x: unknown) => string'. + Types of parameters '__0' and 'x' are incompatible. + Type 'unknown' is not assignable to type '[any, any]'. +fallbackToBindingPatternForTypeInference.ts(3,8): error TS2488: Type 'unknown' must have a '[Symbol.iterator]()' method that returns an iterator. +fallbackToBindingPatternForTypeInference.ts(4,7): error TS2345: Argument of type '({ d: [e, f] }: { d: [any, any]; }) => string' is not assignable to parameter of type '(x: unknown) => string'. + Types of parameters '__0' and 'x' are incompatible. + Type 'unknown' is not assignable to type '{ d: [any, any]; }'. +fallbackToBindingPatternForTypeInference.ts(4,9): error TS2339: Property 'd' does not exist on type 'unknown'. +fallbackToBindingPatternForTypeInference.ts(5,7): error TS2345: Argument of type '([{ g }, { h }]: [{ g: any; }, { h: any; }]) => string' is not assignable to parameter of type '(x: unknown) => string'. + Types of parameters '__0' and 'x' are incompatible. + Type 'unknown' is not assignable to type '[{ g: any; }, { h: any; }]'. +fallbackToBindingPatternForTypeInference.ts(5,8): error TS2488: Type 'unknown' must have a '[Symbol.iterator]()' method that returns an iterator. +fallbackToBindingPatternForTypeInference.ts(6,7): error TS2345: Argument of type '({ a, b }: { a: any; b?: number | undefined; }) => any' is not assignable to parameter of type '(x: unknown) => string'. + Types of parameters '__0' and 'x' are incompatible. + Type 'unknown' is not assignable to type '{ a: any; b?: number | undefined; }'. +fallbackToBindingPatternForTypeInference.ts(6,9): error TS2339: Property 'a' does not exist on type 'unknown'. + + +==== fallbackToBindingPatternForTypeInference.ts (10 errors) ==== + declare function trans(f: (x: T) => string): number; + trans(({a}) => a); + ~~~~~~~~~~ +!!! error TS2345: Argument of type '({ a }: { a: any; }) => any' is not assignable to parameter of type '(x: unknown) => string'. +!!! error TS2345: Types of parameters '__0' and 'x' are incompatible. +!!! error TS2345: Type 'unknown' is not assignable to type '{ a: any; }'. + ~ +!!! error TS2339: Property 'a' does not exist on type 'unknown'. + trans(([b,c]) => 'foo'); + ~~~~~~~~~~~~~~~~ +!!! error TS2345: Argument of type '([b, c]: [any, any]) => string' is not assignable to parameter of type '(x: unknown) => string'. +!!! error TS2345: Types of parameters '__0' and 'x' are incompatible. +!!! error TS2345: Type 'unknown' is not assignable to type '[any, any]'. + ~~~~~ +!!! error TS2488: Type 'unknown' must have a '[Symbol.iterator]()' method that returns an iterator. + trans(({d: [e,f]}) => 'foo'); + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2345: Argument of type '({ d: [e, f] }: { d: [any, any]; }) => string' is not assignable to parameter of type '(x: unknown) => string'. +!!! error TS2345: Types of parameters '__0' and 'x' are incompatible. +!!! error TS2345: Type 'unknown' is not assignable to type '{ d: [any, any]; }'. + ~ +!!! error TS2339: Property 'd' does not exist on type 'unknown'. + trans(([{g},{h}]) => 'foo'); + ~~~~~~~~~~~~~~~~~~~~ +!!! error TS2345: Argument of type '([{ g }, { h }]: [{ g: any; }, { h: any; }]) => string' is not assignable to parameter of type '(x: unknown) => string'. +!!! error TS2345: Types of parameters '__0' and 'x' are incompatible. +!!! error TS2345: Type 'unknown' is not assignable to type '[{ g: any; }, { h: any; }]'. + ~~~~~~~~~ +!!! error TS2488: Type 'unknown' must have a '[Symbol.iterator]()' method that returns an iterator. + trans(({a, b = 10}) => a); + ~~~~~~~~~~~~~~~~~~ +!!! error TS2345: Argument of type '({ a, b }: { a: any; b?: number | undefined; }) => any' is not assignable to parameter of type '(x: unknown) => string'. +!!! error TS2345: Types of parameters '__0' and 'x' are incompatible. +!!! error TS2345: Type 'unknown' is not assignable to type '{ a: any; b?: number | undefined; }'. + ~ +!!! error TS2339: Property 'a' does not exist on type 'unknown'. + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=typesfirst).js b/tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=typesfirst).js new file mode 100644 index 0000000000000..60378832d9d6a --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=typesfirst).js @@ -0,0 +1,18 @@ +//// [tests/cases/compiler/fallbackToBindingPatternForTypeInference.ts] //// + +//// [fallbackToBindingPatternForTypeInference.ts] +declare function trans(f: (x: T) => string): number; +trans(({a}) => a); +trans(([b,c]) => 'foo'); +trans(({d: [e,f]}) => 'foo'); +trans(([{g},{h}]) => 'foo'); +trans(({a, b = 10}) => a); + + +//// [fallbackToBindingPatternForTypeInference.js] +"use strict"; +trans(({ a }) => a); +trans(([b, c]) => 'foo'); +trans(({ d: [e, f] }) => 'foo'); +trans(([{ g }, { h }]) => 'foo'); +trans(({ a, b = 10 }) => a); diff --git a/tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..7e6456be8db3c --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=typesfirst).symbols @@ -0,0 +1,36 @@ +//// [tests/cases/compiler/fallbackToBindingPatternForTypeInference.ts] //// + +=== fallbackToBindingPatternForTypeInference.ts === +declare function trans(f: (x: T) => string): number; +>trans : Symbol(trans, Decl(fallbackToBindingPatternForTypeInference.ts, 0, 0)) +>T : Symbol(T, Decl(fallbackToBindingPatternForTypeInference.ts, 0, 23)) +>f : Symbol(f, Decl(fallbackToBindingPatternForTypeInference.ts, 0, 26)) +>x : Symbol(x, Decl(fallbackToBindingPatternForTypeInference.ts, 0, 30)) +>T : Symbol(T, Decl(fallbackToBindingPatternForTypeInference.ts, 0, 23)) + +trans(({a}) => a); +>trans : Symbol(trans, Decl(fallbackToBindingPatternForTypeInference.ts, 0, 0)) +>a : Symbol(a, Decl(fallbackToBindingPatternForTypeInference.ts, 1, 8)) +>a : Symbol(a, Decl(fallbackToBindingPatternForTypeInference.ts, 1, 8)) + +trans(([b,c]) => 'foo'); +>trans : Symbol(trans, Decl(fallbackToBindingPatternForTypeInference.ts, 0, 0)) +>b : Symbol(b, Decl(fallbackToBindingPatternForTypeInference.ts, 2, 8)) +>c : Symbol(c, Decl(fallbackToBindingPatternForTypeInference.ts, 2, 10)) + +trans(({d: [e,f]}) => 'foo'); +>trans : Symbol(trans, Decl(fallbackToBindingPatternForTypeInference.ts, 0, 0)) +>e : Symbol(e, Decl(fallbackToBindingPatternForTypeInference.ts, 3, 12)) +>f : Symbol(f, Decl(fallbackToBindingPatternForTypeInference.ts, 3, 14)) + +trans(([{g},{h}]) => 'foo'); +>trans : Symbol(trans, Decl(fallbackToBindingPatternForTypeInference.ts, 0, 0)) +>g : Symbol(g, Decl(fallbackToBindingPatternForTypeInference.ts, 4, 9)) +>h : Symbol(h, Decl(fallbackToBindingPatternForTypeInference.ts, 4, 13)) + +trans(({a, b = 10}) => a); +>trans : Symbol(trans, Decl(fallbackToBindingPatternForTypeInference.ts, 0, 0)) +>a : Symbol(a, Decl(fallbackToBindingPatternForTypeInference.ts, 5, 8)) +>b : Symbol(b, Decl(fallbackToBindingPatternForTypeInference.ts, 5, 10)) +>a : Symbol(a, Decl(fallbackToBindingPatternForTypeInference.ts, 5, 8)) + diff --git a/tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=typesfirst).types new file mode 100644 index 0000000000000..be3950ad98131 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=typesfirst).types @@ -0,0 +1,49 @@ +//// [tests/cases/compiler/fallbackToBindingPatternForTypeInference.ts] //// + +=== fallbackToBindingPatternForTypeInference.ts === +declare function trans(f: (x: T) => string): number; +>trans : (f: (x: T) => string) => number +>f : (x: T) => string +>x : T + +trans(({a}) => a); +>trans(({a}) => a) : number +>trans : (f: (x: T) => string) => number +>({a}) => a : ({ a }: { a: any; }) => any +>a : any +>a : any + +trans(([b,c]) => 'foo'); +>trans(([b,c]) => 'foo') : number +>trans : (f: (x: T) => string) => number +>([b,c]) => 'foo' : ([b, c]: [any, any]) => string +>b : any +>c : any +>'foo' : "foo" + +trans(({d: [e,f]}) => 'foo'); +>trans(({d: [e,f]}) => 'foo') : number +>trans : (f: (x: T) => string) => number +>({d: [e,f]}) => 'foo' : ({ d: [e, f] }: { d: [any, any]; }) => string +>d : any +>e : any +>f : any +>'foo' : "foo" + +trans(([{g},{h}]) => 'foo'); +>trans(([{g},{h}]) => 'foo') : number +>trans : (f: (x: T) => string) => number +>([{g},{h}]) => 'foo' : ([{ g }, { h }]: [{ g: any; }, { h: any; }]) => string +>g : any +>h : any +>'foo' : "foo" + +trans(({a, b = 10}) => a); +>trans(({a, b = 10}) => a) : number +>trans : (f: (x: T) => string) => number +>({a, b = 10}) => a : ({ a, b }: { a: any; b?: number | undefined; }) => any +>a : any +>b : number +>10 : 10 +>a : any + diff --git a/tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2.errors.txt b/tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=default).errors.txt similarity index 100% rename from tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2.errors.txt rename to tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=default).errors.txt diff --git a/tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2.js b/tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=default).js similarity index 100% rename from tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2.js rename to tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=default).js diff --git a/tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2.symbols b/tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=default).symbols similarity index 100% rename from tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2.symbols rename to tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=default).symbols diff --git a/tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2.types b/tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=default).types similarity index 100% rename from tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2.types rename to tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=default).types diff --git a/tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..491ad1a2935f6 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=typesfirst).errors.txt @@ -0,0 +1,33 @@ +error TS-1: Pre-emit (3) and post-emit (2) diagnostic counts do not match! This can indicate that a semantic _error_ was added by the emit resolver - such an error may not be reflected on the command line or in the editor, but may be captured in a baseline here! +fixingTypeParametersRepeatedly2.ts(11,32): error TS2741: Property 'toBase' is missing in type 'Base' but required in type 'Derived'. +fixingTypeParametersRepeatedly2.ts(17,5): error TS2403: Subsequent variable declarations must have the same type. Variable 'result' must be of type 'Derived', but here has type 'Base'. + + +!!! error TS-1: Pre-emit (3) and post-emit (2) diagnostic counts do not match! This can indicate that a semantic _error_ was added by the emit resolver - such an error may not be reflected on the command line or in the editor, but may be captured in a baseline here! +!!! related TS-1: The excess diagnostics are: +!!! related TS2339 fixingTypeParametersRepeatedly2.ts:17:34: Property 'toBase' does not exist on type 'Base'. +==== fixingTypeParametersRepeatedly2.ts (2 errors) ==== + interface Base { + baseProp; + } + interface Derived extends Base { + toBase(): Base; + } + + declare var derived: Derived; + + declare function foo(x: T, func: (p: T) => T): T; + var result = foo(derived, d => d.toBase()); + ~~~~~~~~~~ +!!! error TS2741: Property 'toBase' is missing in type 'Base' but required in type 'Derived'. +!!! related TS2728 fixingTypeParametersRepeatedly2.ts:5:5: 'toBase' is declared here. +!!! related TS6502 fixingTypeParametersRepeatedly2.ts:10:37: The expected type comes from the return type of this signature. + + // bar should type check just like foo. + // The same error should be observed in both cases. + declare function bar(x: T, func: (p: T) => T): T; + declare function bar(x: T, func: (p: T) => T): T; + var result = bar(derived, d => d.toBase()); + ~~~~~~ +!!! error TS2403: Subsequent variable declarations must have the same type. Variable 'result' must be of type 'Derived', but here has type 'Base'. +!!! related TS6203 fixingTypeParametersRepeatedly2.ts:11:5: 'result' was also declared here. \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=typesfirst).js b/tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=typesfirst).js new file mode 100644 index 0000000000000..f3ab2ec0b70b2 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=typesfirst).js @@ -0,0 +1,25 @@ +//// [tests/cases/compiler/fixingTypeParametersRepeatedly2.ts] //// + +//// [fixingTypeParametersRepeatedly2.ts] +interface Base { + baseProp; +} +interface Derived extends Base { + toBase(): Base; +} + +declare var derived: Derived; + +declare function foo(x: T, func: (p: T) => T): T; +var result = foo(derived, d => d.toBase()); + +// bar should type check just like foo. +// The same error should be observed in both cases. +declare function bar(x: T, func: (p: T) => T): T; +declare function bar(x: T, func: (p: T) => T): T; +var result = bar(derived, d => d.toBase()); + +//// [fixingTypeParametersRepeatedly2.js] +"use strict"; +var result = foo(derived, d => d.toBase()); +var result = bar(derived, d => d.toBase()); diff --git a/tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..7dc3504e7d3da --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=typesfirst).symbols @@ -0,0 +1,75 @@ +//// [tests/cases/compiler/fixingTypeParametersRepeatedly2.ts] //// + +=== fixingTypeParametersRepeatedly2.ts === +interface Base { +>Base : Symbol(Base, Decl(fixingTypeParametersRepeatedly2.ts, 0, 0)) + + baseProp; +>baseProp : Symbol(Base.baseProp, Decl(fixingTypeParametersRepeatedly2.ts, 0, 16)) +} +interface Derived extends Base { +>Derived : Symbol(Derived, Decl(fixingTypeParametersRepeatedly2.ts, 2, 1)) +>Base : Symbol(Base, Decl(fixingTypeParametersRepeatedly2.ts, 0, 0)) + + toBase(): Base; +>toBase : Symbol(Derived.toBase, Decl(fixingTypeParametersRepeatedly2.ts, 3, 32)) +>Base : Symbol(Base, Decl(fixingTypeParametersRepeatedly2.ts, 0, 0)) +} + +declare var derived: Derived; +>derived : Symbol(derived, Decl(fixingTypeParametersRepeatedly2.ts, 7, 11)) +>Derived : Symbol(Derived, Decl(fixingTypeParametersRepeatedly2.ts, 2, 1)) + +declare function foo(x: T, func: (p: T) => T): T; +>foo : Symbol(foo, Decl(fixingTypeParametersRepeatedly2.ts, 7, 29)) +>T : Symbol(T, Decl(fixingTypeParametersRepeatedly2.ts, 9, 21)) +>x : Symbol(x, Decl(fixingTypeParametersRepeatedly2.ts, 9, 24)) +>T : Symbol(T, Decl(fixingTypeParametersRepeatedly2.ts, 9, 21)) +>func : Symbol(func, Decl(fixingTypeParametersRepeatedly2.ts, 9, 29)) +>p : Symbol(p, Decl(fixingTypeParametersRepeatedly2.ts, 9, 37)) +>T : Symbol(T, Decl(fixingTypeParametersRepeatedly2.ts, 9, 21)) +>T : Symbol(T, Decl(fixingTypeParametersRepeatedly2.ts, 9, 21)) +>T : Symbol(T, Decl(fixingTypeParametersRepeatedly2.ts, 9, 21)) + +var result = foo(derived, d => d.toBase()); +>result : Symbol(result, Decl(fixingTypeParametersRepeatedly2.ts, 10, 3), Decl(fixingTypeParametersRepeatedly2.ts, 16, 3)) +>foo : Symbol(foo, Decl(fixingTypeParametersRepeatedly2.ts, 7, 29)) +>derived : Symbol(derived, Decl(fixingTypeParametersRepeatedly2.ts, 7, 11)) +>d : Symbol(d, Decl(fixingTypeParametersRepeatedly2.ts, 10, 25)) +>d.toBase : Symbol(Derived.toBase, Decl(fixingTypeParametersRepeatedly2.ts, 3, 32)) +>d : Symbol(d, Decl(fixingTypeParametersRepeatedly2.ts, 10, 25)) +>toBase : Symbol(Derived.toBase, Decl(fixingTypeParametersRepeatedly2.ts, 3, 32)) + +// bar should type check just like foo. +// The same error should be observed in both cases. +declare function bar(x: T, func: (p: T) => T): T; +>bar : Symbol(bar, Decl(fixingTypeParametersRepeatedly2.ts, 10, 43), Decl(fixingTypeParametersRepeatedly2.ts, 14, 52)) +>T : Symbol(T, Decl(fixingTypeParametersRepeatedly2.ts, 14, 21)) +>x : Symbol(x, Decl(fixingTypeParametersRepeatedly2.ts, 14, 24)) +>T : Symbol(T, Decl(fixingTypeParametersRepeatedly2.ts, 14, 21)) +>func : Symbol(func, Decl(fixingTypeParametersRepeatedly2.ts, 14, 29)) +>p : Symbol(p, Decl(fixingTypeParametersRepeatedly2.ts, 14, 37)) +>T : Symbol(T, Decl(fixingTypeParametersRepeatedly2.ts, 14, 21)) +>T : Symbol(T, Decl(fixingTypeParametersRepeatedly2.ts, 14, 21)) +>T : Symbol(T, Decl(fixingTypeParametersRepeatedly2.ts, 14, 21)) + +declare function bar(x: T, func: (p: T) => T): T; +>bar : Symbol(bar, Decl(fixingTypeParametersRepeatedly2.ts, 10, 43), Decl(fixingTypeParametersRepeatedly2.ts, 14, 52)) +>T : Symbol(T, Decl(fixingTypeParametersRepeatedly2.ts, 15, 21)) +>x : Symbol(x, Decl(fixingTypeParametersRepeatedly2.ts, 15, 24)) +>T : Symbol(T, Decl(fixingTypeParametersRepeatedly2.ts, 15, 21)) +>func : Symbol(func, Decl(fixingTypeParametersRepeatedly2.ts, 15, 29)) +>p : Symbol(p, Decl(fixingTypeParametersRepeatedly2.ts, 15, 37)) +>T : Symbol(T, Decl(fixingTypeParametersRepeatedly2.ts, 15, 21)) +>T : Symbol(T, Decl(fixingTypeParametersRepeatedly2.ts, 15, 21)) +>T : Symbol(T, Decl(fixingTypeParametersRepeatedly2.ts, 15, 21)) + +var result = bar(derived, d => d.toBase()); +>result : Symbol(result, Decl(fixingTypeParametersRepeatedly2.ts, 10, 3), Decl(fixingTypeParametersRepeatedly2.ts, 16, 3)) +>bar : Symbol(bar, Decl(fixingTypeParametersRepeatedly2.ts, 10, 43), Decl(fixingTypeParametersRepeatedly2.ts, 14, 52)) +>derived : Symbol(derived, Decl(fixingTypeParametersRepeatedly2.ts, 7, 11)) +>d : Symbol(d, Decl(fixingTypeParametersRepeatedly2.ts, 16, 25)) +>d.toBase : Symbol(Derived.toBase, Decl(fixingTypeParametersRepeatedly2.ts, 3, 32)) +>d : Symbol(d, Decl(fixingTypeParametersRepeatedly2.ts, 16, 25)) +>toBase : Symbol(Derived.toBase, Decl(fixingTypeParametersRepeatedly2.ts, 3, 32)) + diff --git a/tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=typesfirst).types new file mode 100644 index 0000000000000..0a8fca14e9475 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=typesfirst).types @@ -0,0 +1,59 @@ +//// [tests/cases/compiler/fixingTypeParametersRepeatedly2.ts] //// + +=== fixingTypeParametersRepeatedly2.ts === +interface Base { + baseProp; +>baseProp : any +} +interface Derived extends Base { + toBase(): Base; +>toBase : () => Base +} + +declare var derived: Derived; +>derived : Derived + +declare function foo(x: T, func: (p: T) => T): T; +>foo : (x: T, func: (p: T) => T) => T +>x : T +>func : (p: T) => T +>p : T + +var result = foo(derived, d => d.toBase()); +>result : Derived +>foo(derived, d => d.toBase()) : Derived +>foo : (x: T, func: (p: T) => T) => T +>derived : Derived +>d => d.toBase() : (d: Derived) => Base +>d : Derived +>d.toBase() : Base +>d.toBase : () => Base +>d : Derived +>toBase : () => Base + +// bar should type check just like foo. +// The same error should be observed in both cases. +declare function bar(x: T, func: (p: T) => T): T; +>bar : { (x: T, func: (p: T) => T): T; (x: T_1, func: (p: T_1) => T_1): T_1; } +>x : T +>func : (p: T) => T +>p : T + +declare function bar(x: T, func: (p: T) => T): T; +>bar : { (x: T_1, func: (p: T_1) => T_1): T_1; (x: T, func: (p: T) => T): T; } +>x : T +>func : (p: T) => T +>p : T + +var result = bar(derived, d => d.toBase()); +>result : Derived +>bar(derived, d => d.toBase()) : Base +>bar : { (x: T, func: (p: T) => T): T; (x: T, func: (p: T) => T): T; } +>derived : Derived +>d => d.toBase() : (d: Derived) => Base +>d : Derived +>d.toBase() : Base +>d.toBase : () => Base +>d : Derived +>toBase : () => Base + diff --git a/tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment.errors.txt b/tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=default).errors.txt similarity index 100% rename from tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment.errors.txt rename to tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=default).errors.txt diff --git a/tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment.js b/tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=default).js similarity index 100% rename from tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment.js rename to tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=default).js diff --git a/tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment.symbols b/tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=default).symbols similarity index 100% rename from tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment.symbols rename to tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=default).symbols diff --git a/tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment.types b/tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=default).types similarity index 100% rename from tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment.types rename to tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=default).types diff --git a/tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..b45ab387a625b --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=typesfirst).errors.txt @@ -0,0 +1,37 @@ +jsxImportSourceNonPragmaComment.tsx(3,21): error TS2307: Cannot find module '@emotion/react' or its corresponding type declarations. +jsxImportSourceNonPragmaComment.tsx(7,5): error TS2875: This JSX tag requires the module path '@emotion/react/jsx-runtime' to exist, but none could be found. Make sure you have types for the appropriate package installed. +jsxImportSourceNonPragmaComment.tsx(7,5): error TS7026: JSX element implicitly has type 'any' because no interface 'JSX.IntrinsicElements' exists. +jsxImportSourceNonPragmaComment.tsx(7,6): error TS2552: Cannot find name 'input'. Did you mean 'oninput'? + + +==== jsxImportSourceNonPragmaComment.tsx (4 errors) ==== + /* eslint-disable react/react-in-jsx-scope -- Unaware of @jsxImportSource */ + /** @jsxImportSource @emotion/react */ + import { css } from "@emotion/react"; + ~~~~~~~~~~~~~~~~ +!!! error TS2307: Cannot find module '@emotion/react' or its corresponding type declarations. + + export default function Component() { + return ( + + ~~~~~~ +!!! error TS2875: This JSX tag requires the module path '@emotion/react/jsx-runtime' to exist, but none could be found. Make sure you have types for the appropriate package installed. + ~~~~~~ +!!! error TS7026: JSX element implicitly has type 'any' because no interface 'JSX.IntrinsicElements' exists. + ); + } \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=typesfirst).js b/tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=typesfirst).js new file mode 100644 index 0000000000000..e58934ed59b6b --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=typesfirst).js @@ -0,0 +1,29 @@ +//// [tests/cases/compiler/jsxImportSourceNonPragmaComment.tsx] //// + +//// [jsxImportSourceNonPragmaComment.tsx] +/* eslint-disable react/react-in-jsx-scope -- Unaware of @jsxImportSource */ +/** @jsxImportSource @emotion/react */ +import { css } from "@emotion/react"; + +export default function Component() { + return ( + + ); +} + +//// [jsxImportSourceNonPragmaComment.jsx] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = Component; +/* eslint-disable react/react-in-jsx-scope -- Unaware of @jsxImportSource */ +/** @jsxImportSource @emotion/react */ +const react_1 = require("@emotion/react"); +function Component() { + return (); +} diff --git a/tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..d12b587e7c215 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=typesfirst).symbols @@ -0,0 +1,22 @@ +//// [tests/cases/compiler/jsxImportSourceNonPragmaComment.tsx] //// + +=== jsxImportSourceNonPragmaComment.tsx === +/* eslint-disable react/react-in-jsx-scope -- Unaware of @jsxImportSource */ +/** @jsxImportSource @emotion/react */ +import { css } from "@emotion/react"; +>css : Symbol(css, Decl(jsxImportSourceNonPragmaComment.tsx, 2, 8)) + +export default function Component() { +>Component : Symbol(Component, Decl(jsxImportSourceNonPragmaComment.tsx, 2, 37)) + + return ( + css : Symbol(css, Decl(jsxImportSourceNonPragmaComment.tsx, 6, 10)) +>css : Symbol(css, Decl(jsxImportSourceNonPragmaComment.tsx, 2, 8)) + + color: red; + `} + /> + ); +} diff --git a/tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=typesfirst).types new file mode 100644 index 0000000000000..5300452403d62 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=typesfirst).types @@ -0,0 +1,29 @@ +//// [tests/cases/compiler/jsxImportSourceNonPragmaComment.tsx] //// + +=== jsxImportSourceNonPragmaComment.tsx === +/* eslint-disable react/react-in-jsx-scope -- Unaware of @jsxImportSource */ +/** @jsxImportSource @emotion/react */ +import { css } from "@emotion/react"; +>css : any + +export default function Component() { +>Component : () => any + + return ( +>( ) : any + + : any +>input : any + + css={css` +>css : any +>css` color: red; ` : any +>css : any +>` color: red; ` : "\n color: red;\n " + + color: red; + `} + /> + ); +} diff --git a/tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord.js b/tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord(checkorder=default).js similarity index 100% rename from tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord.js rename to tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord(checkorder=default).js diff --git a/tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord.symbols b/tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord(checkorder=default).symbols similarity index 100% rename from tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord.symbols rename to tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord(checkorder=default).symbols diff --git a/tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord.types b/tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord(checkorder=default).types similarity index 100% rename from tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord.types rename to tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord(checkorder=default).types diff --git a/tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..183a3fdcdd653 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord(checkorder=typesfirst).errors.txt @@ -0,0 +1,12 @@ +index.tsx(5,2): error TS2304: Cannot find name 'a'. + + +==== index.tsx (1 errors) ==== + declare namespace JSX { + interface IntrinsicElements extends Record {} + } + + ; + ~ +!!! error TS2304: Cannot find name 'a'. + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord(checkorder=typesfirst).js b/tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord(checkorder=typesfirst).js new file mode 100644 index 0000000000000..4c58e6e84ff1d --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord(checkorder=typesfirst).js @@ -0,0 +1,13 @@ +//// [tests/cases/compiler/jsxIntrinsicElementsExtendsRecord.tsx] //// + +//// [index.tsx] +declare namespace JSX { + interface IntrinsicElements extends Record {} +} + +; + + +//// [index.jsx] +"use strict"; +; diff --git a/tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..c42caaed5098d --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord(checkorder=typesfirst).symbols @@ -0,0 +1,14 @@ +//// [tests/cases/compiler/jsxIntrinsicElementsExtendsRecord.tsx] //// + +=== index.tsx === +declare namespace JSX { +>JSX : Symbol(JSX, Decl(index.tsx, 0, 0)) + + interface IntrinsicElements extends Record {} +>IntrinsicElements : Symbol(IntrinsicElements, Decl(index.tsx, 0, 23)) +>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --)) +} + +; +>a : Symbol(JSX.IntrinsicElements, Decl(index.tsx, 0, 23)) + diff --git a/tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord(checkorder=typesfirst).types new file mode 100644 index 0000000000000..a2a76b6e77eed --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord(checkorder=typesfirst).types @@ -0,0 +1,11 @@ +//// [tests/cases/compiler/jsxIntrinsicElementsExtendsRecord.tsx] //// + +=== index.tsx === +declare namespace JSX { + interface IntrinsicElements extends Record {} +} + +; +> : any +>a : any + diff --git a/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations.errors.txt b/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=default).errors.txt similarity index 100% rename from tsc/testdata/baselines/reference/compiler/limitDeepInstantiations.errors.txt rename to tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=default).errors.txt diff --git a/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations.js b/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=default).js similarity index 100% rename from tsc/testdata/baselines/reference/compiler/limitDeepInstantiations.js rename to tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=default).js diff --git a/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations.symbols b/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=default).symbols similarity index 100% rename from tsc/testdata/baselines/reference/compiler/limitDeepInstantiations.symbols rename to tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=default).symbols diff --git a/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations.types b/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=default).types similarity index 100% rename from tsc/testdata/baselines/reference/compiler/limitDeepInstantiations.types rename to tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=default).types diff --git a/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..2998e94608985 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=typesfirst).errors.txt @@ -0,0 +1,14 @@ +error TS5114: Instantiations of type 'Foo' appear infinitely circular. +limitDeepInstantiations.ts(5,13): error TS2344: Type '"false"' does not satisfy the constraint '"true"'. + + +!!! error TS5114: Instantiations of type 'Foo' appear infinitely circular. +==== limitDeepInstantiations.ts (1 errors) ==== + // Repro from #14837 + + type Foo = { "true": Foo> }[T]; + let f1: Foo<"true", {}>; + let f2: Foo<"false", {}>; + ~~~~~~~ +!!! error TS2344: Type '"false"' does not satisfy the constraint '"true"'. + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=typesfirst).js b/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=typesfirst).js new file mode 100644 index 0000000000000..5c149c0177558 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=typesfirst).js @@ -0,0 +1,15 @@ +//// [tests/cases/compiler/limitDeepInstantiations.ts] //// + +//// [limitDeepInstantiations.ts] +// Repro from #14837 + +type Foo = { "true": Foo> }[T]; +let f1: Foo<"true", {}>; +let f2: Foo<"false", {}>; + + +//// [limitDeepInstantiations.js] +"use strict"; +// Repro from #14837 +let f1; +let f2; diff --git a/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..73413334b6b82 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=typesfirst).symbols @@ -0,0 +1,25 @@ +//// [tests/cases/compiler/limitDeepInstantiations.ts] //// + +=== limitDeepInstantiations.ts === +// Repro from #14837 + +type Foo = { "true": Foo> }[T]; +>Foo : Symbol(Foo, Decl(limitDeepInstantiations.ts, 0, 0)) +>T : Symbol(T, Decl(limitDeepInstantiations.ts, 2, 9)) +>B : Symbol(B, Decl(limitDeepInstantiations.ts, 2, 26)) +>"true" : Symbol("true", Decl(limitDeepInstantiations.ts, 2, 33)) +>Foo : Symbol(Foo, Decl(limitDeepInstantiations.ts, 0, 0)) +>T : Symbol(T, Decl(limitDeepInstantiations.ts, 2, 9)) +>Foo : Symbol(Foo, Decl(limitDeepInstantiations.ts, 0, 0)) +>T : Symbol(T, Decl(limitDeepInstantiations.ts, 2, 9)) +>B : Symbol(B, Decl(limitDeepInstantiations.ts, 2, 26)) +>T : Symbol(T, Decl(limitDeepInstantiations.ts, 2, 9)) + +let f1: Foo<"true", {}>; +>f1 : Symbol(f1, Decl(limitDeepInstantiations.ts, 3, 3)) +>Foo : Symbol(Foo, Decl(limitDeepInstantiations.ts, 0, 0)) + +let f2: Foo<"false", {}>; +>f2 : Symbol(f2, Decl(limitDeepInstantiations.ts, 4, 3)) +>Foo : Symbol(Foo, Decl(limitDeepInstantiations.ts, 0, 0)) + diff --git a/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=typesfirst).types new file mode 100644 index 0000000000000..520205007876c --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=typesfirst).types @@ -0,0 +1,15 @@ +//// [tests/cases/compiler/limitDeepInstantiations.ts] //// + +=== limitDeepInstantiations.ts === +// Repro from #14837 + +type Foo = { "true": Foo> }[T]; +>Foo : Foo +>"true" : Foo> + +let f1: Foo<"true", {}>; +>f1 : any + +let f2: Foo<"false", {}>; +>f2 : unknown + diff --git a/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred.errors.txt b/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=default).errors.txt similarity index 100% rename from tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred.errors.txt rename to tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=default).errors.txt diff --git a/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred.js b/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=default).js similarity index 100% rename from tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred.js rename to tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=default).js diff --git a/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred.symbols b/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=default).symbols similarity index 100% rename from tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred.symbols rename to tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=default).symbols diff --git a/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred.types b/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=default).types similarity index 100% rename from tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred.types rename to tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=default).types diff --git a/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..e93dbcc6cad6b --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=typesfirst).errors.txt @@ -0,0 +1,76 @@ +overloadresolutionWithConstraintCheckingDeferred.ts(14,26): error TS2769: No overload matches this call. + The last overload gave the following error. + Argument of type '(x: D) => G' is not assignable to parameter of type '(x: B) => any'. + Types of parameters 'x' and 'x' are incompatible. + Property 'q' is missing in type 'B' but required in type 'D'. +overloadresolutionWithConstraintCheckingDeferred.ts(14,37): error TS2741: Property 'x' is missing in type 'D' but required in type 'A'. +overloadresolutionWithConstraintCheckingDeferred.ts(16,27): error TS2769: No overload matches this call. + The last overload gave the following error. + Argument of type '(x: D) => G' is not assignable to parameter of type '(x: B) => any'. + Types of parameters 'x' and 'x' are incompatible. + Property 'q' is missing in type 'B' but required in type 'D'. +overloadresolutionWithConstraintCheckingDeferred.ts(16,38): error TS2741: Property 'x' is missing in type 'D' but required in type 'A'. +overloadresolutionWithConstraintCheckingDeferred.ts(18,27): error TS2769: No overload matches this call. + The last overload gave the following error. + Argument of type '(x: D) => G' is not assignable to parameter of type '(x: B) => any'. + Types of parameters 'x' and 'x' are incompatible. + Property 'q' is missing in type 'B' but required in type 'D'. +overloadresolutionWithConstraintCheckingDeferred.ts(19,32): error TS2741: Property 'x' is missing in type 'D' but required in type 'A'. + + +==== overloadresolutionWithConstraintCheckingDeferred.ts (6 errors) ==== + interface A { x } + interface B { x; y } + interface C { z } + interface D { q } + + class G { + constructor(x: T) { } + } + + declare function foo(arg: (x: D) => number): string; + declare function foo(arg: (x: C) => any): string; + declare function foo(arg: (x: B) => any): number; + + var result: number = foo(x => new G(x)); // x has type D, new G(x) fails, so first overload is picked. + ~~~~~~~~~~~~~ +!!! error TS2769: No overload matches this call. +!!! error TS2769: The last overload gave the following error. +!!! error TS2769: Argument of type '(x: D) => G' is not assignable to parameter of type '(x: B) => any'. +!!! error TS2769: Types of parameters 'x' and 'x' are incompatible. +!!! error TS2769: Property 'q' is missing in type 'B' but required in type 'D'. +!!! related TS2728 overloadresolutionWithConstraintCheckingDeferred.ts:4:15: 'q' is declared here. +!!! related TS2771 overloadresolutionWithConstraintCheckingDeferred.ts:12:18: The last overload is declared here. + ~ +!!! error TS2741: Property 'x' is missing in type 'D' but required in type 'A'. +!!! related TS2728 overloadresolutionWithConstraintCheckingDeferred.ts:1:15: 'x' is declared here. + + var result2: number = foo(x => new G(x)); // x has type D, new G(x) fails, so first overload is picked. + ~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2769: No overload matches this call. +!!! error TS2769: The last overload gave the following error. +!!! error TS2769: Argument of type '(x: D) => G' is not assignable to parameter of type '(x: B) => any'. +!!! error TS2769: Types of parameters 'x' and 'x' are incompatible. +!!! error TS2769: Property 'q' is missing in type 'B' but required in type 'D'. +!!! related TS2728 overloadresolutionWithConstraintCheckingDeferred.ts:4:15: 'q' is declared here. +!!! related TS2771 overloadresolutionWithConstraintCheckingDeferred.ts:12:18: The last overload is declared here. + ~~~~~~~~ +!!! error TS2741: Property 'x' is missing in type 'D' but required in type 'A'. +!!! related TS2728 overloadresolutionWithConstraintCheckingDeferred.ts:1:15: 'x' is declared here. + + var result3: string = foo(x => { // x has type D + ~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2769: No overload matches this call. +!!! error TS2769: The last overload gave the following error. +!!! error TS2769: Argument of type '(x: D) => G' is not assignable to parameter of type '(x: B) => any'. +!!! error TS2769: Types of parameters 'x' and 'x' are incompatible. +!!! error TS2769: Property 'q' is missing in type 'B' but required in type 'D'. +!!! related TS2728 overloadresolutionWithConstraintCheckingDeferred.ts:4:15: 'q' is declared here. +!!! related TS2771 overloadresolutionWithConstraintCheckingDeferred.ts:12:18: The last overload is declared here. + var y: G = new G(x); // error that D does not satisfy constraint, y is of type G, entire call to foo is an error + ~ +!!! error TS2741: Property 'x' is missing in type 'D' but required in type 'A'. +!!! related TS2728 overloadresolutionWithConstraintCheckingDeferred.ts:1:15: 'x' is declared here. + return y; + }); + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=typesfirst).js b/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=typesfirst).js new file mode 100644 index 0000000000000..bf035f63927a4 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=typesfirst).js @@ -0,0 +1,37 @@ +//// [tests/cases/compiler/overloadresolutionWithConstraintCheckingDeferred.ts] //// + +//// [overloadresolutionWithConstraintCheckingDeferred.ts] +interface A { x } +interface B { x; y } +interface C { z } +interface D { q } + +class G { + constructor(x: T) { } +} + +declare function foo(arg: (x: D) => number): string; +declare function foo(arg: (x: C) => any): string; +declare function foo(arg: (x: B) => any): number; + +var result: number = foo(x => new G(x)); // x has type D, new G(x) fails, so first overload is picked. + +var result2: number = foo(x => new G(x)); // x has type D, new G(x) fails, so first overload is picked. + +var result3: string = foo(x => { // x has type D + var y: G = new G(x); // error that D does not satisfy constraint, y is of type G, entire call to foo is an error + return y; +}); + + +//// [overloadresolutionWithConstraintCheckingDeferred.js] +"use strict"; +class G { + constructor(x) { } +} +var result = foo(x => new G(x)); // x has type D, new G(x) fails, so first overload is picked. +var result2 = foo(x => new G(x)); // x has type D, new G(x) fails, so first overload is picked. +var result3 = foo(x => { + var y = new G(x); // error that D does not satisfy constraint, y is of type G, entire call to foo is an error + return y; +}); diff --git a/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..c06f37a086801 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=typesfirst).symbols @@ -0,0 +1,80 @@ +//// [tests/cases/compiler/overloadresolutionWithConstraintCheckingDeferred.ts] //// + +=== overloadresolutionWithConstraintCheckingDeferred.ts === +interface A { x } +>A : Symbol(A, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 0, 0)) +>x : Symbol(A.x, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 0, 13)) + +interface B { x; y } +>B : Symbol(B, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 0, 17)) +>x : Symbol(B.x, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 1, 13)) +>y : Symbol(B.y, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 1, 16)) + +interface C { z } +>C : Symbol(C, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 1, 20)) +>z : Symbol(C.z, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 2, 13)) + +interface D { q } +>D : Symbol(D, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 2, 17)) +>q : Symbol(D.q, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 3, 13)) + +class G { +>G : Symbol(G, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 3, 17)) +>T : Symbol(T, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 5, 8)) +>A : Symbol(A, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 0, 0)) + + constructor(x: T) { } +>x : Symbol(x, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 6, 16)) +>T : Symbol(T, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 5, 8)) +} + +declare function foo(arg: (x: D) => number): string; +>foo : Symbol(foo, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 7, 1), Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 9, 52), Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 10, 49)) +>arg : Symbol(arg, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 9, 21)) +>x : Symbol(x, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 9, 27)) +>D : Symbol(D, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 2, 17)) + +declare function foo(arg: (x: C) => any): string; +>foo : Symbol(foo, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 7, 1), Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 9, 52), Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 10, 49)) +>arg : Symbol(arg, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 10, 21)) +>x : Symbol(x, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 10, 27)) +>C : Symbol(C, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 1, 20)) + +declare function foo(arg: (x: B) => any): number; +>foo : Symbol(foo, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 7, 1), Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 9, 52), Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 10, 49)) +>arg : Symbol(arg, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 11, 21)) +>x : Symbol(x, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 11, 27)) +>B : Symbol(B, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 0, 17)) + +var result: number = foo(x => new G(x)); // x has type D, new G(x) fails, so first overload is picked. +>result : Symbol(result, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 13, 3)) +>foo : Symbol(foo, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 7, 1), Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 9, 52), Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 10, 49)) +>x : Symbol(x, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 13, 25)) +>G : Symbol(G, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 3, 17)) +>x : Symbol(x, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 13, 25)) + +var result2: number = foo(x => new G(x)); // x has type D, new G(x) fails, so first overload is picked. +>result2 : Symbol(result2, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 15, 3)) +>foo : Symbol(foo, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 7, 1), Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 9, 52), Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 10, 49)) +>x : Symbol(x, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 15, 26)) +>G : Symbol(G, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 3, 17)) +>x : Symbol(x, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 15, 26)) +>x : Symbol(x, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 15, 26)) + +var result3: string = foo(x => { // x has type D +>result3 : Symbol(result3, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 17, 3)) +>foo : Symbol(foo, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 7, 1), Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 9, 52), Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 10, 49)) +>x : Symbol(x, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 17, 26)) + + var y: G = new G(x); // error that D does not satisfy constraint, y is of type G, entire call to foo is an error +>y : Symbol(y, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 18, 7)) +>G : Symbol(G, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 3, 17)) +>x : Symbol(x, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 17, 26)) +>G : Symbol(G, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 3, 17)) +>x : Symbol(x, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 17, 26)) + + return y; +>y : Symbol(y, Decl(overloadresolutionWithConstraintCheckingDeferred.ts, 18, 7)) + +}); + diff --git a/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=typesfirst).types new file mode 100644 index 0000000000000..7eb08e3ac8acb --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=typesfirst).types @@ -0,0 +1,78 @@ +//// [tests/cases/compiler/overloadresolutionWithConstraintCheckingDeferred.ts] //// + +=== overloadresolutionWithConstraintCheckingDeferred.ts === +interface A { x } +>x : any + +interface B { x; y } +>x : any +>y : any + +interface C { z } +>z : any + +interface D { q } +>q : any + +class G { +>G : G + + constructor(x: T) { } +>x : T +} + +declare function foo(arg: (x: D) => number): string; +>foo : { (arg: (x: D) => number): string; (arg: (x: C) => any): string; (arg: (x: B) => any): number; } +>arg : (x: D) => number +>x : D + +declare function foo(arg: (x: C) => any): string; +>foo : { (arg: (x: D) => number): string; (arg: (x: C) => any): string; (arg: (x: B) => any): number; } +>arg : (x: C) => any +>x : C + +declare function foo(arg: (x: B) => any): number; +>foo : { (arg: (x: D) => number): string; (arg: (x: C) => any): string; (arg: (x: B) => any): number; } +>arg : (x: B) => any +>x : B + +var result: number = foo(x => new G(x)); // x has type D, new G(x) fails, so first overload is picked. +>result : number +>foo(x => new G(x)) : never +>foo : { (arg: (x: D) => number): string; (arg: (x: C) => any): string; (arg: (x: B) => any): number; } +>x => new G(x) : (x: D) => G +>x : D +>new G(x) : G +>G : typeof G +>x : any + +var result2: number = foo(x => new G(x)); // x has type D, new G(x) fails, so first overload is picked. +>result2 : number +>foo(x => new G(x)) : never +>foo : { (arg: (x: D) => number): string; (arg: (x: C) => any): string; (arg: (x: B) => any): number; } +>x => new G(x) : (x: D) => G +>x : D +>new G(x) : G +>G : typeof G +>x : D +>x : any + +var result3: string = foo(x => { // x has type D +>result3 : string +>foo(x => { // x has type D var y: G = new G(x); // error that D does not satisfy constraint, y is of type G, entire call to foo is an error return y;}) : never +>foo : { (arg: (x: D) => number): string; (arg: (x: C) => any): string; (arg: (x: B) => any): number; } +>x => { // x has type D var y: G = new G(x); // error that D does not satisfy constraint, y is of type G, entire call to foo is an error return y;} : (x: D) => G +>x : D + + var y: G = new G(x); // error that D does not satisfy constraint, y is of type G, entire call to foo is an error +>y : G +>x : D +>new G(x) : G +>G : typeof G +>x : D + + return y; +>y : G + +}); + diff --git a/tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad.js b/tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad(checkorder=default).js similarity index 100% rename from tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad.js rename to tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad(checkorder=default).js diff --git a/tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad.symbols b/tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad(checkorder=default).symbols similarity index 100% rename from tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad.symbols rename to tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad(checkorder=default).symbols diff --git a/tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad.types b/tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad(checkorder=default).types similarity index 100% rename from tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad.types rename to tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad(checkorder=default).types diff --git a/tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad(checkorder=typesfirst).js b/tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad(checkorder=typesfirst).js new file mode 100644 index 0000000000000..90085dfe2092f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad(checkorder=typesfirst).js @@ -0,0 +1,24 @@ +//// [tests/cases/compiler/returnTypeInferenceNotTooBroad.ts] //// + +//// [returnTypeInferenceNotTooBroad.ts] +type Signs = { kind: 'a'; a: 3; } | { kind: 'b'; b: 2; } | { kind: 'c'; c: 1; }; +interface Opts { + low?: number; + sign?: T +} +interface Wrapper { +} +declare function sepsis(opts: Opts): Wrapper; +declare function unwrap(w: Wrapper): T; +export const y = sepsis({ low: 1, sign: { kind: 'a', a: 3 }}); +// $ExpectType { kind: "a"; a: 3; } +export const yun = unwrap(y); +// $ExpectType { kind: "a"; a: 3; } +export const yone = unwrap(sepsis({ low: 1, sign: { kind: 'a', a: 3 }})); + +//// [returnTypeInferenceNotTooBroad.js] +export const y = sepsis({ low: 1, sign: { kind: 'a', a: 3 } }); +// $ExpectType { kind: "a"; a: 3; } +export const yun = unwrap(y); +// $ExpectType { kind: "a"; a: 3; } +export const yone = unwrap(sepsis({ low: 1, sign: { kind: 'a', a: 3 } })); diff --git a/tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..ad8e148932bab --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad(checkorder=typesfirst).symbols @@ -0,0 +1,69 @@ +//// [tests/cases/compiler/returnTypeInferenceNotTooBroad.ts] //// + +=== returnTypeInferenceNotTooBroad.ts === +type Signs = { kind: 'a'; a: 3; } | { kind: 'b'; b: 2; } | { kind: 'c'; c: 1; }; +>Signs : Symbol(Signs, Decl(returnTypeInferenceNotTooBroad.ts, 0, 0)) +>kind : Symbol(kind, Decl(returnTypeInferenceNotTooBroad.ts, 0, 14)) +>a : Symbol(a, Decl(returnTypeInferenceNotTooBroad.ts, 0, 25)) +>kind : Symbol(kind, Decl(returnTypeInferenceNotTooBroad.ts, 0, 37)) +>b : Symbol(b, Decl(returnTypeInferenceNotTooBroad.ts, 0, 48)) +>kind : Symbol(kind, Decl(returnTypeInferenceNotTooBroad.ts, 0, 60)) +>c : Symbol(c, Decl(returnTypeInferenceNotTooBroad.ts, 0, 71)) + +interface Opts { +>Opts : Symbol(Opts, Decl(returnTypeInferenceNotTooBroad.ts, 0, 80)) +>T : Symbol(T, Decl(returnTypeInferenceNotTooBroad.ts, 1, 15)) + + low?: number; +>low : Symbol(Opts.low, Decl(returnTypeInferenceNotTooBroad.ts, 1, 19)) + + sign?: T +>sign : Symbol(Opts.sign, Decl(returnTypeInferenceNotTooBroad.ts, 2, 17)) +>T : Symbol(T, Decl(returnTypeInferenceNotTooBroad.ts, 1, 15)) +} +interface Wrapper { +>Wrapper : Symbol(Wrapper, Decl(returnTypeInferenceNotTooBroad.ts, 4, 1)) +>T : Symbol(T, Decl(returnTypeInferenceNotTooBroad.ts, 5, 18)) +} +declare function sepsis(opts: Opts): Wrapper; +>sepsis : Symbol(sepsis, Decl(returnTypeInferenceNotTooBroad.ts, 6, 1)) +>T : Symbol(T, Decl(returnTypeInferenceNotTooBroad.ts, 7, 24)) +>Signs : Symbol(Signs, Decl(returnTypeInferenceNotTooBroad.ts, 0, 0)) +>opts : Symbol(opts, Decl(returnTypeInferenceNotTooBroad.ts, 7, 41)) +>Opts : Symbol(Opts, Decl(returnTypeInferenceNotTooBroad.ts, 0, 80)) +>T : Symbol(T, Decl(returnTypeInferenceNotTooBroad.ts, 7, 24)) +>Wrapper : Symbol(Wrapper, Decl(returnTypeInferenceNotTooBroad.ts, 4, 1)) +>T : Symbol(T, Decl(returnTypeInferenceNotTooBroad.ts, 7, 24)) + +declare function unwrap(w: Wrapper): T; +>unwrap : Symbol(unwrap, Decl(returnTypeInferenceNotTooBroad.ts, 7, 68)) +>T : Symbol(T, Decl(returnTypeInferenceNotTooBroad.ts, 8, 24)) +>w : Symbol(w, Decl(returnTypeInferenceNotTooBroad.ts, 8, 27)) +>Wrapper : Symbol(Wrapper, Decl(returnTypeInferenceNotTooBroad.ts, 4, 1)) +>T : Symbol(T, Decl(returnTypeInferenceNotTooBroad.ts, 8, 24)) +>T : Symbol(T, Decl(returnTypeInferenceNotTooBroad.ts, 8, 24)) + +export const y = sepsis({ low: 1, sign: { kind: 'a', a: 3 }}); +>y : Symbol(y, Decl(returnTypeInferenceNotTooBroad.ts, 9, 12)) +>sepsis : Symbol(sepsis, Decl(returnTypeInferenceNotTooBroad.ts, 6, 1)) +>low : Symbol(low, Decl(returnTypeInferenceNotTooBroad.ts, 9, 25)) +>sign : Symbol(sign, Decl(returnTypeInferenceNotTooBroad.ts, 9, 33)) +>kind : Symbol(kind, Decl(returnTypeInferenceNotTooBroad.ts, 9, 41)) +>a : Symbol(a, Decl(returnTypeInferenceNotTooBroad.ts, 9, 52)) + +// $ExpectType { kind: "a"; a: 3; } +export const yun = unwrap(y); +>yun : Symbol(yun, Decl(returnTypeInferenceNotTooBroad.ts, 11, 12)) +>unwrap : Symbol(unwrap, Decl(returnTypeInferenceNotTooBroad.ts, 7, 68)) +>y : Symbol(y, Decl(returnTypeInferenceNotTooBroad.ts, 9, 12)) + +// $ExpectType { kind: "a"; a: 3; } +export const yone = unwrap(sepsis({ low: 1, sign: { kind: 'a', a: 3 }})); +>yone : Symbol(yone, Decl(returnTypeInferenceNotTooBroad.ts, 13, 12)) +>unwrap : Symbol(unwrap, Decl(returnTypeInferenceNotTooBroad.ts, 7, 68)) +>sepsis : Symbol(sepsis, Decl(returnTypeInferenceNotTooBroad.ts, 6, 1)) +>low : Symbol(low, Decl(returnTypeInferenceNotTooBroad.ts, 13, 35)) +>sign : Symbol(sign, Decl(returnTypeInferenceNotTooBroad.ts, 13, 43)) +>kind : Symbol(kind, Decl(returnTypeInferenceNotTooBroad.ts, 13, 51)) +>a : Symbol(a, Decl(returnTypeInferenceNotTooBroad.ts, 13, 62)) + diff --git a/tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad(checkorder=typesfirst).types new file mode 100644 index 0000000000000..1f07d04ed8463 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad(checkorder=typesfirst).types @@ -0,0 +1,67 @@ +//// [tests/cases/compiler/returnTypeInferenceNotTooBroad.ts] //// + +=== returnTypeInferenceNotTooBroad.ts === +type Signs = { kind: 'a'; a: 3; } | { kind: 'b'; b: 2; } | { kind: 'c'; c: 1; }; +>Signs : Signs +>kind : "a" +>a : 3 +>kind : "b" +>b : 2 +>kind : "c" +>c : 1 + +interface Opts { + low?: number; +>low : number | undefined + + sign?: T +>sign : T | undefined +} +interface Wrapper { +} +declare function sepsis(opts: Opts): Wrapper; +>sepsis : (opts: Opts) => Wrapper +>opts : Opts + +declare function unwrap(w: Wrapper): T; +>unwrap : (w: Wrapper) => T +>w : Wrapper + +export const y = sepsis({ low: 1, sign: { kind: 'a', a: 3 }}); +>y : Wrapper<{ kind: "a"; a: 3; }> +>sepsis({ low: 1, sign: { kind: 'a', a: 3 }}) : Wrapper<{ kind: "a"; a: 3; }> +>sepsis : (opts: Opts) => Wrapper +>{ low: 1, sign: { kind: 'a', a: 3 }} : { low: number; sign: { kind: "a"; a: 3; }; } +>low : number +>1 : 1 +>sign : { kind: "a"; a: 3; } +>{ kind: 'a', a: 3 } : { kind: "a"; a: 3; } +>kind : "a" +>'a' : "a" +>a : 3 +>3 : 3 + +// $ExpectType { kind: "a"; a: 3; } +export const yun = unwrap(y); +>yun : { kind: "a"; a: 3; } +>unwrap(y) : { kind: "a"; a: 3; } +>unwrap : (w: Wrapper) => T +>y : Wrapper<{ kind: "a"; a: 3; }> + +// $ExpectType { kind: "a"; a: 3; } +export const yone = unwrap(sepsis({ low: 1, sign: { kind: 'a', a: 3 }})); +>yone : { kind: string; a: number; } +>unwrap(sepsis({ low: 1, sign: { kind: 'a', a: 3 }})) : { kind: string; a: number; } +>unwrap : (w: Wrapper) => T +>sepsis({ low: 1, sign: { kind: 'a', a: 3 }}) : Wrapper<{ kind: string; a: number; }> +>sepsis : (opts: Opts) => Wrapper +>{ low: 1, sign: { kind: 'a', a: 3 }} : { low: number; sign: { kind: string; a: number; }; } +>low : number +>1 : 1 +>sign : { kind: string; a: number; } +>{ kind: 'a', a: 3 } : { kind: string; a: number; } +>kind : string +>'a' : "a" +>a : number +>3 : 3 + diff --git a/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength.errors.txt b/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=default).errors.txt similarity index 100% rename from tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength.errors.txt rename to tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=default).errors.txt diff --git a/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength.js b/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=default).js similarity index 100% rename from tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength.js rename to tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=default).js diff --git a/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength.symbols b/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=default).symbols similarity index 100% rename from tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength.symbols rename to tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=default).symbols diff --git a/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength.types b/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=default).types similarity index 100% rename from tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength.types rename to tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=default).types diff --git a/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..a7a577d5080f1 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).errors.txt @@ -0,0 +1,41 @@ +error TS2589: Type instantiation is excessively deep and possibly infinite. + + +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. +==== templateLiteralTypeExcessiveLength.ts (0 errors) ==== + // Regression test for #63271: `Dec<2>` is `any`, so `Recur` produces both conditional branches and + // keeps tail-recursing forever. The checker must report an error instead of building an unbounded + // template literal type. + + type Dec = + N extends 5 ? 4 : N extends 4 ? 3 : N extends 3 ? 2 : + N extends 2 ? any : + N extends 1 ? 0 : 0; + + type Recur = + N extends 0 ? S : Recur, `${S}_${S}`>; + + // The string literal doubles on every iteration. + type Explode = { + [P in Recur<5, "a"> as `${P}_key`]: any; + }; + + // The number of placeholders doubles on every iteration. + type ExplodeSpans = { + [P in Recur<5, string> as `${P}_key`]: any; + }; + + // Every text segment stays small, but the number of segments doubles on every iteration, + // so the combined text length grows without bound. + type A16 = "aaaaaaaaaaaaaaaa"; + type A64 = `${A16}${A16}${A16}${A16}`; + type A256 = `${A64}${A64}${A64}${A64}`; + type A1024 = `${A256}${A256}${A256}${A256}`; + + type RecurSegments = + N extends 0 ? S : RecurSegments, `${S}${string}${S}`>; + + type ExplodeSegments = { + [P in RecurSegments<5, A1024> as `${P}_key`]: any; + }; + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).js b/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).js new file mode 100644 index 0000000000000..36fa92d4a5035 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).js @@ -0,0 +1,45 @@ +//// [tests/cases/compiler/templateLiteralTypeExcessiveLength.ts] //// + +//// [templateLiteralTypeExcessiveLength.ts] +// Regression test for #63271: `Dec<2>` is `any`, so `Recur` produces both conditional branches and +// keeps tail-recursing forever. The checker must report an error instead of building an unbounded +// template literal type. + +type Dec = + N extends 5 ? 4 : N extends 4 ? 3 : N extends 3 ? 2 : + N extends 2 ? any : + N extends 1 ? 0 : 0; + +type Recur = + N extends 0 ? S : Recur, `${S}_${S}`>; + +// The string literal doubles on every iteration. +type Explode = { + [P in Recur<5, "a"> as `${P}_key`]: any; +}; + +// The number of placeholders doubles on every iteration. +type ExplodeSpans = { + [P in Recur<5, string> as `${P}_key`]: any; +}; + +// Every text segment stays small, but the number of segments doubles on every iteration, +// so the combined text length grows without bound. +type A16 = "aaaaaaaaaaaaaaaa"; +type A64 = `${A16}${A16}${A16}${A16}`; +type A256 = `${A64}${A64}${A64}${A64}`; +type A1024 = `${A256}${A256}${A256}${A256}`; + +type RecurSegments = + N extends 0 ? S : RecurSegments, `${S}${string}${S}`>; + +type ExplodeSegments = { + [P in RecurSegments<5, A1024> as `${P}_key`]: any; +}; + + +//// [templateLiteralTypeExcessiveLength.js] +"use strict"; +// Regression test for #63271: `Dec<2>` is `any`, so `Recur` produces both conditional branches and +// keeps tail-recursing forever. The checker must report an error instead of building an unbounded +// template literal type. diff --git a/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..2e85049b74921 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).symbols @@ -0,0 +1,109 @@ +//// [tests/cases/compiler/templateLiteralTypeExcessiveLength.ts] //// + +=== templateLiteralTypeExcessiveLength.ts === +// Regression test for #63271: `Dec<2>` is `any`, so `Recur` produces both conditional branches and +// keeps tail-recursing forever. The checker must report an error instead of building an unbounded +// template literal type. + +type Dec = +>Dec : Symbol(Dec, Decl(templateLiteralTypeExcessiveLength.ts, 0, 0)) +>N : Symbol(N, Decl(templateLiteralTypeExcessiveLength.ts, 4, 9)) + + N extends 5 ? 4 : N extends 4 ? 3 : N extends 3 ? 2 : +>N : Symbol(N, Decl(templateLiteralTypeExcessiveLength.ts, 4, 9)) +>N : Symbol(N, Decl(templateLiteralTypeExcessiveLength.ts, 4, 9)) +>N : Symbol(N, Decl(templateLiteralTypeExcessiveLength.ts, 4, 9)) + + N extends 2 ? any : +>N : Symbol(N, Decl(templateLiteralTypeExcessiveLength.ts, 4, 9)) + + N extends 1 ? 0 : 0; +>N : Symbol(N, Decl(templateLiteralTypeExcessiveLength.ts, 4, 9)) + +type Recur = +>Recur : Symbol(Recur, Decl(templateLiteralTypeExcessiveLength.ts, 7, 24)) +>N : Symbol(N, Decl(templateLiteralTypeExcessiveLength.ts, 9, 11)) +>S : Symbol(S, Decl(templateLiteralTypeExcessiveLength.ts, 9, 28)) + + N extends 0 ? S : Recur, `${S}_${S}`>; +>N : Symbol(N, Decl(templateLiteralTypeExcessiveLength.ts, 9, 11)) +>S : Symbol(S, Decl(templateLiteralTypeExcessiveLength.ts, 9, 28)) +>Recur : Symbol(Recur, Decl(templateLiteralTypeExcessiveLength.ts, 7, 24)) +>Dec : Symbol(Dec, Decl(templateLiteralTypeExcessiveLength.ts, 0, 0)) +>N : Symbol(N, Decl(templateLiteralTypeExcessiveLength.ts, 9, 11)) +>S : Symbol(S, Decl(templateLiteralTypeExcessiveLength.ts, 9, 28)) +>S : Symbol(S, Decl(templateLiteralTypeExcessiveLength.ts, 9, 28)) + +// The string literal doubles on every iteration. +type Explode = { +>Explode : Symbol(Explode, Decl(templateLiteralTypeExcessiveLength.ts, 10, 49)) + + [P in Recur<5, "a"> as `${P}_key`]: any; +>P : Symbol(P, Decl(templateLiteralTypeExcessiveLength.ts, 14, 5)) +>Recur : Symbol(Recur, Decl(templateLiteralTypeExcessiveLength.ts, 7, 24)) +>P : Symbol(P, Decl(templateLiteralTypeExcessiveLength.ts, 14, 5)) + +}; + +// The number of placeholders doubles on every iteration. +type ExplodeSpans = { +>ExplodeSpans : Symbol(ExplodeSpans, Decl(templateLiteralTypeExcessiveLength.ts, 15, 2)) + + [P in Recur<5, string> as `${P}_key`]: any; +>P : Symbol(P, Decl(templateLiteralTypeExcessiveLength.ts, 19, 5)) +>Recur : Symbol(Recur, Decl(templateLiteralTypeExcessiveLength.ts, 7, 24)) +>P : Symbol(P, Decl(templateLiteralTypeExcessiveLength.ts, 19, 5)) + +}; + +// Every text segment stays small, but the number of segments doubles on every iteration, +// so the combined text length grows without bound. +type A16 = "aaaaaaaaaaaaaaaa"; +>A16 : Symbol(A16, Decl(templateLiteralTypeExcessiveLength.ts, 20, 2)) + +type A64 = `${A16}${A16}${A16}${A16}`; +>A64 : Symbol(A64, Decl(templateLiteralTypeExcessiveLength.ts, 24, 30)) +>A16 : Symbol(A16, Decl(templateLiteralTypeExcessiveLength.ts, 20, 2)) +>A16 : Symbol(A16, Decl(templateLiteralTypeExcessiveLength.ts, 20, 2)) +>A16 : Symbol(A16, Decl(templateLiteralTypeExcessiveLength.ts, 20, 2)) +>A16 : Symbol(A16, Decl(templateLiteralTypeExcessiveLength.ts, 20, 2)) + +type A256 = `${A64}${A64}${A64}${A64}`; +>A256 : Symbol(A256, Decl(templateLiteralTypeExcessiveLength.ts, 25, 38)) +>A64 : Symbol(A64, Decl(templateLiteralTypeExcessiveLength.ts, 24, 30)) +>A64 : Symbol(A64, Decl(templateLiteralTypeExcessiveLength.ts, 24, 30)) +>A64 : Symbol(A64, Decl(templateLiteralTypeExcessiveLength.ts, 24, 30)) +>A64 : Symbol(A64, Decl(templateLiteralTypeExcessiveLength.ts, 24, 30)) + +type A1024 = `${A256}${A256}${A256}${A256}`; +>A1024 : Symbol(A1024, Decl(templateLiteralTypeExcessiveLength.ts, 26, 39)) +>A256 : Symbol(A256, Decl(templateLiteralTypeExcessiveLength.ts, 25, 38)) +>A256 : Symbol(A256, Decl(templateLiteralTypeExcessiveLength.ts, 25, 38)) +>A256 : Symbol(A256, Decl(templateLiteralTypeExcessiveLength.ts, 25, 38)) +>A256 : Symbol(A256, Decl(templateLiteralTypeExcessiveLength.ts, 25, 38)) + +type RecurSegments = +>RecurSegments : Symbol(RecurSegments, Decl(templateLiteralTypeExcessiveLength.ts, 27, 44)) +>N : Symbol(N, Decl(templateLiteralTypeExcessiveLength.ts, 29, 19)) +>S : Symbol(S, Decl(templateLiteralTypeExcessiveLength.ts, 29, 36)) + + N extends 0 ? S : RecurSegments, `${S}${string}${S}`>; +>N : Symbol(N, Decl(templateLiteralTypeExcessiveLength.ts, 29, 19)) +>S : Symbol(S, Decl(templateLiteralTypeExcessiveLength.ts, 29, 36)) +>RecurSegments : Symbol(RecurSegments, Decl(templateLiteralTypeExcessiveLength.ts, 27, 44)) +>Dec : Symbol(Dec, Decl(templateLiteralTypeExcessiveLength.ts, 0, 0)) +>N : Symbol(N, Decl(templateLiteralTypeExcessiveLength.ts, 29, 19)) +>S : Symbol(S, Decl(templateLiteralTypeExcessiveLength.ts, 29, 36)) +>S : Symbol(S, Decl(templateLiteralTypeExcessiveLength.ts, 29, 36)) + +type ExplodeSegments = { +>ExplodeSegments : Symbol(ExplodeSegments, Decl(templateLiteralTypeExcessiveLength.ts, 30, 65)) + + [P in RecurSegments<5, A1024> as `${P}_key`]: any; +>P : Symbol(P, Decl(templateLiteralTypeExcessiveLength.ts, 33, 5)) +>RecurSegments : Symbol(RecurSegments, Decl(templateLiteralTypeExcessiveLength.ts, 27, 44)) +>A1024 : Symbol(A1024, Decl(templateLiteralTypeExcessiveLength.ts, 26, 39)) +>P : Symbol(P, Decl(templateLiteralTypeExcessiveLength.ts, 33, 5)) + +}; + diff --git a/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).types new file mode 100644 index 0000000000000..e882332afbf78 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).types @@ -0,0 +1,58 @@ +//// [tests/cases/compiler/templateLiteralTypeExcessiveLength.ts] //// + +=== templateLiteralTypeExcessiveLength.ts === +// Regression test for #63271: `Dec<2>` is `any`, so `Recur` produces both conditional branches and +// keeps tail-recursing forever. The checker must report an error instead of building an unbounded +// template literal type. + +type Dec = +>Dec : Dec + + N extends 5 ? 4 : N extends 4 ? 3 : N extends 3 ? 2 : + N extends 2 ? any : + N extends 1 ? 0 : 0; + +type Recur = +>Recur : Recur + + N extends 0 ? S : Recur, `${S}_${S}`>; + +// The string literal doubles on every iteration. +type Explode = { +>Explode : Explode + + [P in Recur<5, "a"> as `${P}_key`]: any; +}; + +// The number of placeholders doubles on every iteration. +type ExplodeSpans = { +>ExplodeSpans : ExplodeSpans + + [P in Recur<5, string> as `${P}_key`]: any; +}; + +// Every text segment stays small, but the number of segments doubles on every iteration, +// so the combined text length grows without bound. +type A16 = "aaaaaaaaaaaaaaaa"; +>A16 : "aaaaaaaaaaaaaaaa" + +type A64 = `${A16}${A16}${A16}${A16}`; +>A64 : "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + +type A256 = `${A64}${A64}${A64}${A64}`; +>A256 : "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + +type A1024 = `${A256}${A256}${A256}${A256}`; +>A1024 : "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + +type RecurSegments = +>RecurSegments : RecurSegments + + N extends 0 ? S : RecurSegments, `${S}${string}${S}`>; + +type ExplodeSegments = { +>ExplodeSegments : ExplodeSegments + + [P in RecurSegments<5, A1024> as `${P}_key`]: any; +}; + diff --git a/tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint.errors.txt b/tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=default).errors.txt similarity index 100% rename from tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint.errors.txt rename to tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=default).errors.txt diff --git a/tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint.js b/tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=default).js similarity index 100% rename from tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint.js rename to tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=default).js diff --git a/tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint.symbols b/tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=default).symbols similarity index 100% rename from tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint.symbols rename to tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=default).symbols diff --git a/tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint.types b/tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=default).types similarity index 100% rename from tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint.types rename to tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=default).types diff --git a/tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..83997ce99f298 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=typesfirst).errors.txt @@ -0,0 +1,16 @@ +typeParameterHasSelfAsConstraint.ts(1,24): error TS2313: Type parameter 'T' has a circular constraint. +typeParameterHasSelfAsConstraint.ts(2,5): error TS2322: Type 'T' is not assignable to type 'number'. + + +==== typeParameterHasSelfAsConstraint.ts (2 errors) ==== + function foo(x: T): number { + ~ +!!! error TS2313: Type parameter 'T' has a circular constraint. +!!! related TS2751 typeParameterHasSelfAsConstraint.ts:2:12: Circularity originates in type at this location. + return x; + ~~~~~~ +!!! error TS2322: Type 'T' is not assignable to type 'number'. +!!! related TS2208 typeParameterHasSelfAsConstraint.ts:1:14: This type parameter might need an `extends number` constraint. + } + + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=typesfirst).js b/tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=typesfirst).js new file mode 100644 index 0000000000000..2b6ae7f2bca3f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=typesfirst).js @@ -0,0 +1,14 @@ +//// [tests/cases/compiler/typeParameterHasSelfAsConstraint.ts] //// + +//// [typeParameterHasSelfAsConstraint.ts] +function foo(x: T): number { + return x; +} + + + +//// [typeParameterHasSelfAsConstraint.js] +"use strict"; +function foo(x) { + return x; +} diff --git a/tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..e8a52432a83dc --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=typesfirst).symbols @@ -0,0 +1,15 @@ +//// [tests/cases/compiler/typeParameterHasSelfAsConstraint.ts] //// + +=== typeParameterHasSelfAsConstraint.ts === +function foo(x: T): number { +>foo : Symbol(foo, Decl(typeParameterHasSelfAsConstraint.ts, 0, 0)) +>T : Symbol(T, Decl(typeParameterHasSelfAsConstraint.ts, 0, 13)) +>T : Symbol(T, Decl(typeParameterHasSelfAsConstraint.ts, 0, 13)) +>x : Symbol(x, Decl(typeParameterHasSelfAsConstraint.ts, 0, 26)) +>T : Symbol(T, Decl(typeParameterHasSelfAsConstraint.ts, 0, 13)) + + return x; +>x : Symbol(x, Decl(typeParameterHasSelfAsConstraint.ts, 0, 26)) +} + + diff --git a/tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=typesfirst).types new file mode 100644 index 0000000000000..dd8af60e8c209 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=typesfirst).types @@ -0,0 +1,12 @@ +//// [tests/cases/compiler/typeParameterHasSelfAsConstraint.ts] //// + +=== typeParameterHasSelfAsConstraint.ts === +function foo(x: T): number { +>foo : (x: T) => number +>x : T + + return x; +>x : T +} + + diff --git a/tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.errors.txt b/tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=default).errors.txt similarity index 100% rename from tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.errors.txt rename to tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=default).errors.txt diff --git a/tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.js b/tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=default).js similarity index 100% rename from tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.js rename to tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=default).js diff --git a/tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.symbols b/tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=default).symbols similarity index 100% rename from tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.symbols rename to tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=default).symbols diff --git a/tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.types b/tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=default).types similarity index 100% rename from tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.types rename to tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=default).types diff --git a/tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..387fe2f14d0be --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=typesfirst).errors.txt @@ -0,0 +1,25 @@ +unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts(1,18): error TS6133: 'person' is declared but its value is never read. +unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts(2,9): error TS6133: 'unused' is declared but its value is never read. +unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts(3,14): error TS6133: 'maker' is declared but its value is never read. +unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts(3,20): error TS6133: 'child' is declared but its value is never read. +unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts(4,13): error TS6133: 'unused2' is declared but its value is never read. + + +==== unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts (5 errors) ==== + function greeter(person: string, person2: string) { + ~~~~~~ +!!! error TS6133: 'person' is declared but its value is never read. + var unused = 20; + ~~~~~~ +!!! error TS6133: 'unused' is declared but its value is never read. + function maker(child: string): void { + ~~~~~ +!!! error TS6133: 'maker' is declared but its value is never read. + ~~~~~ +!!! error TS6133: 'child' is declared but its value is never read. + var unused2 = 22; + ~~~~~~~ +!!! error TS6133: 'unused2' is declared but its value is never read. + } + person2 = "dummy value"; + } \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=typesfirst).js b/tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=typesfirst).js new file mode 100644 index 0000000000000..9457d5135a002 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=typesfirst).js @@ -0,0 +1,20 @@ +//// [tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts] //// + +//// [unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts] +function greeter(person: string, person2: string) { + var unused = 20; + function maker(child: string): void { + var unused2 = 22; + } + person2 = "dummy value"; +} + +//// [unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.js] +"use strict"; +function greeter(person, person2) { + var unused = 20; + function maker(child) { + var unused2 = 22; + } + person2 = "dummy value"; +} diff --git a/tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..7f6c7e03b1461 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=typesfirst).symbols @@ -0,0 +1,21 @@ +//// [tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts] //// + +=== unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts === +function greeter(person: string, person2: string) { +>greeter : Symbol(greeter, Decl(unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts, 0, 0)) +>person : Symbol(person, Decl(unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts, 0, 17)) +>person2 : Symbol(person2, Decl(unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts, 0, 32)) + + var unused = 20; +>unused : Symbol(unused, Decl(unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts, 1, 7)) + + function maker(child: string): void { +>maker : Symbol(maker, Decl(unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts, 1, 20)) +>child : Symbol(child, Decl(unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts, 2, 19)) + + var unused2 = 22; +>unused2 : Symbol(unused2, Decl(unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts, 3, 11)) + } + person2 = "dummy value"; +>person2 : Symbol(person2, Decl(unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts, 0, 32)) +} diff --git a/tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=typesfirst).types new file mode 100644 index 0000000000000..0a0c9a1359a5f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=typesfirst).types @@ -0,0 +1,25 @@ +//// [tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts] //// + +=== unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts === +function greeter(person: string, person2: string) { +>greeter : (person: string, person2: string) => void +>person : string +>person2 : string + + var unused = 20; +>unused : number +>20 : 20 + + function maker(child: string): void { +>maker : (child: string) => void +>child : string + + var unused2 = 22; +>unused2 : number +>22 : 22 + } + person2 = "dummy value"; +>person2 = "dummy value" : "dummy value" +>person2 : string +>"dummy value" : "dummy value" +} diff --git a/tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1.errors.txt b/tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1(checkorder=default).errors.txt similarity index 100% rename from tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1.errors.txt rename to tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1(checkorder=default).errors.txt diff --git a/tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1.symbols b/tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1(checkorder=default).symbols similarity index 100% rename from tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1.symbols rename to tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1(checkorder=default).symbols diff --git a/tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1.types b/tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1(checkorder=default).types similarity index 100% rename from tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1.types rename to tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1(checkorder=default).types diff --git a/tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..981a83e22c019 --- /dev/null +++ b/tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1(checkorder=typesfirst).errors.txt @@ -0,0 +1,152 @@ +dependentDestructuredVariablesReferenceInDeclaration1.ts(4,9): error TS2322: Type '{ c: number; f: any; }' is not assignable to type 'string | number'. +dependentDestructuredVariablesReferenceInDeclaration1.ts(4,11): error TS2339: Property 'c' does not exist on type 'string | number'. +dependentDestructuredVariablesReferenceInDeclaration1.ts(4,14): error TS2339: Property 'f' does not exist on type 'string | number'. +dependentDestructuredVariablesReferenceInDeclaration1.ts(4,14): error TS7022: 'f' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. +dependentDestructuredVariablesReferenceInDeclaration1.ts(4,45): error TS2448: Block-scoped variable 'f' used before its declaration. +dependentDestructuredVariablesReferenceInDeclaration1.ts(9,9): error TS2322: Type '{ c: number; f: () => any; }' is not assignable to type 'string | number'. +dependentDestructuredVariablesReferenceInDeclaration1.ts(9,11): error TS2339: Property 'c' does not exist on type 'string | number'. +dependentDestructuredVariablesReferenceInDeclaration1.ts(9,14): error TS2339: Property 'f' does not exist on type 'string | number'. +dependentDestructuredVariablesReferenceInDeclaration1.ts(14,9): error TS2322: Type '{ c: number; f: number; g: number; }' is not assignable to type 'string | number'. +dependentDestructuredVariablesReferenceInDeclaration1.ts(14,11): error TS2339: Property 'c' does not exist on type 'string | number'. +dependentDestructuredVariablesReferenceInDeclaration1.ts(14,14): error TS2339: Property 'f' does not exist on type 'string | number'. +dependentDestructuredVariablesReferenceInDeclaration1.ts(14,17): error TS2339: Property 'g' does not exist on type 'string | number'. +dependentDestructuredVariablesReferenceInDeclaration1.ts(20,9): error TS2322: Type '{ c: number; f: number; }' is not assignable to type 'string | number'. +dependentDestructuredVariablesReferenceInDeclaration1.ts(20,11): error TS2339: Property 'c' does not exist on type 'string | number'. +dependentDestructuredVariablesReferenceInDeclaration1.ts(20,14): error TS2339: Property 'f' does not exist on type 'string | number'. +dependentDestructuredVariablesReferenceInDeclaration1.ts(20,14): error TS2451: Cannot redeclare block-scoped variable 'f'. +dependentDestructuredVariablesReferenceInDeclaration1.ts(20,17): error TS2339: Property 'f' does not exist on type 'string | number'. +dependentDestructuredVariablesReferenceInDeclaration1.ts(20,17): error TS2451: Cannot redeclare block-scoped variable 'f'. +dependentDestructuredVariablesReferenceInDeclaration1.ts(25,9): error TS2322: Type '{ c: number; f: number; }' is not assignable to type 'string | number'. +dependentDestructuredVariablesReferenceInDeclaration1.ts(25,11): error TS2339: Property 'c' does not exist on type 'string | number'. +dependentDestructuredVariablesReferenceInDeclaration1.ts(25,14): error TS2339: Property 'f' does not exist on type 'string | number'. +dependentDestructuredVariablesReferenceInDeclaration1.ts(25,17): error TS2339: Property 'f' does not exist on type 'string | number'. +dependentDestructuredVariablesReferenceInDeclaration1.ts(30,14): error TS7022: 'f' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. +dependentDestructuredVariablesReferenceInDeclaration1.ts(30,71): error TS2448: Block-scoped variable 'f' used before its declaration. +dependentDestructuredVariablesReferenceInDeclaration1.ts(35,14): error TS7022: 'f' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. +dependentDestructuredVariablesReferenceInDeclaration1.ts(58,14): error TS2451: Cannot redeclare block-scoped variable 'f'. +dependentDestructuredVariablesReferenceInDeclaration1.ts(58,17): error TS2451: Cannot redeclare block-scoped variable 'f'. + + +==== dependentDestructuredVariablesReferenceInDeclaration1.ts (27 errors) ==== + // https://github.com/microsoft/TypeScript/issues/62993 + + { + const { c, f }: string | number = { c: 0, f }; + ~~~~~~~~ +!!! error TS2322: Type '{ c: number; f: any; }' is not assignable to type 'string | number'. + ~ +!!! error TS2339: Property 'c' does not exist on type 'string | number'. + ~ +!!! error TS2339: Property 'f' does not exist on type 'string | number'. + ~ +!!! error TS7022: 'f' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. + ~ +!!! error TS2448: Block-scoped variable 'f' used before its declaration. +!!! related TS2728 dependentDestructuredVariablesReferenceInDeclaration1.ts:4:14: 'f' is declared here. + f; + } + + { + const { c, f }: string | number = { c: 0, f: () => f }; + ~~~~~~~~ +!!! error TS2322: Type '{ c: number; f: () => any; }' is not assignable to type 'string | number'. + ~ +!!! error TS2339: Property 'c' does not exist on type 'string | number'. + ~ +!!! error TS2339: Property 'f' does not exist on type 'string | number'. + f; + } + + { + const { c, f, g = f }: string | number = { c: 0, f: 0, g: 0 }; + ~~~~~~~~~~~~~~~ +!!! error TS2322: Type '{ c: number; f: number; g: number; }' is not assignable to type 'string | number'. + ~ +!!! error TS2339: Property 'c' does not exist on type 'string | number'. + ~ +!!! error TS2339: Property 'f' does not exist on type 'string | number'. + ~ +!!! error TS2339: Property 'g' does not exist on type 'string | number'. + f; + g; + } + + { + const { c, f, f }: string | number = { c: 0, f: 0 }; + ~~~~~~~~~~~ +!!! error TS2322: Type '{ c: number; f: number; }' is not assignable to type 'string | number'. + ~ +!!! error TS2339: Property 'c' does not exist on type 'string | number'. + ~ +!!! error TS2339: Property 'f' does not exist on type 'string | number'. + ~ +!!! error TS2451: Cannot redeclare block-scoped variable 'f'. + ~ +!!! error TS2339: Property 'f' does not exist on type 'string | number'. + ~ +!!! error TS2451: Cannot redeclare block-scoped variable 'f'. + f; + } + + { + const { c, f, f: g }: string | number = { c: 0, f: 0 }; + ~~~~~~~~~~~~~~ +!!! error TS2322: Type '{ c: number; f: number; }' is not assignable to type 'string | number'. + ~ +!!! error TS2339: Property 'c' does not exist on type 'string | number'. + ~ +!!! error TS2339: Property 'f' does not exist on type 'string | number'. + ~ +!!! error TS2339: Property 'f' does not exist on type 'string | number'. + g; + } + + { + const { c, f }: { c: 0; f: number } | { c: 1; f: string } = { c: 0, f }; + ~ +!!! error TS7022: 'f' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. + ~ +!!! error TS2448: Block-scoped variable 'f' used before its declaration. +!!! related TS2728 dependentDestructuredVariablesReferenceInDeclaration1.ts:30:14: 'f' is declared here. + f; + } + + { + const { c, f }: { c: 0; f: () => unknown } | { c: 1; f: string } = { + ~ +!!! error TS7022: 'f' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. + c: 0, + f: () => f, + }; + f; + } + + { + const { + c, + f, + g = f, + }: + | { c: 0; f: bigint; g?: bigint | number } + | { c: 1; f: number; g: string } = { + c: 0, + f: 10n, + }; + f; + g; + } + + { + const { c, f, f }: { c: 0; f: number } | { c: 1; f: string } = { c: 0, f: 0 }; + ~ +!!! error TS2451: Cannot redeclare block-scoped variable 'f'. + ~ +!!! error TS2451: Cannot redeclare block-scoped variable 'f'. + f; + } + + { + const { c, f, f: g }: { c: 0; f: number } | { c: 1; f: string } = { c: 0, f: 0 }; + g; + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..dd70a6b10cfe7 --- /dev/null +++ b/tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1(checkorder=typesfirst).symbols @@ -0,0 +1,175 @@ +//// [tests/cases/conformance/controlFlow/dependentDestructuredVariablesReferenceInDeclaration1.ts] //// + +=== dependentDestructuredVariablesReferenceInDeclaration1.ts === +// https://github.com/microsoft/TypeScript/issues/62993 + +{ + const { c, f }: string | number = { c: 0, f }; +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 3, 9)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 3, 12)) +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 3, 37)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 3, 43)) + + f; +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 3, 12)) +} + +{ + const { c, f }: string | number = { c: 0, f: () => f }; +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 8, 9)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 8, 12)) +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 8, 37)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 8, 43)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 8, 12)) + + f; +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 8, 12)) +} + +{ + const { c, f, g = f }: string | number = { c: 0, f: 0, g: 0 }; +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 13, 9)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 13, 12)) +>g : Symbol(g, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 13, 15)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 13, 12)) +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 13, 44)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 13, 50)) +>g : Symbol(g, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 13, 56)) + + f; +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 13, 12)) + + g; +>g : Symbol(g, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 13, 15)) +} + +{ + const { c, f, f }: string | number = { c: 0, f: 0 }; +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 19, 9)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 19, 12)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 19, 15)) +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 19, 40)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 19, 46)) + + f; +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 19, 12)) +} + +{ + const { c, f, f: g }: string | number = { c: 0, f: 0 }; +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 24, 9)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 24, 12)) +>g : Symbol(g, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 24, 15)) +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 24, 43)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 24, 49)) + + g; +>g : Symbol(g, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 24, 15)) +} + +{ + const { c, f }: { c: 0; f: number } | { c: 1; f: string } = { c: 0, f }; +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 29, 9)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 29, 12)) +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 29, 19)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 29, 25)) +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 29, 41)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 29, 47)) +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 29, 63)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 29, 69)) + + f; +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 29, 12)) +} + +{ + const { c, f }: { c: 0; f: () => unknown } | { c: 1; f: string } = { +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 34, 9)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 34, 12)) +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 34, 19)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 34, 25)) +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 34, 48)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 34, 54)) + + c: 0, +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 34, 70)) + + f: () => f, +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 35, 9)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 34, 12)) + + }; + f; +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 34, 12)) +} + +{ + const { + c, +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 42, 9)) + + f, +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 43, 6)) + + g = f, +>g : Symbol(g, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 44, 6)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 43, 6)) + + }: + | { c: 0; f: bigint; g?: bigint | number } +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 47, 7)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 47, 13)) +>g : Symbol(g, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 47, 24)) + + | { c: 1; f: number; g: string } = { +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 48, 7)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 48, 13)) +>g : Symbol(g, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 48, 24)) + + c: 0, +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 48, 40)) + + f: 10n, +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 49, 9)) + + }; + f; +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 43, 6)) + + g; +>g : Symbol(g, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 44, 6)) +} + +{ + const { c, f, f }: { c: 0; f: number } | { c: 1; f: string } = { c: 0, f: 0 }; +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 57, 9)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 57, 12)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 57, 15)) +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 57, 22)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 57, 28)) +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 57, 44)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 57, 50)) +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 57, 66)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 57, 72)) + + f; +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 57, 12)) +} + +{ + const { c, f, f: g }: { c: 0; f: number } | { c: 1; f: string } = { c: 0, f: 0 }; +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 62, 9)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 62, 12)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 62, 31), Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 62, 53)) +>g : Symbol(g, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 62, 15)) +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 62, 25)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 62, 31)) +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 62, 47)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 62, 53)) +>c : Symbol(c, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 62, 69)) +>f : Symbol(f, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 62, 75)) + + g; +>g : Symbol(g, Decl(dependentDestructuredVariablesReferenceInDeclaration1.ts, 62, 15)) +} + diff --git a/tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1(checkorder=typesfirst).types new file mode 100644 index 0000000000000..fda8b5b052297 --- /dev/null +++ b/tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1(checkorder=typesfirst).types @@ -0,0 +1,205 @@ +//// [tests/cases/conformance/controlFlow/dependentDestructuredVariablesReferenceInDeclaration1.ts] //// + +=== dependentDestructuredVariablesReferenceInDeclaration1.ts === +// https://github.com/microsoft/TypeScript/issues/62993 + +{ + const { c, f }: string | number = { c: 0, f }; +>c : any +>f : any +>{ c: 0, f } : { c: number; f: any; } +>c : number +>0 : 0 +>f : any + + f; +>f : any +} + +{ + const { c, f }: string | number = { c: 0, f: () => f }; +>c : any +>f : any +>{ c: 0, f: () => f } : { c: number; f: () => any; } +>c : number +>0 : 0 +>f : () => any +>() => f : () => any +>f : any + + f; +>f : any +} + +{ + const { c, f, g = f }: string | number = { c: 0, f: 0, g: 0 }; +>c : any +>f : any +>g : any +>f : any +>{ c: 0, f: 0, g: 0 } : { c: number; f: number; g: number; } +>c : number +>0 : 0 +>f : number +>0 : 0 +>g : number +>0 : 0 + + f; +>f : any + + g; +>g : any +} + +{ + const { c, f, f }: string | number = { c: 0, f: 0 }; +>c : any +>f : any +>f : any +>{ c: 0, f: 0 } : { c: number; f: number; } +>c : number +>0 : 0 +>f : number +>0 : 0 + + f; +>f : any +} + +{ + const { c, f, f: g }: string | number = { c: 0, f: 0 }; +>c : any +>f : any +>f : any +>g : any +>{ c: 0, f: 0 } : { c: number; f: number; } +>c : number +>0 : 0 +>f : number +>0 : 0 + + g; +>g : any +} + +{ + const { c, f }: { c: 0; f: number } | { c: 1; f: string } = { c: 0, f }; +>c : 0 | 1 +>f : any +>c : 0 +>f : number +>c : 1 +>f : string +>{ c: 0, f } : { c: 0; f: any; } +>c : 0 +>0 : 0 +>f : any + + f; +>f : string | number +} + +{ + const { c, f }: { c: 0; f: () => unknown } | { c: 1; f: string } = { +>c : 0 | 1 +>f : any +>c : 0 +>f : () => unknown +>c : 1 +>f : string +>{ c: 0, f: () => f, } : { c: 0; f: () => string | (() => unknown); } + + c: 0, +>c : 0 +>0 : 0 + + f: () => f, +>f : () => string | (() => unknown) +>() => f : () => string | (() => unknown) +>f : string | (() => unknown) + + }; + f; +>f : () => unknown +} + +{ + const { + c, +>c : 0 | 1 + + f, +>f : number | bigint + + g = f, +>g : string | number | bigint +>f : number | bigint + + }: + | { c: 0; f: bigint; g?: bigint | number } +>c : 0 +>f : bigint +>g : number | bigint | undefined + + | { c: 1; f: number; g: string } = { +>c : 1 +>f : number +>g : string +>{ c: 0, f: 10n, } : { c: 0; f: bigint; } + + c: 0, +>c : 0 +>0 : 0 + + f: 10n, +>f : bigint +>10n : 10n + + }; + f; +>f : bigint + + g; +>g : string | number | bigint +} + +{ + const { c, f, f }: { c: 0; f: number } | { c: 1; f: string } = { c: 0, f: 0 }; +>c : 0 | 1 +>f : string | number +>f : string | number +>c : 0 +>f : number +>c : 1 +>f : string +>{ c: 0, f: 0 } : { c: 0; f: number; } +>c : 0 +>0 : 0 +>f : number +>0 : 0 + + f; +>f : number +} + +{ + const { c, f, f: g }: { c: 0; f: number } | { c: 1; f: string } = { c: 0, f: 0 }; +>c : 0 | 1 +>f : string | number +>f : any +>g : string | number +>c : 0 +>f : number +>c : 1 +>f : string +>{ c: 0, f: 0 } : { c: 0; f: number; } +>c : 0 +>0 : 0 +>f : number +>0 : 0 + + g; +>g : number +} + diff --git a/tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers.js b/tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=default).js similarity index 100% rename from tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers.js rename to tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=default).js diff --git a/tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers.symbols b/tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=default).symbols similarity index 100% rename from tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers.symbols rename to tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=default).symbols diff --git a/tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers.types b/tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=default).types similarity index 100% rename from tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers.types rename to tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=default).types diff --git a/tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..ee3b06edc611c --- /dev/null +++ b/tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=typesfirst).errors.txt @@ -0,0 +1,75 @@ +destructuringWithLiteralInitializers.ts(37,20): error TS2339: Property 'x' does not exist on type '{}'. +destructuringWithLiteralInitializers.ts(37,27): error TS2339: Property 'y' does not exist on type '{}'. + + +==== destructuringWithLiteralInitializers.ts (2 errors) ==== + // (arg: { x: any, y: any }) => void + function f1({ x, y }) { } + f1({ x: 1, y: 1 }); + + // (arg: { x: any, y?: number }) => void + function f2({ x, y = 0 }) { } + f2({ x: 1 }); + f2({ x: 1, y: 1 }); + + // (arg: { x?: number, y?: number }) => void + function f3({ x = 0, y = 0 }) { } + f3({}); + f3({ x: 1 }); + f3({ y: 1 }); + f3({ x: 1, y: 1 }); + + // (arg?: { x: number, y: number }) => void + function f4({ x, y } = { x: 0, y: 0 }) { } + f4(); + f4({ x: 1, y: 1 }); + + // (arg?: { x: number, y?: number }) => void + function f5({ x, y = 0 } = { x: 0 }) { } + f5(); + f5({ x: 1 }); + f5({ x: 1, y: 1 }); + + // (arg?: { x?: number, y?: number }) => void + function f6({ x = 0, y = 0 } = {}) { } + f6(); + f6({}); + f6({ x: 1 }); + f6({ y: 1 }); + f6({ x: 1, y: 1 }); + + // (arg?: { a: { x?: number, y?: number } }) => void + function f7({ a: { x = 0, y = 0 } } = { a: {} }) { } + ~ +!!! error TS2339: Property 'x' does not exist on type '{}'. + ~ +!!! error TS2339: Property 'y' does not exist on type '{}'. + f7(); + f7({ a: {} }); + f7({ a: { x: 1 } }); + f7({ a: { y: 1 } }); + f7({ a: { x: 1, y: 1 } }); + + // (arg: [any, any]) => void + function g1([x, y]) { } + g1([1, 1]); + + // (arg: [number, number]) => void + function g2([x = 0, y = 0]) { } + g2([1, 1]); + + // (arg?: [number, number]) => void + function g3([x, y] = [0, 0]) { } + g3(); + g3([1, 1]); + + // (arg?: [number, number]) => void + function g4([x, y = 0] = [0]) { } + g4(); + g4([1, 1]); + + // (arg?: [number, number]) => void + function g5([x = 0, y = 0] = []) { } + g5(); + g5([1, 1]); + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=typesfirst).js b/tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=typesfirst).js new file mode 100644 index 0000000000000..c76356d188d89 --- /dev/null +++ b/tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=typesfirst).js @@ -0,0 +1,126 @@ +//// [tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers.ts] //// + +//// [destructuringWithLiteralInitializers.ts] +// (arg: { x: any, y: any }) => void +function f1({ x, y }) { } +f1({ x: 1, y: 1 }); + +// (arg: { x: any, y?: number }) => void +function f2({ x, y = 0 }) { } +f2({ x: 1 }); +f2({ x: 1, y: 1 }); + +// (arg: { x?: number, y?: number }) => void +function f3({ x = 0, y = 0 }) { } +f3({}); +f3({ x: 1 }); +f3({ y: 1 }); +f3({ x: 1, y: 1 }); + +// (arg?: { x: number, y: number }) => void +function f4({ x, y } = { x: 0, y: 0 }) { } +f4(); +f4({ x: 1, y: 1 }); + +// (arg?: { x: number, y?: number }) => void +function f5({ x, y = 0 } = { x: 0 }) { } +f5(); +f5({ x: 1 }); +f5({ x: 1, y: 1 }); + +// (arg?: { x?: number, y?: number }) => void +function f6({ x = 0, y = 0 } = {}) { } +f6(); +f6({}); +f6({ x: 1 }); +f6({ y: 1 }); +f6({ x: 1, y: 1 }); + +// (arg?: { a: { x?: number, y?: number } }) => void +function f7({ a: { x = 0, y = 0 } } = { a: {} }) { } +f7(); +f7({ a: {} }); +f7({ a: { x: 1 } }); +f7({ a: { y: 1 } }); +f7({ a: { x: 1, y: 1 } }); + +// (arg: [any, any]) => void +function g1([x, y]) { } +g1([1, 1]); + +// (arg: [number, number]) => void +function g2([x = 0, y = 0]) { } +g2([1, 1]); + +// (arg?: [number, number]) => void +function g3([x, y] = [0, 0]) { } +g3(); +g3([1, 1]); + +// (arg?: [number, number]) => void +function g4([x, y = 0] = [0]) { } +g4(); +g4([1, 1]); + +// (arg?: [number, number]) => void +function g5([x = 0, y = 0] = []) { } +g5(); +g5([1, 1]); + + +//// [destructuringWithLiteralInitializers.js] +"use strict"; +// (arg: { x: any, y: any }) => void +function f1({ x, y }) { } +f1({ x: 1, y: 1 }); +// (arg: { x: any, y?: number }) => void +function f2({ x, y = 0 }) { } +f2({ x: 1 }); +f2({ x: 1, y: 1 }); +// (arg: { x?: number, y?: number }) => void +function f3({ x = 0, y = 0 }) { } +f3({}); +f3({ x: 1 }); +f3({ y: 1 }); +f3({ x: 1, y: 1 }); +// (arg?: { x: number, y: number }) => void +function f4({ x, y } = { x: 0, y: 0 }) { } +f4(); +f4({ x: 1, y: 1 }); +// (arg?: { x: number, y?: number }) => void +function f5({ x, y = 0 } = { x: 0 }) { } +f5(); +f5({ x: 1 }); +f5({ x: 1, y: 1 }); +// (arg?: { x?: number, y?: number }) => void +function f6({ x = 0, y = 0 } = {}) { } +f6(); +f6({}); +f6({ x: 1 }); +f6({ y: 1 }); +f6({ x: 1, y: 1 }); +// (arg?: { a: { x?: number, y?: number } }) => void +function f7({ a: { x = 0, y = 0 } } = { a: {} }) { } +f7(); +f7({ a: {} }); +f7({ a: { x: 1 } }); +f7({ a: { y: 1 } }); +f7({ a: { x: 1, y: 1 } }); +// (arg: [any, any]) => void +function g1([x, y]) { } +g1([1, 1]); +// (arg: [number, number]) => void +function g2([x = 0, y = 0]) { } +g2([1, 1]); +// (arg?: [number, number]) => void +function g3([x, y] = [0, 0]) { } +g3(); +g3([1, 1]); +// (arg?: [number, number]) => void +function g4([x, y = 0] = [0]) { } +g4(); +g4([1, 1]); +// (arg?: [number, number]) => void +function g5([x = 0, y = 0] = []) { } +g5(); +g5([1, 1]); diff --git a/tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..17561c8c14d7b --- /dev/null +++ b/tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=typesfirst).symbols @@ -0,0 +1,196 @@ +//// [tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers.ts] //// + +=== destructuringWithLiteralInitializers.ts === +// (arg: { x: any, y: any }) => void +function f1({ x, y }) { } +>f1 : Symbol(f1, Decl(destructuringWithLiteralInitializers.ts, 0, 0)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers.ts, 1, 13)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers.ts, 1, 16)) + +f1({ x: 1, y: 1 }); +>f1 : Symbol(f1, Decl(destructuringWithLiteralInitializers.ts, 0, 0)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers.ts, 2, 4)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers.ts, 2, 10)) + +// (arg: { x: any, y?: number }) => void +function f2({ x, y = 0 }) { } +>f2 : Symbol(f2, Decl(destructuringWithLiteralInitializers.ts, 2, 19)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers.ts, 5, 13)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers.ts, 5, 16)) + +f2({ x: 1 }); +>f2 : Symbol(f2, Decl(destructuringWithLiteralInitializers.ts, 2, 19)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers.ts, 6, 4)) + +f2({ x: 1, y: 1 }); +>f2 : Symbol(f2, Decl(destructuringWithLiteralInitializers.ts, 2, 19)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers.ts, 7, 4)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers.ts, 7, 10)) + +// (arg: { x?: number, y?: number }) => void +function f3({ x = 0, y = 0 }) { } +>f3 : Symbol(f3, Decl(destructuringWithLiteralInitializers.ts, 7, 19)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers.ts, 10, 13)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers.ts, 10, 20)) + +f3({}); +>f3 : Symbol(f3, Decl(destructuringWithLiteralInitializers.ts, 7, 19)) + +f3({ x: 1 }); +>f3 : Symbol(f3, Decl(destructuringWithLiteralInitializers.ts, 7, 19)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers.ts, 12, 4)) + +f3({ y: 1 }); +>f3 : Symbol(f3, Decl(destructuringWithLiteralInitializers.ts, 7, 19)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers.ts, 13, 4)) + +f3({ x: 1, y: 1 }); +>f3 : Symbol(f3, Decl(destructuringWithLiteralInitializers.ts, 7, 19)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers.ts, 14, 4)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers.ts, 14, 10)) + +// (arg?: { x: number, y: number }) => void +function f4({ x, y } = { x: 0, y: 0 }) { } +>f4 : Symbol(f4, Decl(destructuringWithLiteralInitializers.ts, 14, 19)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers.ts, 17, 13)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers.ts, 17, 16)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers.ts, 17, 24)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers.ts, 17, 30)) + +f4(); +>f4 : Symbol(f4, Decl(destructuringWithLiteralInitializers.ts, 14, 19)) + +f4({ x: 1, y: 1 }); +>f4 : Symbol(f4, Decl(destructuringWithLiteralInitializers.ts, 14, 19)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers.ts, 19, 4)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers.ts, 19, 10)) + +// (arg?: { x: number, y?: number }) => void +function f5({ x, y = 0 } = { x: 0 }) { } +>f5 : Symbol(f5, Decl(destructuringWithLiteralInitializers.ts, 19, 19)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers.ts, 22, 13)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers.ts, 22, 16)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers.ts, 22, 28)) + +f5(); +>f5 : Symbol(f5, Decl(destructuringWithLiteralInitializers.ts, 19, 19)) + +f5({ x: 1 }); +>f5 : Symbol(f5, Decl(destructuringWithLiteralInitializers.ts, 19, 19)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers.ts, 24, 4)) + +f5({ x: 1, y: 1 }); +>f5 : Symbol(f5, Decl(destructuringWithLiteralInitializers.ts, 19, 19)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers.ts, 25, 4)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers.ts, 25, 10)) + +// (arg?: { x?: number, y?: number }) => void +function f6({ x = 0, y = 0 } = {}) { } +>f6 : Symbol(f6, Decl(destructuringWithLiteralInitializers.ts, 25, 19)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers.ts, 28, 13)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers.ts, 28, 20)) + +f6(); +>f6 : Symbol(f6, Decl(destructuringWithLiteralInitializers.ts, 25, 19)) + +f6({}); +>f6 : Symbol(f6, Decl(destructuringWithLiteralInitializers.ts, 25, 19)) + +f6({ x: 1 }); +>f6 : Symbol(f6, Decl(destructuringWithLiteralInitializers.ts, 25, 19)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers.ts, 31, 4)) + +f6({ y: 1 }); +>f6 : Symbol(f6, Decl(destructuringWithLiteralInitializers.ts, 25, 19)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers.ts, 32, 4)) + +f6({ x: 1, y: 1 }); +>f6 : Symbol(f6, Decl(destructuringWithLiteralInitializers.ts, 25, 19)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers.ts, 33, 4)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers.ts, 33, 10)) + +// (arg?: { a: { x?: number, y?: number } }) => void +function f7({ a: { x = 0, y = 0 } } = { a: {} }) { } +>f7 : Symbol(f7, Decl(destructuringWithLiteralInitializers.ts, 33, 19)) +>a : Symbol(a, Decl(destructuringWithLiteralInitializers.ts, 36, 39)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers.ts, 36, 18)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers.ts, 36, 25)) +>a : Symbol(a, Decl(destructuringWithLiteralInitializers.ts, 36, 39)) + +f7(); +>f7 : Symbol(f7, Decl(destructuringWithLiteralInitializers.ts, 33, 19)) + +f7({ a: {} }); +>f7 : Symbol(f7, Decl(destructuringWithLiteralInitializers.ts, 33, 19)) +>a : Symbol(a, Decl(destructuringWithLiteralInitializers.ts, 38, 4)) + +f7({ a: { x: 1 } }); +>f7 : Symbol(f7, Decl(destructuringWithLiteralInitializers.ts, 33, 19)) +>a : Symbol(a, Decl(destructuringWithLiteralInitializers.ts, 39, 4)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers.ts, 39, 9)) + +f7({ a: { y: 1 } }); +>f7 : Symbol(f7, Decl(destructuringWithLiteralInitializers.ts, 33, 19)) +>a : Symbol(a, Decl(destructuringWithLiteralInitializers.ts, 40, 4)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers.ts, 40, 9)) + +f7({ a: { x: 1, y: 1 } }); +>f7 : Symbol(f7, Decl(destructuringWithLiteralInitializers.ts, 33, 19)) +>a : Symbol(a, Decl(destructuringWithLiteralInitializers.ts, 41, 4)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers.ts, 41, 9)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers.ts, 41, 15)) + +// (arg: [any, any]) => void +function g1([x, y]) { } +>g1 : Symbol(g1, Decl(destructuringWithLiteralInitializers.ts, 41, 26)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers.ts, 44, 13)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers.ts, 44, 15)) + +g1([1, 1]); +>g1 : Symbol(g1, Decl(destructuringWithLiteralInitializers.ts, 41, 26)) + +// (arg: [number, number]) => void +function g2([x = 0, y = 0]) { } +>g2 : Symbol(g2, Decl(destructuringWithLiteralInitializers.ts, 45, 11)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers.ts, 48, 13)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers.ts, 48, 19)) + +g2([1, 1]); +>g2 : Symbol(g2, Decl(destructuringWithLiteralInitializers.ts, 45, 11)) + +// (arg?: [number, number]) => void +function g3([x, y] = [0, 0]) { } +>g3 : Symbol(g3, Decl(destructuringWithLiteralInitializers.ts, 49, 11)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers.ts, 52, 13)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers.ts, 52, 15)) + +g3(); +>g3 : Symbol(g3, Decl(destructuringWithLiteralInitializers.ts, 49, 11)) + +g3([1, 1]); +>g3 : Symbol(g3, Decl(destructuringWithLiteralInitializers.ts, 49, 11)) + +// (arg?: [number, number]) => void +function g4([x, y = 0] = [0]) { } +>g4 : Symbol(g4, Decl(destructuringWithLiteralInitializers.ts, 54, 11)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers.ts, 57, 13)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers.ts, 57, 15)) + +g4(); +>g4 : Symbol(g4, Decl(destructuringWithLiteralInitializers.ts, 54, 11)) + +g4([1, 1]); +>g4 : Symbol(g4, Decl(destructuringWithLiteralInitializers.ts, 54, 11)) + +// (arg?: [number, number]) => void +function g5([x = 0, y = 0] = []) { } +>g5 : Symbol(g5, Decl(destructuringWithLiteralInitializers.ts, 59, 11)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers.ts, 62, 13)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers.ts, 62, 19)) + +g5(); +>g5 : Symbol(g5, Decl(destructuringWithLiteralInitializers.ts, 59, 11)) + +g5([1, 1]); +>g5 : Symbol(g5, Decl(destructuringWithLiteralInitializers.ts, 59, 11)) + diff --git a/tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=typesfirst).types new file mode 100644 index 0000000000000..45f5edceff50e --- /dev/null +++ b/tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=typesfirst).types @@ -0,0 +1,312 @@ +//// [tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers.ts] //// + +=== destructuringWithLiteralInitializers.ts === +// (arg: { x: any, y: any }) => void +function f1({ x, y }) { } +>f1 : ({ x, y }: { x: any; y: any; }) => void +>x : any +>y : any + +f1({ x: 1, y: 1 }); +>f1({ x: 1, y: 1 }) : void +>f1 : ({ x, y }: { x: any; y: any; }) => void +>{ x: 1, y: 1 } : { x: number; y: number; } +>x : number +>1 : 1 +>y : number +>1 : 1 + +// (arg: { x: any, y?: number }) => void +function f2({ x, y = 0 }) { } +>f2 : ({ x, y }: { x: any; y?: number; }) => void +>x : any +>y : number +>0 : 0 + +f2({ x: 1 }); +>f2({ x: 1 }) : void +>f2 : ({ x, y }: { x: any; y?: number; }) => void +>{ x: 1 } : { x: number; } +>x : number +>1 : 1 + +f2({ x: 1, y: 1 }); +>f2({ x: 1, y: 1 }) : void +>f2 : ({ x, y }: { x: any; y?: number; }) => void +>{ x: 1, y: 1 } : { x: number; y: number; } +>x : number +>1 : 1 +>y : number +>1 : 1 + +// (arg: { x?: number, y?: number }) => void +function f3({ x = 0, y = 0 }) { } +>f3 : ({ x, y }: { x?: number; y?: number; }) => void +>x : number +>0 : 0 +>y : number +>0 : 0 + +f3({}); +>f3({}) : void +>f3 : ({ x, y }: { x?: number; y?: number; }) => void +>{} : {} + +f3({ x: 1 }); +>f3({ x: 1 }) : void +>f3 : ({ x, y }: { x?: number; y?: number; }) => void +>{ x: 1 } : { x: number; } +>x : number +>1 : 1 + +f3({ y: 1 }); +>f3({ y: 1 }) : void +>f3 : ({ x, y }: { x?: number; y?: number; }) => void +>{ y: 1 } : { y: number; } +>y : number +>1 : 1 + +f3({ x: 1, y: 1 }); +>f3({ x: 1, y: 1 }) : void +>f3 : ({ x, y }: { x?: number; y?: number; }) => void +>{ x: 1, y: 1 } : { x: number; y: number; } +>x : number +>1 : 1 +>y : number +>1 : 1 + +// (arg?: { x: number, y: number }) => void +function f4({ x, y } = { x: 0, y: 0 }) { } +>f4 : ({ x, y }?: { x: number; y: number; }) => void +>x : number +>y : number +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>0 : 0 +>y : number +>0 : 0 + +f4(); +>f4() : void +>f4 : ({ x, y }?: { x: number; y: number; }) => void + +f4({ x: 1, y: 1 }); +>f4({ x: 1, y: 1 }) : void +>f4 : ({ x, y }?: { x: number; y: number; }) => void +>{ x: 1, y: 1 } : { x: number; y: number; } +>x : number +>1 : 1 +>y : number +>1 : 1 + +// (arg?: { x: number, y?: number }) => void +function f5({ x, y = 0 } = { x: 0 }) { } +>f5 : ({ x, y }?: { x: number; y?: number; }) => void +>x : number +>y : number +>0 : 0 +>{ x: 0 } : { x: number; } +>x : number +>0 : 0 + +f5(); +>f5() : void +>f5 : ({ x, y }?: { x: number; y?: number; }) => void + +f5({ x: 1 }); +>f5({ x: 1 }) : void +>f5 : ({ x, y }?: { x: number; y?: number; }) => void +>{ x: 1 } : { x: number; } +>x : number +>1 : 1 + +f5({ x: 1, y: 1 }); +>f5({ x: 1, y: 1 }) : void +>f5 : ({ x, y }?: { x: number; y?: number; }) => void +>{ x: 1, y: 1 } : { x: number; y: number; } +>x : number +>1 : 1 +>y : number +>1 : 1 + +// (arg?: { x?: number, y?: number }) => void +function f6({ x = 0, y = 0 } = {}) { } +>f6 : ({ x, y }?: { x?: number; y?: number; }) => void +>x : number +>0 : 0 +>y : number +>0 : 0 +>{} : {} + +f6(); +>f6() : void +>f6 : ({ x, y }?: { x?: number; y?: number; }) => void + +f6({}); +>f6({}) : void +>f6 : ({ x, y }?: { x?: number; y?: number; }) => void +>{} : {} + +f6({ x: 1 }); +>f6({ x: 1 }) : void +>f6 : ({ x, y }?: { x?: number; y?: number; }) => void +>{ x: 1 } : { x: number; } +>x : number +>1 : 1 + +f6({ y: 1 }); +>f6({ y: 1 }) : void +>f6 : ({ x, y }?: { x?: number; y?: number; }) => void +>{ y: 1 } : { y: number; } +>y : number +>1 : 1 + +f6({ x: 1, y: 1 }); +>f6({ x: 1, y: 1 }) : void +>f6 : ({ x, y }?: { x?: number; y?: number; }) => void +>{ x: 1, y: 1 } : { x: number; y: number; } +>x : number +>1 : 1 +>y : number +>1 : 1 + +// (arg?: { a: { x?: number, y?: number } }) => void +function f7({ a: { x = 0, y = 0 } } = { a: {} }) { } +>f7 : ({ a: { x, y } }?: { a: {}; }) => void +>a : any +>x : any +>0 : 0 +>y : any +>0 : 0 +>{ a: {} } : { a: {}; } +>a : {} +>{} : {} + +f7(); +>f7() : void +>f7 : ({ a: { x, y } }?: { a: {}; }) => void + +f7({ a: {} }); +>f7({ a: {} }) : void +>f7 : ({ a: { x, y } }?: { a: {}; }) => void +>{ a: {} } : { a: {}; } +>a : {} +>{} : {} + +f7({ a: { x: 1 } }); +>f7({ a: { x: 1 } }) : void +>f7 : ({ a: { x, y } }?: { a: {}; }) => void +>{ a: { x: 1 } } : { a: { x: number; }; } +>a : { x: number; } +>{ x: 1 } : { x: number; } +>x : number +>1 : 1 + +f7({ a: { y: 1 } }); +>f7({ a: { y: 1 } }) : void +>f7 : ({ a: { x, y } }?: { a: {}; }) => void +>{ a: { y: 1 } } : { a: { y: number; }; } +>a : { y: number; } +>{ y: 1 } : { y: number; } +>y : number +>1 : 1 + +f7({ a: { x: 1, y: 1 } }); +>f7({ a: { x: 1, y: 1 } }) : void +>f7 : ({ a: { x, y } }?: { a: {}; }) => void +>{ a: { x: 1, y: 1 } } : { a: { x: number; y: number; }; } +>a : { x: number; y: number; } +>{ x: 1, y: 1 } : { x: number; y: number; } +>x : number +>1 : 1 +>y : number +>1 : 1 + +// (arg: [any, any]) => void +function g1([x, y]) { } +>g1 : ([x, y]: [any, any]) => void +>x : any +>y : any + +g1([1, 1]); +>g1([1, 1]) : void +>g1 : ([x, y]: [any, any]) => void +>[1, 1] : [number, number] +>1 : 1 +>1 : 1 + +// (arg: [number, number]) => void +function g2([x = 0, y = 0]) { } +>g2 : ([x, y]: [number?, number?]) => void +>x : number +>0 : 0 +>y : number +>0 : 0 + +g2([1, 1]); +>g2([1, 1]) : void +>g2 : ([x, y]: [number?, number?]) => void +>[1, 1] : [number, number] +>1 : 1 +>1 : 1 + +// (arg?: [number, number]) => void +function g3([x, y] = [0, 0]) { } +>g3 : ([x, y]?: [number, number]) => void +>x : number +>y : number +>[0, 0] : [number, number] +>0 : 0 +>0 : 0 + +g3(); +>g3() : void +>g3 : ([x, y]?: [number, number]) => void + +g3([1, 1]); +>g3([1, 1]) : void +>g3 : ([x, y]?: [number, number]) => void +>[1, 1] : [number, number] +>1 : 1 +>1 : 1 + +// (arg?: [number, number]) => void +function g4([x, y = 0] = [0]) { } +>g4 : ([x, y]?: [number, number?]) => void +>x : number +>y : number +>0 : 0 +>[0] : [number] +>0 : 0 + +g4(); +>g4() : void +>g4 : ([x, y]?: [number, number?]) => void + +g4([1, 1]); +>g4([1, 1]) : void +>g4 : ([x, y]?: [number, number?]) => void +>[1, 1] : [number, number] +>1 : 1 +>1 : 1 + +// (arg?: [number, number]) => void +function g5([x = 0, y = 0] = []) { } +>g5 : ([x, y]?: [number?, number?]) => void +>x : number +>0 : 0 +>y : number +>0 : 0 +>[] : [] + +g5(); +>g5() : void +>g5 : ([x, y]?: [number?, number?]) => void + +g5([1, 1]); +>g5([1, 1]) : void +>g5 : ([x, y]?: [number?, number?]) => void +>[1, 1] : [number, number] +>1 : 1 +>1 : 1 + diff --git a/tsc/testdata/baselines/reference/conformance/importTag13.errors.txt b/tsc/testdata/baselines/reference/conformance/importTag13(checkorder=default).errors.txt similarity index 100% rename from tsc/testdata/baselines/reference/conformance/importTag13.errors.txt rename to tsc/testdata/baselines/reference/conformance/importTag13(checkorder=default).errors.txt diff --git a/tsc/testdata/baselines/reference/conformance/importTag13.symbols b/tsc/testdata/baselines/reference/conformance/importTag13(checkorder=default).symbols similarity index 100% rename from tsc/testdata/baselines/reference/conformance/importTag13.symbols rename to tsc/testdata/baselines/reference/conformance/importTag13(checkorder=default).symbols diff --git a/tsc/testdata/baselines/reference/conformance/importTag13.types b/tsc/testdata/baselines/reference/conformance/importTag13(checkorder=default).types similarity index 100% rename from tsc/testdata/baselines/reference/conformance/importTag13.types rename to tsc/testdata/baselines/reference/conformance/importTag13(checkorder=default).types diff --git a/tsc/testdata/baselines/reference/conformance/importTag13(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/conformance/importTag13(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..de660063858df --- /dev/null +++ b/tsc/testdata/baselines/reference/conformance/importTag13(checkorder=typesfirst).errors.txt @@ -0,0 +1,19 @@ +/foo.js(1,15): error TS1005: 'from' expected. +/foo.js(1,15): error TS1141: String literal expected. +/foo.js(1,25): error TS2307: Cannot find module 'types' or its corresponding type declarations. + + +==== /foo.js (3 errors) ==== + /** @import x = require("types") */ + ~ +!!! error TS1005: 'from' expected. + ~~~~~~~~~~~~~~~~~~ +!!! error TS1141: String literal expected. + ~~~~~~~ +!!! error TS2307: Cannot find module 'types' or its corresponding type declarations. + +==== /types.ts (0 errors) ==== + export interface Foo { + a: number; + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/conformance/importTag13(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/conformance/importTag13(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..fbc59963b3da9 --- /dev/null +++ b/tsc/testdata/baselines/reference/conformance/importTag13(checkorder=typesfirst).symbols @@ -0,0 +1,6 @@ +//// [tests/cases/conformance/jsdoc/importTag13.ts] //// + +=== /foo.js === + +/** @import x = require("types") */ + diff --git a/tsc/testdata/baselines/reference/conformance/importTag13(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/conformance/importTag13(checkorder=typesfirst).types new file mode 100644 index 0000000000000..fbc59963b3da9 --- /dev/null +++ b/tsc/testdata/baselines/reference/conformance/importTag13(checkorder=typesfirst).types @@ -0,0 +1,6 @@ +//// [tests/cases/conformance/jsdoc/importTag13.ts] //// + +=== /foo.js === + +/** @import x = require("types") */ + diff --git a/tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing.errors.txt b/tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=default).errors.txt similarity index 100% rename from tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing.errors.txt rename to tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=default).errors.txt diff --git a/tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing.js b/tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=default).js similarity index 100% rename from tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing.js rename to tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=default).js diff --git a/tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing.symbols b/tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=default).symbols similarity index 100% rename from tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing.symbols rename to tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=default).symbols diff --git a/tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing.types b/tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=default).types similarity index 100% rename from tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing.types rename to tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=default).types diff --git a/tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..d4d3aede55faf --- /dev/null +++ b/tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=typesfirst).errors.txt @@ -0,0 +1,23 @@ +privateNameNestedClassFieldShadowing.ts(7,31): error TS18014: The property '#x' cannot be accessed on type 'Base' within this class because it is shadowed by another private identifier with the same spelling. + + +==== privateNameNestedClassFieldShadowing.ts (1 errors) ==== + class Base { + #x; + constructor() { + class Derived { + #x; + testBase(x: Base) { + console.log(x.#x); + ~~ +!!! error TS18014: The property '#x' cannot be accessed on type 'Base' within this class because it is shadowed by another private identifier with the same spelling. +!!! related TS18018 privateNameNestedClassFieldShadowing.ts:2:5: The declaration of '#x' that you probably intended to use is defined here +!!! related TS18017 privateNameNestedClassFieldShadowing.ts:5:13: The shadowing declaration of '#x' is defined here + } + testDerived(x: Derived) { + console.log(x.#x); + } + } + } + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=typesfirst).js b/tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=typesfirst).js new file mode 100644 index 0000000000000..4e0c843d1ebc9 --- /dev/null +++ b/tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=typesfirst).js @@ -0,0 +1,46 @@ +//// [tests/cases/conformance/classes/members/privateNames/privateNameNestedClassFieldShadowing.ts] //// + +//// [privateNameNestedClassFieldShadowing.ts] +class Base { + #x; + constructor() { + class Derived { + #x; + testBase(x: Base) { + console.log(x.#x); + } + testDerived(x: Derived) { + console.log(x.#x); + } + } + } +} + + +//// [privateNameNestedClassFieldShadowing.js] +"use strict"; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _Base_x; +class Base { + constructor() { + var _Derived_x; + _Base_x.set(this, void 0); + class Derived { + constructor() { + _Derived_x.set(this, void 0); + } + testBase(x) { + console.log(__classPrivateFieldGet(x, _Derived_x, "f")); + } + testDerived(x) { + console.log(__classPrivateFieldGet(x, _Derived_x, "f")); + } + } + _Derived_x = new WeakMap(); + } +} +_Base_x = new WeakMap(); diff --git a/tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..33cee0bc25f14 --- /dev/null +++ b/tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=typesfirst).symbols @@ -0,0 +1,43 @@ +//// [tests/cases/conformance/classes/members/privateNames/privateNameNestedClassFieldShadowing.ts] //// + +=== privateNameNestedClassFieldShadowing.ts === +class Base { +>Base : Symbol(Base, Decl(privateNameNestedClassFieldShadowing.ts, 0, 0)) + + #x; +>#x : Symbol(Base.#x, Decl(privateNameNestedClassFieldShadowing.ts, 0, 12)) + + constructor() { + class Derived { +>Derived : Symbol(Derived, Decl(privateNameNestedClassFieldShadowing.ts, 2, 19)) + + #x; +>#x : Symbol(Derived.#x, Decl(privateNameNestedClassFieldShadowing.ts, 3, 23)) + + testBase(x: Base) { +>testBase : Symbol(Derived.testBase, Decl(privateNameNestedClassFieldShadowing.ts, 4, 15)) +>x : Symbol(x, Decl(privateNameNestedClassFieldShadowing.ts, 5, 21)) +>Base : Symbol(Base, Decl(privateNameNestedClassFieldShadowing.ts, 0, 0)) + + console.log(x.#x); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>x : Symbol(x, Decl(privateNameNestedClassFieldShadowing.ts, 5, 21)) + } + testDerived(x: Derived) { +>testDerived : Symbol(Derived.testDerived, Decl(privateNameNestedClassFieldShadowing.ts, 7, 13)) +>x : Symbol(x, Decl(privateNameNestedClassFieldShadowing.ts, 8, 24)) +>Derived : Symbol(Derived, Decl(privateNameNestedClassFieldShadowing.ts, 2, 19)) + + console.log(x.#x); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>x.#x : Symbol(Derived.#x, Decl(privateNameNestedClassFieldShadowing.ts, 3, 23)) +>x : Symbol(x, Decl(privateNameNestedClassFieldShadowing.ts, 8, 24)) + } + } + } +} + diff --git a/tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=typesfirst).types new file mode 100644 index 0000000000000..473319eee8b31 --- /dev/null +++ b/tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=typesfirst).types @@ -0,0 +1,44 @@ +//// [tests/cases/conformance/classes/members/privateNames/privateNameNestedClassFieldShadowing.ts] //// + +=== privateNameNestedClassFieldShadowing.ts === +class Base { +>Base : Base + + #x; +>#x : any + + constructor() { + class Derived { +>Derived : Derived + + #x; +>#x : any + + testBase(x: Base) { +>testBase : (x: Base) => void +>x : Base + + console.log(x.#x); +>console.log(x.#x) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>x.#x : any +>x : Base + } + testDerived(x: Derived) { +>testDerived : (x: Derived) => void +>x : Derived + + console.log(x.#x); +>console.log(x.#x) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>x.#x : any +>x : Derived + } + } + } +} + diff --git a/tsc/testdata/tests/cases/compiler/bigintArbirtraryIdentifier.ts b/tsc/testdata/tests/cases/compiler/bigintArbirtraryIdentifier.ts index 9b281534212e8..63dfdce226f74 100644 --- a/tsc/testdata/tests/cases/compiler/bigintArbirtraryIdentifier.ts +++ b/tsc/testdata/tests/cases/compiler/bigintArbirtraryIdentifier.ts @@ -1,3 +1,4 @@ +// @checkOrder: default, typesfirst // @target: esnext // @module: esnext diff --git a/tsc/testdata/tests/cases/compiler/checkIndexConstraintOfJavascriptClassExpression.ts b/tsc/testdata/tests/cases/compiler/checkIndexConstraintOfJavascriptClassExpression.ts index 9455c0156930f..bb7452f273d4f 100644 --- a/tsc/testdata/tests/cases/compiler/checkIndexConstraintOfJavascriptClassExpression.ts +++ b/tsc/testdata/tests/cases/compiler/checkIndexConstraintOfJavascriptClassExpression.ts @@ -1,3 +1,4 @@ +// @checkOrder: default, typesfirst // @target: es2015 // @Filename: weird.js // @allowJs: true diff --git a/tsc/testdata/tests/cases/compiler/circularAccessorAnnotations.ts b/tsc/testdata/tests/cases/compiler/circularAccessorAnnotations.ts index 01a0d10ffe3d7..76a644bb35537 100644 --- a/tsc/testdata/tests/cases/compiler/circularAccessorAnnotations.ts +++ b/tsc/testdata/tests/cases/compiler/circularAccessorAnnotations.ts @@ -1,3 +1,4 @@ +// @checkOrder: default, typesfirst // @target: es2015 // @strict: true // @declaration: true diff --git a/tsc/testdata/tests/cases/compiler/circularInlineMappedGenericTupleTypeNoCrash.ts b/tsc/testdata/tests/cases/compiler/circularInlineMappedGenericTupleTypeNoCrash.ts index 2bc4f70704151..251464912be0f 100644 --- a/tsc/testdata/tests/cases/compiler/circularInlineMappedGenericTupleTypeNoCrash.ts +++ b/tsc/testdata/tests/cases/compiler/circularInlineMappedGenericTupleTypeNoCrash.ts @@ -1,3 +1,4 @@ +// @checkOrder: default, typesfirst // @target: es2015 // @strict: true // @noEmit: true diff --git a/tsc/testdata/tests/cases/compiler/contextualOuterTypeParameters.ts b/tsc/testdata/tests/cases/compiler/contextualOuterTypeParameters.ts index a6ff9ae0a6e48..3ca7c15a2d58c 100644 --- a/tsc/testdata/tests/cases/compiler/contextualOuterTypeParameters.ts +++ b/tsc/testdata/tests/cases/compiler/contextualOuterTypeParameters.ts @@ -1,3 +1,4 @@ +// @checkOrder: default, typesfirst // @target: es2015 // @strict: true // @noemit: true @@ -27,3 +28,8 @@ const obj: { f: (x: T) => void } = { type IsObject = { x: typeof t } extends { x: string } ? true : false; } }; + +f(function self(t) { + const s = self; + type P = Parameters; +}); diff --git a/tsc/testdata/tests/cases/compiler/contextualReturnArrayPatternCallback.ts b/tsc/testdata/tests/cases/compiler/contextualReturnArrayPatternCallback.ts index 04519047a9dc7..62b911890c1ed 100644 --- a/tsc/testdata/tests/cases/compiler/contextualReturnArrayPatternCallback.ts +++ b/tsc/testdata/tests/cases/compiler/contextualReturnArrayPatternCallback.ts @@ -1,3 +1,4 @@ +// @checkOrder: default, typesfirst // @strict: true interface Matcher { diff --git a/tsc/testdata/tests/cases/compiler/deleteExpressionMustBeOptional.ts b/tsc/testdata/tests/cases/compiler/deleteExpressionMustBeOptional.ts index 223e0027de3cb..3252460f3281f 100644 --- a/tsc/testdata/tests/cases/compiler/deleteExpressionMustBeOptional.ts +++ b/tsc/testdata/tests/cases/compiler/deleteExpressionMustBeOptional.ts @@ -1,3 +1,4 @@ +// @checkOrder: default, typesfirst // @target: es2015 // @strict: true, false diff --git a/tsc/testdata/tests/cases/compiler/excessivelyLargeTupleSpread.ts b/tsc/testdata/tests/cases/compiler/excessivelyLargeTupleSpread.ts index aba0de7b9b952..d8ec361ce08f3 100644 --- a/tsc/testdata/tests/cases/compiler/excessivelyLargeTupleSpread.ts +++ b/tsc/testdata/tests/cases/compiler/excessivelyLargeTupleSpread.ts @@ -1,3 +1,4 @@ +// @checkOrder: default, typesfirst // @target: es2015 // #41771 diff --git a/tsc/testdata/tests/cases/compiler/exhaustiveSwitchCheckCircularity.ts b/tsc/testdata/tests/cases/compiler/exhaustiveSwitchCheckCircularity.ts index 86492e6c43f58..f3215225893b1 100644 --- a/tsc/testdata/tests/cases/compiler/exhaustiveSwitchCheckCircularity.ts +++ b/tsc/testdata/tests/cases/compiler/exhaustiveSwitchCheckCircularity.ts @@ -1,3 +1,4 @@ +// @checkOrder: default, typesfirst // @target: es2015 // @strict: true diff --git a/tsc/testdata/tests/cases/compiler/fallbackToBindingPatternForTypeInference.ts b/tsc/testdata/tests/cases/compiler/fallbackToBindingPatternForTypeInference.ts index 446b9319461cc..1a5a311e5c0dc 100644 --- a/tsc/testdata/tests/cases/compiler/fallbackToBindingPatternForTypeInference.ts +++ b/tsc/testdata/tests/cases/compiler/fallbackToBindingPatternForTypeInference.ts @@ -1,3 +1,4 @@ +// @checkOrder: default, typesfirst // @target: es2015 declare function trans(f: (x: T) => string): number; trans(({a}) => a); diff --git a/tsc/testdata/tests/cases/compiler/fixingTypeParametersRepeatedly2.ts b/tsc/testdata/tests/cases/compiler/fixingTypeParametersRepeatedly2.ts index c1949e48bf2ff..acb671e7cb0c2 100644 --- a/tsc/testdata/tests/cases/compiler/fixingTypeParametersRepeatedly2.ts +++ b/tsc/testdata/tests/cases/compiler/fixingTypeParametersRepeatedly2.ts @@ -1,3 +1,4 @@ +// @checkOrder: default, typesfirst // @target: es2015 // @strict: false interface Base { diff --git a/tsc/testdata/tests/cases/compiler/jsxImportSourceNonPragmaComment.tsx b/tsc/testdata/tests/cases/compiler/jsxImportSourceNonPragmaComment.tsx index 652316735d2e8..09c7889d5aa04 100644 --- a/tsc/testdata/tests/cases/compiler/jsxImportSourceNonPragmaComment.tsx +++ b/tsc/testdata/tests/cases/compiler/jsxImportSourceNonPragmaComment.tsx @@ -1,3 +1,4 @@ +// @checkOrder: default, typesfirst // @module: commonjs // @target: es2015 // @jsx: preserve diff --git a/tsc/testdata/tests/cases/compiler/jsxIntrinsicElementsExtendsRecord.tsx b/tsc/testdata/tests/cases/compiler/jsxIntrinsicElementsExtendsRecord.tsx index 52bd71073ce20..2ddc4427d5056 100644 --- a/tsc/testdata/tests/cases/compiler/jsxIntrinsicElementsExtendsRecord.tsx +++ b/tsc/testdata/tests/cases/compiler/jsxIntrinsicElementsExtendsRecord.tsx @@ -1,3 +1,4 @@ +// @checkOrder: default, typesfirst // @target: es2015 // @jsx: preserve diff --git a/tsc/testdata/tests/cases/compiler/limitDeepInstantiations.ts b/tsc/testdata/tests/cases/compiler/limitDeepInstantiations.ts index ccb48dec686eb..ba5c710c6fed3 100644 --- a/tsc/testdata/tests/cases/compiler/limitDeepInstantiations.ts +++ b/tsc/testdata/tests/cases/compiler/limitDeepInstantiations.ts @@ -1,3 +1,4 @@ +// @checkOrder: default, typesfirst // @target: es2015 // Repro from #14837 diff --git a/tsc/testdata/tests/cases/compiler/overloadresolutionWithConstraintCheckingDeferred.ts b/tsc/testdata/tests/cases/compiler/overloadresolutionWithConstraintCheckingDeferred.ts index 5c46a93180392..6265ebecee02e 100644 --- a/tsc/testdata/tests/cases/compiler/overloadresolutionWithConstraintCheckingDeferred.ts +++ b/tsc/testdata/tests/cases/compiler/overloadresolutionWithConstraintCheckingDeferred.ts @@ -1,3 +1,4 @@ +// @checkOrder: default, typesfirst // @target: es2015 // @strict: false interface A { x } diff --git a/tsc/testdata/tests/cases/compiler/returnTypeInferenceNotTooBroad.ts b/tsc/testdata/tests/cases/compiler/returnTypeInferenceNotTooBroad.ts index fb987440a546e..72c12f9dd0af5 100644 --- a/tsc/testdata/tests/cases/compiler/returnTypeInferenceNotTooBroad.ts +++ b/tsc/testdata/tests/cases/compiler/returnTypeInferenceNotTooBroad.ts @@ -1,3 +1,4 @@ +// @checkOrder: default, typesfirst // @target: es2015 type Signs = { kind: 'a'; a: 3; } | { kind: 'b'; b: 2; } | { kind: 'c'; c: 1; }; interface Opts { diff --git a/tsc/testdata/tests/cases/compiler/templateLiteralTypeExcessiveLength.ts b/tsc/testdata/tests/cases/compiler/templateLiteralTypeExcessiveLength.ts index eeb573c01c164..77d5e59654843 100644 --- a/tsc/testdata/tests/cases/compiler/templateLiteralTypeExcessiveLength.ts +++ b/tsc/testdata/tests/cases/compiler/templateLiteralTypeExcessiveLength.ts @@ -1,3 +1,4 @@ +// @checkOrder: default, typesfirst // @strict: true // Regression test for #63271: `Dec<2>` is `any`, so `Recur` produces both conditional branches and diff --git a/tsc/testdata/tests/cases/compiler/typeParameterHasSelfAsConstraint.ts b/tsc/testdata/tests/cases/compiler/typeParameterHasSelfAsConstraint.ts index 3b2267f54389c..9c99dcb98fa60 100644 --- a/tsc/testdata/tests/cases/compiler/typeParameterHasSelfAsConstraint.ts +++ b/tsc/testdata/tests/cases/compiler/typeParameterHasSelfAsConstraint.ts @@ -1,3 +1,4 @@ +// @checkOrder: default, typesfirst // @target: es2015 function foo(x: T): number { return x; diff --git a/tsc/testdata/tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts b/tsc/testdata/tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts index 6a4517411287d..d834c23767f8f 100644 --- a/tsc/testdata/tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts +++ b/tsc/testdata/tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts @@ -1,3 +1,4 @@ +// @checkOrder: default, typesfirst // @target: es2015 //@noUnusedLocals:true //@noUnusedParameters:true diff --git a/tsc/testdata/tests/cases/conformance/classes/members/privateNames/privateNameNestedClassFieldShadowing.ts b/tsc/testdata/tests/cases/conformance/classes/members/privateNames/privateNameNestedClassFieldShadowing.ts index 45e3ab2f45218..598881ff0189c 100644 --- a/tsc/testdata/tests/cases/conformance/classes/members/privateNames/privateNameNestedClassFieldShadowing.ts +++ b/tsc/testdata/tests/cases/conformance/classes/members/privateNames/privateNameNestedClassFieldShadowing.ts @@ -1,3 +1,4 @@ +// @checkOrder: default, typesfirst // @strict: false // @target: es2015 diff --git a/tsc/testdata/tests/cases/conformance/controlFlow/dependentDestructuredVariablesReferenceInDeclaration1.ts b/tsc/testdata/tests/cases/conformance/controlFlow/dependentDestructuredVariablesReferenceInDeclaration1.ts index d72cb1553711e..d3f2b2d3c8455 100644 --- a/tsc/testdata/tests/cases/conformance/controlFlow/dependentDestructuredVariablesReferenceInDeclaration1.ts +++ b/tsc/testdata/tests/cases/conformance/controlFlow/dependentDestructuredVariablesReferenceInDeclaration1.ts @@ -1,6 +1,7 @@ // @strict: true // @target: esnext // @noEmit: true +// @checkOrder: default, typesfirst // https://github.com/microsoft/TypeScript/issues/62993 diff --git a/tsc/testdata/tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers.ts b/tsc/testdata/tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers.ts index 613a3966e161f..ff48d5a86f727 100644 --- a/tsc/testdata/tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers.ts +++ b/tsc/testdata/tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers.ts @@ -1,3 +1,4 @@ +// @checkOrder: default, typesfirst // @target: es2015 // @strict: false // (arg: { x: any, y: any }) => void diff --git a/tsc/testdata/tests/cases/conformance/jsdoc/importTag13.ts b/tsc/testdata/tests/cases/conformance/jsdoc/importTag13.ts index 7ad42b8c9fee2..d811998b4c3c5 100644 --- a/tsc/testdata/tests/cases/conformance/jsdoc/importTag13.ts +++ b/tsc/testdata/tests/cases/conformance/jsdoc/importTag13.ts @@ -1,3 +1,4 @@ +// @checkOrder: default, typesfirst // @target: es2015 // @checkJs: true // @allowJs: true From 87dd0bb6bdb496e5372b6fc96ec2232db0857584 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 21 Oct 2026 09:03:47 -0700 Subject: [PATCH 004/194] Add tests for check order dependence These tests exercise checker results that can depend on the order in which declarations, files, and relations are checked: variance measurement cycles, relation caching under recursion and depth limits, instantiation limits, contextual re-checks, and deferred type reference cycles. Recording the current baselines makes later changes to make checking order independent show up as reviewable baseline diffs. --- ...heckReentryFromOuterTypeParameters.symbols | 81 ++++++++++++ ...lCheckReentryFromOuterTypeParameters.types | 58 +++++++++ ...erredTypeReferenceCycleRollback.errors.txt | 24 ++++ ...deferredTypeReferenceCycleRollback.symbols | 70 ++++++++++ .../deferredTypeReferenceCycleRollback.types | 34 +++++ .../instantiationLimitsCheckOrder.errors.txt | 30 +++++ .../instantiationLimitsCheckOrder.symbols | 78 ++++++++++++ .../instantiationLimitsCheckOrder.types | 43 +++++++ .../relationDeeplyNestedCheckOrder.symbols | 53 ++++++++ .../relationDeeplyNestedCheckOrder.types | 40 ++++++ .../relationMaybeCheckOrder.errors.txt | 31 +++++ .../compiler/relationMaybeCheckOrder.symbols | 69 ++++++++++ .../compiler/relationMaybeCheckOrder.types | 60 +++++++++ .../varianceCycleCachedResults.errors.txt | 25 ++++ .../compiler/varianceCycleCachedResults.js | 35 +++++ .../varianceCycleCachedResults.symbols | 52 ++++++++ .../compiler/varianceCycleCachedResults.types | 49 +++++++ ...rianceCycleDiscardedDiagnostics.errors.txt | 29 +++++ .../varianceCycleDiscardedDiagnostics.symbols | 71 +++++++++++ .../varianceCycleDiscardedDiagnostics.types | 63 +++++++++ .../varianceCycleEntryOrder.errors.txt | 78 ++++++++++++ .../compiler/varianceCycleEntryOrder.symbols | 106 ++++++++++++++++ .../compiler/varianceCycleEntryOrder.types | 82 ++++++++++++ ...varianceCycleStructuralFallback.errors.txt | 86 +++++++++++++ .../varianceCycleStructuralFallback.symbols | 120 ++++++++++++++++++ .../varianceCycleStructuralFallback.types | 94 ++++++++++++++ ...rianceMeasuredWithinCircularity.errors.txt | 63 +++++++++ .../varianceMeasuredWithinCircularity.symbols | 89 +++++++++++++ .../varianceMeasuredWithinCircularity.types | 52 ++++++++ ...tualCheckReentryFromOuterTypeParameters.ts | 17 +++ .../deferredTypeReferenceCycleRollback.ts | 20 +++ .../compiler/instantiationLimitsCheckOrder.ts | 25 ++++ .../relationDeeplyNestedCheckOrder.ts | 16 +++ .../cases/compiler/relationMaybeCheckOrder.ts | 24 ++++ .../compiler/varianceCycleCachedResults.ts | 24 ++++ .../varianceCycleDiscardedDiagnostics.ts | 26 ++++ .../cases/compiler/varianceCycleEntryOrder.ts | 32 +++++ .../varianceCycleStructuralFallback.ts | 33 +++++ .../varianceMeasuredWithinCircularity.ts | 30 +++++ 39 files changed, 2012 insertions(+) create mode 100644 tsc/testdata/baselines/reference/compiler/contextualCheckReentryFromOuterTypeParameters.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/contextualCheckReentryFromOuterTypeParameters.types create mode 100644 tsc/testdata/baselines/reference/compiler/deferredTypeReferenceCycleRollback.errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/deferredTypeReferenceCycleRollback.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/deferredTypeReferenceCycleRollback.types create mode 100644 tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.types create mode 100644 tsc/testdata/baselines/reference/compiler/relationDeeplyNestedCheckOrder.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/relationDeeplyNestedCheckOrder.types create mode 100644 tsc/testdata/baselines/reference/compiler/relationMaybeCheckOrder.errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/relationMaybeCheckOrder.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/relationMaybeCheckOrder.types create mode 100644 tsc/testdata/baselines/reference/compiler/varianceCycleCachedResults.errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/varianceCycleCachedResults.js create mode 100644 tsc/testdata/baselines/reference/compiler/varianceCycleCachedResults.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/varianceCycleCachedResults.types create mode 100644 tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.types create mode 100644 tsc/testdata/baselines/reference/compiler/varianceCycleEntryOrder.errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/varianceCycleEntryOrder.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/varianceCycleEntryOrder.types create mode 100644 tsc/testdata/baselines/reference/compiler/varianceCycleStructuralFallback.errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/varianceCycleStructuralFallback.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/varianceCycleStructuralFallback.types create mode 100644 tsc/testdata/baselines/reference/compiler/varianceMeasuredWithinCircularity.errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/varianceMeasuredWithinCircularity.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/varianceMeasuredWithinCircularity.types create mode 100644 tsc/testdata/tests/cases/compiler/contextualCheckReentryFromOuterTypeParameters.ts create mode 100644 tsc/testdata/tests/cases/compiler/deferredTypeReferenceCycleRollback.ts create mode 100644 tsc/testdata/tests/cases/compiler/instantiationLimitsCheckOrder.ts create mode 100644 tsc/testdata/tests/cases/compiler/relationDeeplyNestedCheckOrder.ts create mode 100644 tsc/testdata/tests/cases/compiler/relationMaybeCheckOrder.ts create mode 100644 tsc/testdata/tests/cases/compiler/varianceCycleCachedResults.ts create mode 100644 tsc/testdata/tests/cases/compiler/varianceCycleDiscardedDiagnostics.ts create mode 100644 tsc/testdata/tests/cases/compiler/varianceCycleEntryOrder.ts create mode 100644 tsc/testdata/tests/cases/compiler/varianceCycleStructuralFallback.ts create mode 100644 tsc/testdata/tests/cases/compiler/varianceMeasuredWithinCircularity.ts diff --git a/tsc/testdata/baselines/reference/compiler/contextualCheckReentryFromOuterTypeParameters.symbols b/tsc/testdata/baselines/reference/compiler/contextualCheckReentryFromOuterTypeParameters.symbols new file mode 100644 index 0000000000000..88f761461324a --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/contextualCheckReentryFromOuterTypeParameters.symbols @@ -0,0 +1,81 @@ +//// [tests/cases/compiler/contextualCheckReentryFromOuterTypeParameters.ts] //// + +=== contextualCheckReentryFromOuterTypeParameters.ts === +interface Argv { +>Argv : Symbol(Argv, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 0, 0)) +>T : Symbol(T, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 0, 15)) + + command(builder: (args: Argv) => Argv, handler: (args: Arguments) => void): Argv; +>command : Symbol(Argv.command, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 0, 24)) +>U : Symbol(U, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 1, 12)) +>builder : Symbol(builder, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 1, 15)) +>args : Symbol(args, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 1, 25)) +>Argv : Symbol(Argv, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 0, 0)) +>T : Symbol(T, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 0, 15)) +>Argv : Symbol(Argv, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 0, 0)) +>U : Symbol(U, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 1, 12)) +>handler : Symbol(handler, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 1, 51)) +>args : Symbol(args, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 1, 62)) +>Arguments : Symbol(Arguments, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 3, 1)) +>U : Symbol(U, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 1, 12)) +>Argv : Symbol(Argv, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 0, 0)) +>T : Symbol(T, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 0, 15)) + + option(key: K, options: O): Argv<{ [key in K]: O } & Check>; +>option : Symbol(Argv.option, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 1, 100)) +>K : Symbol(K, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 2, 11)) +>O : Symbol(O, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 2, 28)) +>key : Symbol(key, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 2, 32)) +>K : Symbol(K, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 2, 11)) +>options : Symbol(options, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 2, 39)) +>O : Symbol(O, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 2, 28)) +>Argv : Symbol(Argv, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 0, 0)) +>key : Symbol(key, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 2, 61)) +>K : Symbol(K, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 2, 11)) +>O : Symbol(O, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 2, 28)) +>Check : Symbol(Check, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 4, 78)) +>O : Symbol(O, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 2, 28)) +} +type Arguments = { [key in keyof T]: T[key] } & { [key: string]: unknown }; +>Arguments : Symbol(Arguments, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 3, 1)) +>T : Symbol(T, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 4, 15)) +>key : Symbol(key, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 4, 23)) +>T : Symbol(T, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 4, 15)) +>T : Symbol(T, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 4, 15)) +>key : Symbol(key, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 4, 23)) +>key : Symbol(key, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 4, 54)) + +type Check = O extends {} ? {} : {}; +>Check : Symbol(Check, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 4, 78)) +>O : Symbol(O, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 5, 11)) +>O : Symbol(O, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 5, 11)) + +declare const yargs: Argv; +>yargs : Symbol(yargs, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 6, 13)) +>Argv : Symbol(Argv, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 0, 0)) + +yargs.command( +>yargs.command : Symbol(Argv.command, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 0, 24)) +>yargs : Symbol(yargs, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 6, 13)) +>command : Symbol(Argv.command, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 0, 24)) + + (yargs) => yargs.option("a", { type: "string" }), +>yargs : Symbol(yargs, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 9, 5)) +>yargs.option : Symbol(Argv.option, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 1, 100)) +>yargs : Symbol(yargs, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 9, 5)) +>option : Symbol(Argv.option, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 1, 100)) +>type : Symbol(type, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 9, 34)) + + (argv) => { +>argv : Symbol(argv, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 10, 5)) + + const a: { type: string } = argv.a; +>a : Symbol(a, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 11, 13)) +>type : Symbol(type, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 11, 18)) +>argv.a : Symbol(a) +>argv : Symbol(argv, Decl(contextualCheckReentryFromOuterTypeParameters.ts, 10, 5)) +>a : Symbol(a) + + }, +); + diff --git a/tsc/testdata/baselines/reference/compiler/contextualCheckReentryFromOuterTypeParameters.types b/tsc/testdata/baselines/reference/compiler/contextualCheckReentryFromOuterTypeParameters.types new file mode 100644 index 0000000000000..bd12f97face3b --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/contextualCheckReentryFromOuterTypeParameters.types @@ -0,0 +1,58 @@ +//// [tests/cases/compiler/contextualCheckReentryFromOuterTypeParameters.ts] //// + +=== contextualCheckReentryFromOuterTypeParameters.ts === +interface Argv { + command(builder: (args: Argv) => Argv, handler: (args: Arguments) => void): Argv; +>command : (builder: (args: Argv) => Argv, handler: (args: Arguments) => void) => Argv +>builder : (args: Argv) => Argv +>args : Argv +>handler : (args: Arguments) => void +>args : Arguments + + option(key: K, options: O): Argv<{ [key in K]: O } & Check>; +>option : (key: K, options: O) => Argv<{ [key in K]: O; } & Check> +>key : K +>options : O +} +type Arguments = { [key in keyof T]: T[key] } & { [key: string]: unknown }; +>Arguments : Arguments +>key : string + +type Check = O extends {} ? {} : {}; +>Check : Check + +declare const yargs: Argv; +>yargs : Argv<{}> + +yargs.command( +>yargs.command( (yargs) => yargs.option("a", { type: "string" }), (argv) => { const a: { type: string } = argv.a; },) : Argv<{}> +>yargs.command : (builder: (args: Argv<{}>) => Argv, handler: (args: Arguments) => void) => Argv<{}> +>yargs : Argv<{}> +>command : (builder: (args: Argv<{}>) => Argv, handler: (args: Arguments) => void) => Argv<{}> + + (yargs) => yargs.option("a", { type: "string" }), +>(yargs) => yargs.option("a", { type: "string" }) : (yargs: Argv<{}>) => Argv<{ a: { type: string; }; }> +>yargs : Argv<{}> +>yargs.option("a", { type: "string" }) : Argv<{ a: { type: string; }; }> +>yargs.option : (key: K, options: O) => Argv<{ [key in K]: O; } & Check> +>yargs : Argv<{}> +>option : (key: K, options: O) => Argv<{ [key in K]: O; } & Check> +>"a" : "a" +>{ type: "string" } : { type: string; } +>type : string +>"string" : "string" + + (argv) => { +>(argv) => { const a: { type: string } = argv.a; } : (argv: Arguments<{ a: { type: string; }; }>) => void +>argv : Arguments<{ a: { type: string; }; }> + + const a: { type: string } = argv.a; +>a : { type: string; } +>type : string +>argv.a : { type: string; } +>argv : Arguments<{ a: { type: string; }; }> +>a : { type: string; } + + }, +); + diff --git a/tsc/testdata/baselines/reference/compiler/deferredTypeReferenceCycleRollback.errors.txt b/tsc/testdata/baselines/reference/compiler/deferredTypeReferenceCycleRollback.errors.txt new file mode 100644 index 0000000000000..88bdce38b167c --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deferredTypeReferenceCycleRollback.errors.txt @@ -0,0 +1,24 @@ +deferredTypeReferenceCycleRollback.ts(17,31): error TS2304: Cannot find name 'Missing'. + + +==== deferredTypeReferenceCycleRollback.ts (1 errors) ==== + // A cycle rollback used to reset the type of the Array> + // node while the deferred reference identified by that node survived, + // which crashed a later instantiation of it. + + declare function declare(): void; + + interface PluginObj { + visitor: Visit; + } + type Visit = VisitFn | VisitObj; + type VisitFn = (path: NodePath

) => void; + interface VisitObj {} + declare class NodePath { + parentPath: NodePath>; + get: Get; + } + type Get = T extends Array ? Array> : never; + ~~~~~~~ +!!! error TS2304: Cannot find name 'Missing'. + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/deferredTypeReferenceCycleRollback.symbols b/tsc/testdata/baselines/reference/compiler/deferredTypeReferenceCycleRollback.symbols new file mode 100644 index 0000000000000..285889376a2ba --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deferredTypeReferenceCycleRollback.symbols @@ -0,0 +1,70 @@ +//// [tests/cases/compiler/deferredTypeReferenceCycleRollback.ts] //// + +=== deferredTypeReferenceCycleRollback.ts === +// A cycle rollback used to reset the type of the Array> +// node while the deferred reference identified by that node survived, +// which crashed a later instantiation of it. + +declare function declare(): void; +>declare : Symbol(declare, Decl(deferredTypeReferenceCycleRollback.ts, 0, 0)) +>T : Symbol(T, Decl(deferredTypeReferenceCycleRollback.ts, 4, 25)) +>PluginObj : Symbol(PluginObj, Decl(deferredTypeReferenceCycleRollback.ts, 4, 66)) +>PluginObj : Symbol(PluginObj, Decl(deferredTypeReferenceCycleRollback.ts, 4, 66)) + +interface PluginObj { +>PluginObj : Symbol(PluginObj, Decl(deferredTypeReferenceCycleRollback.ts, 4, 66)) +>S : Symbol(S, Decl(deferredTypeReferenceCycleRollback.ts, 6, 20)) + + visitor: Visit; +>visitor : Symbol(PluginObj.visitor, Decl(deferredTypeReferenceCycleRollback.ts, 6, 34)) +>Visit : Symbol(Visit, Decl(deferredTypeReferenceCycleRollback.ts, 8, 1)) +>S : Symbol(S, Decl(deferredTypeReferenceCycleRollback.ts, 6, 20)) +} +type Visit = VisitFn | VisitObj; +>Visit : Symbol(Visit, Decl(deferredTypeReferenceCycleRollback.ts, 8, 1)) +>S : Symbol(S, Decl(deferredTypeReferenceCycleRollback.ts, 9, 11)) +>P : Symbol(P, Decl(deferredTypeReferenceCycleRollback.ts, 9, 13)) +>VisitFn : Symbol(VisitFn, Decl(deferredTypeReferenceCycleRollback.ts, 9, 50)) +>S : Symbol(S, Decl(deferredTypeReferenceCycleRollback.ts, 9, 11)) +>P : Symbol(P, Decl(deferredTypeReferenceCycleRollback.ts, 9, 13)) +>VisitObj : Symbol(VisitObj, Decl(deferredTypeReferenceCycleRollback.ts, 10, 49)) +>S : Symbol(S, Decl(deferredTypeReferenceCycleRollback.ts, 9, 11)) +>P : Symbol(P, Decl(deferredTypeReferenceCycleRollback.ts, 9, 13)) + +type VisitFn = (path: NodePath

) => void; +>VisitFn : Symbol(VisitFn, Decl(deferredTypeReferenceCycleRollback.ts, 9, 50)) +>S : Symbol(S, Decl(deferredTypeReferenceCycleRollback.ts, 10, 13)) +>P : Symbol(P, Decl(deferredTypeReferenceCycleRollback.ts, 10, 15)) +>path : Symbol(path, Decl(deferredTypeReferenceCycleRollback.ts, 10, 22)) +>NodePath : Symbol(NodePath, Decl(deferredTypeReferenceCycleRollback.ts, 11, 27)) +>P : Symbol(P, Decl(deferredTypeReferenceCycleRollback.ts, 10, 15)) + +interface VisitObj {} +>VisitObj : Symbol(VisitObj, Decl(deferredTypeReferenceCycleRollback.ts, 10, 49)) +>S : Symbol(S, Decl(deferredTypeReferenceCycleRollback.ts, 11, 19)) +>P : Symbol(P, Decl(deferredTypeReferenceCycleRollback.ts, 11, 21)) + +declare class NodePath { +>NodePath : Symbol(NodePath, Decl(deferredTypeReferenceCycleRollback.ts, 11, 27)) +>T : Symbol(T, Decl(deferredTypeReferenceCycleRollback.ts, 12, 23)) + + parentPath: NodePath>; +>parentPath : Symbol(NodePath.parentPath, Decl(deferredTypeReferenceCycleRollback.ts, 12, 27)) +>NodePath : Symbol(NodePath, Decl(deferredTypeReferenceCycleRollback.ts, 11, 27)) +>Exclude : Symbol(Exclude, Decl(lib.es5.d.ts, --, --)) +>T : Symbol(T, Decl(deferredTypeReferenceCycleRollback.ts, 12, 23)) + + get: Get; +>get : Symbol(NodePath.get, Decl(deferredTypeReferenceCycleRollback.ts, 13, 43)) +>Get : Symbol(Get, Decl(deferredTypeReferenceCycleRollback.ts, 15, 1)) +>T : Symbol(T, Decl(deferredTypeReferenceCycleRollback.ts, 12, 23)) +} +type Get = T extends Array ? Array> : never; +>Get : Symbol(Get, Decl(deferredTypeReferenceCycleRollback.ts, 15, 1)) +>T : Symbol(T, Decl(deferredTypeReferenceCycleRollback.ts, 16, 9)) +>T : Symbol(T, Decl(deferredTypeReferenceCycleRollback.ts, 16, 9)) +>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --) ... and 4 more) +>Missing : Symbol(Missing) +>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --) ... and 4 more) +>NodePath : Symbol(NodePath, Decl(deferredTypeReferenceCycleRollback.ts, 11, 27)) + diff --git a/tsc/testdata/baselines/reference/compiler/deferredTypeReferenceCycleRollback.types b/tsc/testdata/baselines/reference/compiler/deferredTypeReferenceCycleRollback.types new file mode 100644 index 0000000000000..7db259991a1ca --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deferredTypeReferenceCycleRollback.types @@ -0,0 +1,34 @@ +//// [tests/cases/compiler/deferredTypeReferenceCycleRollback.ts] //// + +=== deferredTypeReferenceCycleRollback.ts === +// A cycle rollback used to reset the type of the Array> +// node while the deferred reference identified by that node survived, +// which crashed a later instantiation of it. + +declare function declare(): void; +>declare : >() => void + +interface PluginObj { + visitor: Visit; +>visitor : Visit +} +type Visit = VisitFn | VisitObj; +>Visit : Visit + +type VisitFn = (path: NodePath

) => void; +>VisitFn : VisitFn +>path : NodePath

+ +interface VisitObj {} +declare class NodePath { +>NodePath : NodePath + + parentPath: NodePath>; +>parentPath : NodePath> + + get: Get; +>get : Get +} +type Get = T extends Array ? Array> : never; +>Get : Get + diff --git a/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.errors.txt b/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.errors.txt new file mode 100644 index 0000000000000..267ec02b4f194 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.errors.txt @@ -0,0 +1,30 @@ +instantiationLimitsCheckOrder.ts(11,16): error TS2589: Type instantiation is excessively deep and possibly infinite. + + +==== instantiationLimitsCheckOrder.ts (1 errors) ==== + // Instantiation limits must not depend on what was instantiated before. + // This holds for the depth limit, but not yet for the limit on the number + // of instantiations, which Wide2All only reaches if Wide2Tail was not + // checked first. + + type D = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; + type K = `${D}${D}${D}`; + + // Over five million instantiations for one statement. + type Wide = N["length"] extends 6 ? I : { [J in K]: Wide<[...N, 0], [J, I][0]> }[K]; + type WideAll = Wide<[], "">; + ~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. + + // The same, but half of the instantiations already happened for another + // statement. + type Wide2 = N["length"] extends 6 ? I : { [J in K]: Wide2<[...N, 0], [J, I][0]> }[K]; + type Wide2Tail = Wide2<[0, 0, 0], "">; + type Wide2All = Wide2<[], "">; + + // Over a hundred nested instantiations, half of which already happened for + // another statement. + type Deep = N["length"] extends 60 ? never : Deep<[...N, 0]> | N["length"]; + type DeepTail = Deep<[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]>; + type DeepAll = Deep<[]>; + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.symbols b/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.symbols new file mode 100644 index 0000000000000..addc79a296cf8 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.symbols @@ -0,0 +1,78 @@ +//// [tests/cases/compiler/instantiationLimitsCheckOrder.ts] //// + +=== instantiationLimitsCheckOrder.ts === +// Instantiation limits must not depend on what was instantiated before. +// This holds for the depth limit, but not yet for the limit on the number +// of instantiations, which Wide2All only reaches if Wide2Tail was not +// checked first. + +type D = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; +>D : Symbol(D, Decl(instantiationLimitsCheckOrder.ts, 0, 0)) + +type K = `${D}${D}${D}`; +>K : Symbol(K, Decl(instantiationLimitsCheckOrder.ts, 5, 47)) +>D : Symbol(D, Decl(instantiationLimitsCheckOrder.ts, 0, 0)) +>D : Symbol(D, Decl(instantiationLimitsCheckOrder.ts, 0, 0)) +>D : Symbol(D, Decl(instantiationLimitsCheckOrder.ts, 0, 0)) + +// Over five million instantiations for one statement. +type Wide = N["length"] extends 6 ? I : { [J in K]: Wide<[...N, 0], [J, I][0]> }[K]; +>Wide : Symbol(Wide, Decl(instantiationLimitsCheckOrder.ts, 6, 24)) +>N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 9, 10)) +>I : Symbol(I, Decl(instantiationLimitsCheckOrder.ts, 9, 24)) +>N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 9, 10)) +>I : Symbol(I, Decl(instantiationLimitsCheckOrder.ts, 9, 24)) +>J : Symbol(J, Decl(instantiationLimitsCheckOrder.ts, 9, 61)) +>K : Symbol(K, Decl(instantiationLimitsCheckOrder.ts, 5, 47)) +>Wide : Symbol(Wide, Decl(instantiationLimitsCheckOrder.ts, 6, 24)) +>N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 9, 10)) +>J : Symbol(J, Decl(instantiationLimitsCheckOrder.ts, 9, 61)) +>I : Symbol(I, Decl(instantiationLimitsCheckOrder.ts, 9, 24)) +>K : Symbol(K, Decl(instantiationLimitsCheckOrder.ts, 5, 47)) + +type WideAll = Wide<[], "">; +>WideAll : Symbol(WideAll, Decl(instantiationLimitsCheckOrder.ts, 9, 102)) +>Wide : Symbol(Wide, Decl(instantiationLimitsCheckOrder.ts, 6, 24)) + +// The same, but half of the instantiations already happened for another +// statement. +type Wide2 = N["length"] extends 6 ? I : { [J in K]: Wide2<[...N, 0], [J, I][0]> }[K]; +>Wide2 : Symbol(Wide2, Decl(instantiationLimitsCheckOrder.ts, 10, 28)) +>N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 14, 11)) +>I : Symbol(I, Decl(instantiationLimitsCheckOrder.ts, 14, 25)) +>N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 14, 11)) +>I : Symbol(I, Decl(instantiationLimitsCheckOrder.ts, 14, 25)) +>J : Symbol(J, Decl(instantiationLimitsCheckOrder.ts, 14, 62)) +>K : Symbol(K, Decl(instantiationLimitsCheckOrder.ts, 5, 47)) +>Wide2 : Symbol(Wide2, Decl(instantiationLimitsCheckOrder.ts, 10, 28)) +>N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 14, 11)) +>J : Symbol(J, Decl(instantiationLimitsCheckOrder.ts, 14, 62)) +>I : Symbol(I, Decl(instantiationLimitsCheckOrder.ts, 14, 25)) +>K : Symbol(K, Decl(instantiationLimitsCheckOrder.ts, 5, 47)) + +type Wide2Tail = Wide2<[0, 0, 0], "">; +>Wide2Tail : Symbol(Wide2Tail, Decl(instantiationLimitsCheckOrder.ts, 14, 104)) +>Wide2 : Symbol(Wide2, Decl(instantiationLimitsCheckOrder.ts, 10, 28)) + +type Wide2All = Wide2<[], "">; +>Wide2All : Symbol(Wide2All, Decl(instantiationLimitsCheckOrder.ts, 15, 38)) +>Wide2 : Symbol(Wide2, Decl(instantiationLimitsCheckOrder.ts, 10, 28)) + +// Over a hundred nested instantiations, half of which already happened for +// another statement. +type Deep = N["length"] extends 60 ? never : Deep<[...N, 0]> | N["length"]; +>Deep : Symbol(Deep, Decl(instantiationLimitsCheckOrder.ts, 16, 30)) +>N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 20, 10)) +>N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 20, 10)) +>Deep : Symbol(Deep, Decl(instantiationLimitsCheckOrder.ts, 16, 30)) +>N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 20, 10)) +>N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 20, 10)) + +type DeepTail = Deep<[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]>; +>DeepTail : Symbol(DeepTail, Decl(instantiationLimitsCheckOrder.ts, 20, 90)) +>Deep : Symbol(Deep, Decl(instantiationLimitsCheckOrder.ts, 16, 30)) + +type DeepAll = Deep<[]>; +>DeepAll : Symbol(DeepAll, Decl(instantiationLimitsCheckOrder.ts, 21, 113)) +>Deep : Symbol(Deep, Decl(instantiationLimitsCheckOrder.ts, 16, 30)) + diff --git a/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.types b/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.types new file mode 100644 index 0000000000000..821c937b08c1d --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.types @@ -0,0 +1,43 @@ +//// [tests/cases/compiler/instantiationLimitsCheckOrder.ts] //// + +=== instantiationLimitsCheckOrder.ts === +// Instantiation limits must not depend on what was instantiated before. +// This holds for the depth limit, but not yet for the limit on the number +// of instantiations, which Wide2All only reaches if Wide2Tail was not +// checked first. + +type D = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; +>D : D + +type K = `${D}${D}${D}`; +>K : "000" | "001" | "002" | "003" | "004" | "005" | "006" | "007" | "008" | "009" | "010" | "011" | "012" | "013" | "014" | "015" | "016" | "017" | "018" | "019" | "020" | "021" | "022" | "023" | "024" | "025" | "026" | "027" | "028" | "029" | "030" | "031" | "032" | "033" | "034" | "035" | "036" | "037" | "038" | "039" | "040" | "041" | "042" | "043" | "044" | "045" | "046" | "047" | "048" | "049" | "050" | "051" | "052" | "053" | "054" | "055" | "056" | "057" | "058" | "059" | "060" | "061" | "062" | "063" | "064" | "065" | "066" | "067" | "068" | "069" | "070" | "071" | "072" | "073" | "074" | "075" | "076" | "077" | "078" | "079" | "080" | "081" | "082" | "083" | "084" | "085" | "086" | "087" | "088" | "089" | "090" | "091" | "092" | "093" | "094" | "095" | "096" | "097" | "098" | "099" | "100" | "101" | "102" | "103" | "104" | "105" | "106" | "107" | "108" | "109" | "110" | "111" | "112" | "113" | "114" | "115" | "116" | "117" | "118" | "119" | "120" | "121" | "122" | "123" | "124" | "125" | "126" | "127" | "128" | "129" | "130" | "131" | "132" | "133" | "134" | "135" | "136" | "137" | "138" | "139" | "140" | "141" | "142" | "143" | "144" | "145" | "146" | "147" | "148" | "149" | "150" | "151" | "152" | "153" | "154" | "155" | "156" | "157" | "158" | "159" | "160" | "161" | "162" | "163" | "164" | "165" | "166" | "167" | "168" | "169" | "170" | "171" | "172" | "173" | "174" | "175" | "176" | "177" | "178" | "179" | "180" | "181" | "182" | "183" | "184" | "185" | "186" | "187" | "188" | "189" | "190" | "191" | "192" | "193" | "194" | "195" | "196" | "197" | "198" | "199" | "200" | "201" | "202" | "203" | "204" | "205" | "206" | "207" | "208" | "209" | "210" | "211" | "212" | "213" | "214" | "215" | "216" | "217" | "218" | "219" | "220" | "221" | "222" | "223" | "224" | "225" | "226" | "227" | "228" | "229" | "230" | "231" | "232" | "233" | "234" | "235" | "236" | "237" | "238" | "239" | "240" | "241" | "242" | "243" | "244" | "245" | "246" | "247" | "248" | "249" | "250" | "251" | "252" | "253" | "254" | "255" | "256" | "257" | "258" | "259" | "260" | "261" | "262" | "263" | "264" | "265" | "266" | "267" | "268" | "269" | "270" | "271" | "272" | "273" | "274" | "275" | "276" | "277" | "278" | "279" | "280" | "281" | "282" | "283" | "284" | "285" | "286" | "287" | "288" | "289" | "290" | "291" | "292" | "293" | "294" | "295" | "296" | "297" | "298" | "299" | "300" | "301" | "302" | "303" | "304" | "305" | "306" | "307" | "308" | "309" | "310" | "311" | "312" | "313" | "314" | "315" | "316" | "317" | "318" | "319" | "320" | "321" | "322" | "323" | "324" | "325" | "326" | "327" | "328" | "329" | "330" | "331" | "332" | "333" | "334" | "335" | "336" | "337" | "338" | "339" | "340" | "341" | "342" | "343" | "344" | "345" | "346" | "347" | "348" | "349" | "350" | "351" | "352" | "353" | "354" | "355" | "356" | "357" | "358" | "359" | "360" | "361" | "362" | "363" | "364" | "365" | "366" | "367" | "368" | "369" | "370" | "371" | "372" | "373" | "374" | "375" | "376" | "377" | "378" | "379" | "380" | "381" | "382" | "383" | "384" | "385" | "386" | "387" | "388" | "389" | "390" | "391" | "392" | "393" | "394" | "395" | "396" | "397" | "398" | "399" | "400" | "401" | "402" | "403" | "404" | "405" | "406" | "407" | "408" | "409" | "410" | "411" | "412" | "413" | "414" | "415" | "416" | "417" | "418" | "419" | "420" | "421" | "422" | "423" | "424" | "425" | "426" | "427" | "428" | "429" | "430" | "431" | "432" | "433" | "434" | "435" | "436" | "437" | "438" | "439" | "440" | "441" | "442" | "443" | "444" | "445" | "446" | "447" | "448" | "449" | "450" | "451" | "452" | "453" | "454" | "455" | "456" | "457" | "458" | "459" | "460" | "461" | "462" | "463" | "464" | "465" | "466" | "467" | "468" | "469" | "470" | "471" | "472" | "473" | "474" | "475" | "476" | "477" | "478" | "479" | "480" | "481" | "482" | "483" | "484" | "485" | "486" | "487" | "488" | "489" | "490" | "491" | "492" | "493" | "494" | "495" | "496" | "497" | "498" | "499" | "500" | "501" | "502" | "503" | "504" | "505" | "506" | "507" | "508" | "509" | "510" | "511" | "512" | "513" | "514" | "515" | "516" | "517" | "518" | "519" | "520" | "521" | "522" | "523" | "524" | "525" | "526" | "527" | "528" | "529" | "530" | "531" | "532" | "533" | "534" | "535" | "536" | "537" | "538" | "539" | "540" | "541" | "542" | "543" | "544" | "545" | "546" | "547" | "548" | "549" | "550" | "551" | "552" | "553" | "554" | "555" | "556" | "557" | "558" | "559" | "560" | "561" | "562" | "563" | "564" | "565" | "566" | "567" | "568" | "569" | "570" | "571" | "572" | "573" | "574" | "575" | "576" | "577" | "578" | "579" | "580" | "581" | "582" | "583" | "584" | "585" | "586" | "587" | "588" | "589" | "590" | "591" | "592" | "593" | "594" | "595" | "596" | "597" | "598" | "599" | "600" | "601" | "602" | "603" | "604" | "605" | "606" | "607" | "608" | "609" | "610" | "611" | "612" | "613" | "614" | "615" | "616" | "617" | "618" | "619" | "620" | "621" | "622" | "623" | "624" | "625" | "626" | "627" | "628" | "629" | "630" | "631" | "632" | "633" | "634" | "635" | "636" | "637" | "638" | "639" | "640" | "641" | "642" | "643" | "644" | "645" | "646" | "647" | "648" | "649" | "650" | "651" | "652" | "653" | "654" | "655" | "656" | "657" | "658" | "659" | "660" | "661" | "662" | "663" | "664" | "665" | "666" | "667" | "668" | "669" | "670" | "671" | "672" | "673" | "674" | "675" | "676" | "677" | "678" | "679" | "680" | "681" | "682" | "683" | "684" | "685" | "686" | "687" | "688" | "689" | "690" | "691" | "692" | "693" | "694" | "695" | "696" | "697" | "698" | "699" | "700" | "701" | "702" | "703" | "704" | "705" | "706" | "707" | "708" | "709" | "710" | "711" | "712" | "713" | "714" | "715" | "716" | "717" | "718" | "719" | "720" | "721" | "722" | "723" | "724" | "725" | "726" | "727" | "728" | "729" | "730" | "731" | "732" | "733" | "734" | "735" | "736" | "737" | "738" | "739" | "740" | "741" | "742" | "743" | "744" | "745" | "746" | "747" | "748" | "749" | "750" | "751" | "752" | "753" | "754" | "755" | "756" | "757" | "758" | "759" | "760" | "761" | "762" | "763" | "764" | "765" | "766" | "767" | "768" | "769" | "770" | "771" | "772" | "773" | "774" | "775" | "776" | "777" | "778" | "779" | "780" | "781" | "782" | "783" | "784" | "785" | "786" | "787" | "788" | "789" | "790" | "791" | "792" | "793" | "794" | "795" | "796" | "797" | "798" | "799" | "800" | "801" | "802" | "803" | "804" | "805" | "806" | "807" | "808" | "809" | "810" | "811" | "812" | "813" | "814" | "815" | "816" | "817" | "818" | "819" | "820" | "821" | "822" | "823" | "824" | "825" | "826" | "827" | "828" | "829" | "830" | "831" | "832" | "833" | "834" | "835" | "836" | "837" | "838" | "839" | "840" | "841" | "842" | "843" | "844" | "845" | "846" | "847" | "848" | "849" | "850" | "851" | "852" | "853" | "854" | "855" | "856" | "857" | "858" | "859" | "860" | "861" | "862" | "863" | "864" | "865" | "866" | "867" | "868" | "869" | "870" | "871" | "872" | "873" | "874" | "875" | "876" | "877" | "878" | "879" | "880" | "881" | "882" | "883" | "884" | "885" | "886" | "887" | "888" | "889" | "890" | "891" | "892" | "893" | "894" | "895" | "896" | "897" | "898" | "899" | "900" | "901" | "902" | "903" | "904" | "905" | "906" | "907" | "908" | "909" | "910" | "911" | "912" | "913" | "914" | "915" | "916" | "917" | "918" | "919" | "920" | "921" | "922" | "923" | "924" | "925" | "926" | "927" | "928" | "929" | "930" | "931" | "932" | "933" | "934" | "935" | "936" | "937" | "938" | "939" | "940" | "941" | "942" | "943" | "944" | "945" | "946" | "947" | "948" | "949" | "950" | "951" | "952" | "953" | "954" | "955" | "956" | "957" | "958" | "959" | "960" | "961" | "962" | "963" | "964" | "965" | "966" | "967" | "968" | "969" | "970" | "971" | "972" | "973" | "974" | "975" | "976" | "977" | "978" | "979" | "980" | "981" | "982" | "983" | "984" | "985" | "986" | "987" | "988" | "989" | "990" | "991" | "992" | "993" | "994" | "995" | "996" | "997" | "998" | "999" + +// Over five million instantiations for one statement. +type Wide = N["length"] extends 6 ? I : { [J in K]: Wide<[...N, 0], [J, I][0]> }[K]; +>Wide : Wide + +type WideAll = Wide<[], "">; +>WideAll : any + +// The same, but half of the instantiations already happened for another +// statement. +type Wide2 = N["length"] extends 6 ? I : { [J in K]: Wide2<[...N, 0], [J, I][0]> }[K]; +>Wide2 : Wide2 + +type Wide2Tail = Wide2<[0, 0, 0], "">; +>Wide2Tail : "000" | "001" | "002" | "003" | "004" | "005" | "006" | "007" | "008" | "009" | "010" | "011" | "012" | "013" | "014" | "015" | "016" | "017" | "018" | "019" | "020" | "021" | "022" | "023" | "024" | "025" | "026" | "027" | "028" | "029" | "030" | "031" | "032" | "033" | "034" | "035" | "036" | "037" | "038" | "039" | "040" | "041" | "042" | "043" | "044" | "045" | "046" | "047" | "048" | "049" | "050" | "051" | "052" | "053" | "054" | "055" | "056" | "057" | "058" | "059" | "060" | "061" | "062" | "063" | "064" | "065" | "066" | "067" | "068" | "069" | "070" | "071" | "072" | "073" | "074" | "075" | "076" | "077" | "078" | "079" | "080" | "081" | "082" | "083" | "084" | "085" | "086" | "087" | "088" | "089" | "090" | "091" | "092" | "093" | "094" | "095" | "096" | "097" | "098" | "099" | "100" | "101" | "102" | "103" | "104" | "105" | "106" | "107" | "108" | "109" | "110" | "111" | "112" | "113" | "114" | "115" | "116" | "117" | "118" | "119" | "120" | "121" | "122" | "123" | "124" | "125" | "126" | "127" | "128" | "129" | "130" | "131" | "132" | "133" | "134" | "135" | "136" | "137" | "138" | "139" | "140" | "141" | "142" | "143" | "144" | "145" | "146" | "147" | "148" | "149" | "150" | "151" | "152" | "153" | "154" | "155" | "156" | "157" | "158" | "159" | "160" | "161" | "162" | "163" | "164" | "165" | "166" | "167" | "168" | "169" | "170" | "171" | "172" | "173" | "174" | "175" | "176" | "177" | "178" | "179" | "180" | "181" | "182" | "183" | "184" | "185" | "186" | "187" | "188" | "189" | "190" | "191" | "192" | "193" | "194" | "195" | "196" | "197" | "198" | "199" | "200" | "201" | "202" | "203" | "204" | "205" | "206" | "207" | "208" | "209" | "210" | "211" | "212" | "213" | "214" | "215" | "216" | "217" | "218" | "219" | "220" | "221" | "222" | "223" | "224" | "225" | "226" | "227" | "228" | "229" | "230" | "231" | "232" | "233" | "234" | "235" | "236" | "237" | "238" | "239" | "240" | "241" | "242" | "243" | "244" | "245" | "246" | "247" | "248" | "249" | "250" | "251" | "252" | "253" | "254" | "255" | "256" | "257" | "258" | "259" | "260" | "261" | "262" | "263" | "264" | "265" | "266" | "267" | "268" | "269" | "270" | "271" | "272" | "273" | "274" | "275" | "276" | "277" | "278" | "279" | "280" | "281" | "282" | "283" | "284" | "285" | "286" | "287" | "288" | "289" | "290" | "291" | "292" | "293" | "294" | "295" | "296" | "297" | "298" | "299" | "300" | "301" | "302" | "303" | "304" | "305" | "306" | "307" | "308" | "309" | "310" | "311" | "312" | "313" | "314" | "315" | "316" | "317" | "318" | "319" | "320" | "321" | "322" | "323" | "324" | "325" | "326" | "327" | "328" | "329" | "330" | "331" | "332" | "333" | "334" | "335" | "336" | "337" | "338" | "339" | "340" | "341" | "342" | "343" | "344" | "345" | "346" | "347" | "348" | "349" | "350" | "351" | "352" | "353" | "354" | "355" | "356" | "357" | "358" | "359" | "360" | "361" | "362" | "363" | "364" | "365" | "366" | "367" | "368" | "369" | "370" | "371" | "372" | "373" | "374" | "375" | "376" | "377" | "378" | "379" | "380" | "381" | "382" | "383" | "384" | "385" | "386" | "387" | "388" | "389" | "390" | "391" | "392" | "393" | "394" | "395" | "396" | "397" | "398" | "399" | "400" | "401" | "402" | "403" | "404" | "405" | "406" | "407" | "408" | "409" | "410" | "411" | "412" | "413" | "414" | "415" | "416" | "417" | "418" | "419" | "420" | "421" | "422" | "423" | "424" | "425" | "426" | "427" | "428" | "429" | "430" | "431" | "432" | "433" | "434" | "435" | "436" | "437" | "438" | "439" | "440" | "441" | "442" | "443" | "444" | "445" | "446" | "447" | "448" | "449" | "450" | "451" | "452" | "453" | "454" | "455" | "456" | "457" | "458" | "459" | "460" | "461" | "462" | "463" | "464" | "465" | "466" | "467" | "468" | "469" | "470" | "471" | "472" | "473" | "474" | "475" | "476" | "477" | "478" | "479" | "480" | "481" | "482" | "483" | "484" | "485" | "486" | "487" | "488" | "489" | "490" | "491" | "492" | "493" | "494" | "495" | "496" | "497" | "498" | "499" | "500" | "501" | "502" | "503" | "504" | "505" | "506" | "507" | "508" | "509" | "510" | "511" | "512" | "513" | "514" | "515" | "516" | "517" | "518" | "519" | "520" | "521" | "522" | "523" | "524" | "525" | "526" | "527" | "528" | "529" | "530" | "531" | "532" | "533" | "534" | "535" | "536" | "537" | "538" | "539" | "540" | "541" | "542" | "543" | "544" | "545" | "546" | "547" | "548" | "549" | "550" | "551" | "552" | "553" | "554" | "555" | "556" | "557" | "558" | "559" | "560" | "561" | "562" | "563" | "564" | "565" | "566" | "567" | "568" | "569" | "570" | "571" | "572" | "573" | "574" | "575" | "576" | "577" | "578" | "579" | "580" | "581" | "582" | "583" | "584" | "585" | "586" | "587" | "588" | "589" | "590" | "591" | "592" | "593" | "594" | "595" | "596" | "597" | "598" | "599" | "600" | "601" | "602" | "603" | "604" | "605" | "606" | "607" | "608" | "609" | "610" | "611" | "612" | "613" | "614" | "615" | "616" | "617" | "618" | "619" | "620" | "621" | "622" | "623" | "624" | "625" | "626" | "627" | "628" | "629" | "630" | "631" | "632" | "633" | "634" | "635" | "636" | "637" | "638" | "639" | "640" | "641" | "642" | "643" | "644" | "645" | "646" | "647" | "648" | "649" | "650" | "651" | "652" | "653" | "654" | "655" | "656" | "657" | "658" | "659" | "660" | "661" | "662" | "663" | "664" | "665" | "666" | "667" | "668" | "669" | "670" | "671" | "672" | "673" | "674" | "675" | "676" | "677" | "678" | "679" | "680" | "681" | "682" | "683" | "684" | "685" | "686" | "687" | "688" | "689" | "690" | "691" | "692" | "693" | "694" | "695" | "696" | "697" | "698" | "699" | "700" | "701" | "702" | "703" | "704" | "705" | "706" | "707" | "708" | "709" | "710" | "711" | "712" | "713" | "714" | "715" | "716" | "717" | "718" | "719" | "720" | "721" | "722" | "723" | "724" | "725" | "726" | "727" | "728" | "729" | "730" | "731" | "732" | "733" | "734" | "735" | "736" | "737" | "738" | "739" | "740" | "741" | "742" | "743" | "744" | "745" | "746" | "747" | "748" | "749" | "750" | "751" | "752" | "753" | "754" | "755" | "756" | "757" | "758" | "759" | "760" | "761" | "762" | "763" | "764" | "765" | "766" | "767" | "768" | "769" | "770" | "771" | "772" | "773" | "774" | "775" | "776" | "777" | "778" | "779" | "780" | "781" | "782" | "783" | "784" | "785" | "786" | "787" | "788" | "789" | "790" | "791" | "792" | "793" | "794" | "795" | "796" | "797" | "798" | "799" | "800" | "801" | "802" | "803" | "804" | "805" | "806" | "807" | "808" | "809" | "810" | "811" | "812" | "813" | "814" | "815" | "816" | "817" | "818" | "819" | "820" | "821" | "822" | "823" | "824" | "825" | "826" | "827" | "828" | "829" | "830" | "831" | "832" | "833" | "834" | "835" | "836" | "837" | "838" | "839" | "840" | "841" | "842" | "843" | "844" | "845" | "846" | "847" | "848" | "849" | "850" | "851" | "852" | "853" | "854" | "855" | "856" | "857" | "858" | "859" | "860" | "861" | "862" | "863" | "864" | "865" | "866" | "867" | "868" | "869" | "870" | "871" | "872" | "873" | "874" | "875" | "876" | "877" | "878" | "879" | "880" | "881" | "882" | "883" | "884" | "885" | "886" | "887" | "888" | "889" | "890" | "891" | "892" | "893" | "894" | "895" | "896" | "897" | "898" | "899" | "900" | "901" | "902" | "903" | "904" | "905" | "906" | "907" | "908" | "909" | "910" | "911" | "912" | "913" | "914" | "915" | "916" | "917" | "918" | "919" | "920" | "921" | "922" | "923" | "924" | "925" | "926" | "927" | "928" | "929" | "930" | "931" | "932" | "933" | "934" | "935" | "936" | "937" | "938" | "939" | "940" | "941" | "942" | "943" | "944" | "945" | "946" | "947" | "948" | "949" | "950" | "951" | "952" | "953" | "954" | "955" | "956" | "957" | "958" | "959" | "960" | "961" | "962" | "963" | "964" | "965" | "966" | "967" | "968" | "969" | "970" | "971" | "972" | "973" | "974" | "975" | "976" | "977" | "978" | "979" | "980" | "981" | "982" | "983" | "984" | "985" | "986" | "987" | "988" | "989" | "990" | "991" | "992" | "993" | "994" | "995" | "996" | "997" | "998" | "999" + +type Wide2All = Wide2<[], "">; +>Wide2All : "000" | "001" | "002" | "003" | "004" | "005" | "006" | "007" | "008" | "009" | "010" | "011" | "012" | "013" | "014" | "015" | "016" | "017" | "018" | "019" | "020" | "021" | "022" | "023" | "024" | "025" | "026" | "027" | "028" | "029" | "030" | "031" | "032" | "033" | "034" | "035" | "036" | "037" | "038" | "039" | "040" | "041" | "042" | "043" | "044" | "045" | "046" | "047" | "048" | "049" | "050" | "051" | "052" | "053" | "054" | "055" | "056" | "057" | "058" | "059" | "060" | "061" | "062" | "063" | "064" | "065" | "066" | "067" | "068" | "069" | "070" | "071" | "072" | "073" | "074" | "075" | "076" | "077" | "078" | "079" | "080" | "081" | "082" | "083" | "084" | "085" | "086" | "087" | "088" | "089" | "090" | "091" | "092" | "093" | "094" | "095" | "096" | "097" | "098" | "099" | "100" | "101" | "102" | "103" | "104" | "105" | "106" | "107" | "108" | "109" | "110" | "111" | "112" | "113" | "114" | "115" | "116" | "117" | "118" | "119" | "120" | "121" | "122" | "123" | "124" | "125" | "126" | "127" | "128" | "129" | "130" | "131" | "132" | "133" | "134" | "135" | "136" | "137" | "138" | "139" | "140" | "141" | "142" | "143" | "144" | "145" | "146" | "147" | "148" | "149" | "150" | "151" | "152" | "153" | "154" | "155" | "156" | "157" | "158" | "159" | "160" | "161" | "162" | "163" | "164" | "165" | "166" | "167" | "168" | "169" | "170" | "171" | "172" | "173" | "174" | "175" | "176" | "177" | "178" | "179" | "180" | "181" | "182" | "183" | "184" | "185" | "186" | "187" | "188" | "189" | "190" | "191" | "192" | "193" | "194" | "195" | "196" | "197" | "198" | "199" | "200" | "201" | "202" | "203" | "204" | "205" | "206" | "207" | "208" | "209" | "210" | "211" | "212" | "213" | "214" | "215" | "216" | "217" | "218" | "219" | "220" | "221" | "222" | "223" | "224" | "225" | "226" | "227" | "228" | "229" | "230" | "231" | "232" | "233" | "234" | "235" | "236" | "237" | "238" | "239" | "240" | "241" | "242" | "243" | "244" | "245" | "246" | "247" | "248" | "249" | "250" | "251" | "252" | "253" | "254" | "255" | "256" | "257" | "258" | "259" | "260" | "261" | "262" | "263" | "264" | "265" | "266" | "267" | "268" | "269" | "270" | "271" | "272" | "273" | "274" | "275" | "276" | "277" | "278" | "279" | "280" | "281" | "282" | "283" | "284" | "285" | "286" | "287" | "288" | "289" | "290" | "291" | "292" | "293" | "294" | "295" | "296" | "297" | "298" | "299" | "300" | "301" | "302" | "303" | "304" | "305" | "306" | "307" | "308" | "309" | "310" | "311" | "312" | "313" | "314" | "315" | "316" | "317" | "318" | "319" | "320" | "321" | "322" | "323" | "324" | "325" | "326" | "327" | "328" | "329" | "330" | "331" | "332" | "333" | "334" | "335" | "336" | "337" | "338" | "339" | "340" | "341" | "342" | "343" | "344" | "345" | "346" | "347" | "348" | "349" | "350" | "351" | "352" | "353" | "354" | "355" | "356" | "357" | "358" | "359" | "360" | "361" | "362" | "363" | "364" | "365" | "366" | "367" | "368" | "369" | "370" | "371" | "372" | "373" | "374" | "375" | "376" | "377" | "378" | "379" | "380" | "381" | "382" | "383" | "384" | "385" | "386" | "387" | "388" | "389" | "390" | "391" | "392" | "393" | "394" | "395" | "396" | "397" | "398" | "399" | "400" | "401" | "402" | "403" | "404" | "405" | "406" | "407" | "408" | "409" | "410" | "411" | "412" | "413" | "414" | "415" | "416" | "417" | "418" | "419" | "420" | "421" | "422" | "423" | "424" | "425" | "426" | "427" | "428" | "429" | "430" | "431" | "432" | "433" | "434" | "435" | "436" | "437" | "438" | "439" | "440" | "441" | "442" | "443" | "444" | "445" | "446" | "447" | "448" | "449" | "450" | "451" | "452" | "453" | "454" | "455" | "456" | "457" | "458" | "459" | "460" | "461" | "462" | "463" | "464" | "465" | "466" | "467" | "468" | "469" | "470" | "471" | "472" | "473" | "474" | "475" | "476" | "477" | "478" | "479" | "480" | "481" | "482" | "483" | "484" | "485" | "486" | "487" | "488" | "489" | "490" | "491" | "492" | "493" | "494" | "495" | "496" | "497" | "498" | "499" | "500" | "501" | "502" | "503" | "504" | "505" | "506" | "507" | "508" | "509" | "510" | "511" | "512" | "513" | "514" | "515" | "516" | "517" | "518" | "519" | "520" | "521" | "522" | "523" | "524" | "525" | "526" | "527" | "528" | "529" | "530" | "531" | "532" | "533" | "534" | "535" | "536" | "537" | "538" | "539" | "540" | "541" | "542" | "543" | "544" | "545" | "546" | "547" | "548" | "549" | "550" | "551" | "552" | "553" | "554" | "555" | "556" | "557" | "558" | "559" | "560" | "561" | "562" | "563" | "564" | "565" | "566" | "567" | "568" | "569" | "570" | "571" | "572" | "573" | "574" | "575" | "576" | "577" | "578" | "579" | "580" | "581" | "582" | "583" | "584" | "585" | "586" | "587" | "588" | "589" | "590" | "591" | "592" | "593" | "594" | "595" | "596" | "597" | "598" | "599" | "600" | "601" | "602" | "603" | "604" | "605" | "606" | "607" | "608" | "609" | "610" | "611" | "612" | "613" | "614" | "615" | "616" | "617" | "618" | "619" | "620" | "621" | "622" | "623" | "624" | "625" | "626" | "627" | "628" | "629" | "630" | "631" | "632" | "633" | "634" | "635" | "636" | "637" | "638" | "639" | "640" | "641" | "642" | "643" | "644" | "645" | "646" | "647" | "648" | "649" | "650" | "651" | "652" | "653" | "654" | "655" | "656" | "657" | "658" | "659" | "660" | "661" | "662" | "663" | "664" | "665" | "666" | "667" | "668" | "669" | "670" | "671" | "672" | "673" | "674" | "675" | "676" | "677" | "678" | "679" | "680" | "681" | "682" | "683" | "684" | "685" | "686" | "687" | "688" | "689" | "690" | "691" | "692" | "693" | "694" | "695" | "696" | "697" | "698" | "699" | "700" | "701" | "702" | "703" | "704" | "705" | "706" | "707" | "708" | "709" | "710" | "711" | "712" | "713" | "714" | "715" | "716" | "717" | "718" | "719" | "720" | "721" | "722" | "723" | "724" | "725" | "726" | "727" | "728" | "729" | "730" | "731" | "732" | "733" | "734" | "735" | "736" | "737" | "738" | "739" | "740" | "741" | "742" | "743" | "744" | "745" | "746" | "747" | "748" | "749" | "750" | "751" | "752" | "753" | "754" | "755" | "756" | "757" | "758" | "759" | "760" | "761" | "762" | "763" | "764" | "765" | "766" | "767" | "768" | "769" | "770" | "771" | "772" | "773" | "774" | "775" | "776" | "777" | "778" | "779" | "780" | "781" | "782" | "783" | "784" | "785" | "786" | "787" | "788" | "789" | "790" | "791" | "792" | "793" | "794" | "795" | "796" | "797" | "798" | "799" | "800" | "801" | "802" | "803" | "804" | "805" | "806" | "807" | "808" | "809" | "810" | "811" | "812" | "813" | "814" | "815" | "816" | "817" | "818" | "819" | "820" | "821" | "822" | "823" | "824" | "825" | "826" | "827" | "828" | "829" | "830" | "831" | "832" | "833" | "834" | "835" | "836" | "837" | "838" | "839" | "840" | "841" | "842" | "843" | "844" | "845" | "846" | "847" | "848" | "849" | "850" | "851" | "852" | "853" | "854" | "855" | "856" | "857" | "858" | "859" | "860" | "861" | "862" | "863" | "864" | "865" | "866" | "867" | "868" | "869" | "870" | "871" | "872" | "873" | "874" | "875" | "876" | "877" | "878" | "879" | "880" | "881" | "882" | "883" | "884" | "885" | "886" | "887" | "888" | "889" | "890" | "891" | "892" | "893" | "894" | "895" | "896" | "897" | "898" | "899" | "900" | "901" | "902" | "903" | "904" | "905" | "906" | "907" | "908" | "909" | "910" | "911" | "912" | "913" | "914" | "915" | "916" | "917" | "918" | "919" | "920" | "921" | "922" | "923" | "924" | "925" | "926" | "927" | "928" | "929" | "930" | "931" | "932" | "933" | "934" | "935" | "936" | "937" | "938" | "939" | "940" | "941" | "942" | "943" | "944" | "945" | "946" | "947" | "948" | "949" | "950" | "951" | "952" | "953" | "954" | "955" | "956" | "957" | "958" | "959" | "960" | "961" | "962" | "963" | "964" | "965" | "966" | "967" | "968" | "969" | "970" | "971" | "972" | "973" | "974" | "975" | "976" | "977" | "978" | "979" | "980" | "981" | "982" | "983" | "984" | "985" | "986" | "987" | "988" | "989" | "990" | "991" | "992" | "993" | "994" | "995" | "996" | "997" | "998" | "999" + +// Over a hundred nested instantiations, half of which already happened for +// another statement. +type Deep = N["length"] extends 60 ? never : Deep<[...N, 0]> | N["length"]; +>Deep : Deep + +type DeepTail = Deep<[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]>; +>DeepTail : 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 + +type DeepAll = Deep<[]>; +>DeepAll : 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 + diff --git a/tsc/testdata/baselines/reference/compiler/relationDeeplyNestedCheckOrder.symbols b/tsc/testdata/baselines/reference/compiler/relationDeeplyNestedCheckOrder.symbols new file mode 100644 index 0000000000000..50e733d8606c1 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/relationDeeplyNestedCheckOrder.symbols @@ -0,0 +1,53 @@ +//// [tests/cases/compiler/relationDeeplyNestedCheckOrder.ts] //// + +=== relationDeeplyNestedCheckOrder.ts === +// Relating 'B<{ a: string }>' to 'B<{ a: "lit" }>' eventually relates 'string' +// to '"lit"' through 'm0.m1.a.m0.m1'. Relating the 'A' instantiations first +// reaches the same comparison only after giving up on deeply nested types, +// which must not make relating the 'B' instantiations succeed afterwards. + +type A = { m0: (x: B) => void; m1: { [K in keyof T]: B } }; +>A : Symbol(A, Decl(relationDeeplyNestedCheckOrder.ts, 0, 0)) +>T : Symbol(T, Decl(relationDeeplyNestedCheckOrder.ts, 5, 7)) +>m0 : Symbol(m0, Decl(relationDeeplyNestedCheckOrder.ts, 5, 13)) +>x : Symbol(x, Decl(relationDeeplyNestedCheckOrder.ts, 5, 19)) +>B : Symbol(B, Decl(relationDeeplyNestedCheckOrder.ts, 5, 71)) +>T : Symbol(T, Decl(relationDeeplyNestedCheckOrder.ts, 5, 7)) +>m1 : Symbol(m1, Decl(relationDeeplyNestedCheckOrder.ts, 5, 36)) +>K : Symbol(K, Decl(relationDeeplyNestedCheckOrder.ts, 5, 44)) +>T : Symbol(T, Decl(relationDeeplyNestedCheckOrder.ts, 5, 7)) +>B : Symbol(B, Decl(relationDeeplyNestedCheckOrder.ts, 5, 71)) +>T : Symbol(T, Decl(relationDeeplyNestedCheckOrder.ts, 5, 7)) +>K : Symbol(K, Decl(relationDeeplyNestedCheckOrder.ts, 5, 44)) + +type B = { m0: A }; +>B : Symbol(B, Decl(relationDeeplyNestedCheckOrder.ts, 5, 71)) +>T : Symbol(T, Decl(relationDeeplyNestedCheckOrder.ts, 6, 7)) +>m0 : Symbol(m0, Decl(relationDeeplyNestedCheckOrder.ts, 6, 13)) +>A : Symbol(A, Decl(relationDeeplyNestedCheckOrder.ts, 0, 0)) +>T : Symbol(T, Decl(relationDeeplyNestedCheckOrder.ts, 6, 7)) + +declare let a1: A<{ a: string }>, a2: A<{ a: "lit" }>; +>a1 : Symbol(a1, Decl(relationDeeplyNestedCheckOrder.ts, 8, 11)) +>A : Symbol(A, Decl(relationDeeplyNestedCheckOrder.ts, 0, 0)) +>a : Symbol(a, Decl(relationDeeplyNestedCheckOrder.ts, 8, 19)) +>a2 : Symbol(a2, Decl(relationDeeplyNestedCheckOrder.ts, 8, 33)) +>A : Symbol(A, Decl(relationDeeplyNestedCheckOrder.ts, 0, 0)) +>a : Symbol(a, Decl(relationDeeplyNestedCheckOrder.ts, 8, 41)) + +declare let b1: B<{ a: string }>, b2: B<{ a: "lit" }>; +>b1 : Symbol(b1, Decl(relationDeeplyNestedCheckOrder.ts, 9, 11)) +>B : Symbol(B, Decl(relationDeeplyNestedCheckOrder.ts, 5, 71)) +>a : Symbol(a, Decl(relationDeeplyNestedCheckOrder.ts, 9, 19)) +>b2 : Symbol(b2, Decl(relationDeeplyNestedCheckOrder.ts, 9, 33)) +>B : Symbol(B, Decl(relationDeeplyNestedCheckOrder.ts, 5, 71)) +>a : Symbol(a, Decl(relationDeeplyNestedCheckOrder.ts, 9, 41)) + +a2 = a1; +>a2 : Symbol(a2, Decl(relationDeeplyNestedCheckOrder.ts, 8, 33)) +>a1 : Symbol(a1, Decl(relationDeeplyNestedCheckOrder.ts, 8, 11)) + +b2 = b1; // Error +>b2 : Symbol(b2, Decl(relationDeeplyNestedCheckOrder.ts, 9, 33)) +>b1 : Symbol(b1, Decl(relationDeeplyNestedCheckOrder.ts, 9, 11)) + diff --git a/tsc/testdata/baselines/reference/compiler/relationDeeplyNestedCheckOrder.types b/tsc/testdata/baselines/reference/compiler/relationDeeplyNestedCheckOrder.types new file mode 100644 index 0000000000000..a7755fb5d5533 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/relationDeeplyNestedCheckOrder.types @@ -0,0 +1,40 @@ +//// [tests/cases/compiler/relationDeeplyNestedCheckOrder.ts] //// + +=== relationDeeplyNestedCheckOrder.ts === +// Relating 'B<{ a: string }>' to 'B<{ a: "lit" }>' eventually relates 'string' +// to '"lit"' through 'm0.m1.a.m0.m1'. Relating the 'A' instantiations first +// reaches the same comparison only after giving up on deeply nested types, +// which must not make relating the 'B' instantiations succeed afterwards. + +type A = { m0: (x: B) => void; m1: { [K in keyof T]: B } }; +>A : A +>m0 : (x: B) => void +>x : B +>m1 : { [K in keyof T]: B; } + +type B = { m0: A }; +>B : B +>m0 : A + +declare let a1: A<{ a: string }>, a2: A<{ a: "lit" }>; +>a1 : A<{ a: string; }> +>a : string +>a2 : A<{ a: "lit"; }> +>a : "lit" + +declare let b1: B<{ a: string }>, b2: B<{ a: "lit" }>; +>b1 : B<{ a: string; }> +>a : string +>b2 : B<{ a: "lit"; }> +>a : "lit" + +a2 = a1; +>a2 = a1 : A<{ a: string; }> +>a2 : A<{ a: "lit"; }> +>a1 : A<{ a: string; }> + +b2 = b1; // Error +>b2 = b1 : B<{ a: string; }> +>b2 : B<{ a: "lit"; }> +>b1 : B<{ a: string; }> + diff --git a/tsc/testdata/baselines/reference/compiler/relationMaybeCheckOrder.errors.txt b/tsc/testdata/baselines/reference/compiler/relationMaybeCheckOrder.errors.txt new file mode 100644 index 0000000000000..88dee4e5a8f7e --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/relationMaybeCheckOrder.errors.txt @@ -0,0 +1,31 @@ +relationMaybeCheckOrder.ts(8,32): error TS2322: Type 'B' is not assignable to type 'string | number | symbol'. +relationMaybeCheckOrder.ts(18,11): error TS2322: Type '2' is not assignable to type '1'. + + +==== relationMaybeCheckOrder.ts (2 errors) ==== + // Relating to 'keyof M' rejects keys that relate only by assuming a + // comparison still in progress. Relating 'A' to 'B' assumes only itself + // along 'next', so it completes on its own and must be accepted whether + // or not the call to 'h' related 'A' to 'B' first. + + interface A { next: A; v: "a" } + interface B { next: B; v: string } + type M = { [K in keyof T as B]: 1 }; + ~ +!!! error TS2322: Type 'B' is not assignable to type 'string | number | symbol'. + + declare const a: A; + declare function h(x: B): 1; + declare function h(x: unknown): 2; + + function f() { + function g(x: keyof M): 1; + function g(x: unknown): 2; + function g(x: unknown) { return 1 as any; } + const r: 1 = g(a); + ~ +!!! error TS2322: Type '2' is not assignable to type '1'. + } + + const w: 1 = h(a); + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/relationMaybeCheckOrder.symbols b/tsc/testdata/baselines/reference/compiler/relationMaybeCheckOrder.symbols new file mode 100644 index 0000000000000..c577599a23c3c --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/relationMaybeCheckOrder.symbols @@ -0,0 +1,69 @@ +//// [tests/cases/compiler/relationMaybeCheckOrder.ts] //// + +=== relationMaybeCheckOrder.ts === +// Relating to 'keyof M' rejects keys that relate only by assuming a +// comparison still in progress. Relating 'A' to 'B' assumes only itself +// along 'next', so it completes on its own and must be accepted whether +// or not the call to 'h' related 'A' to 'B' first. + +interface A { next: A; v: "a" } +>A : Symbol(A, Decl(relationMaybeCheckOrder.ts, 0, 0)) +>next : Symbol(A.next, Decl(relationMaybeCheckOrder.ts, 5, 13)) +>A : Symbol(A, Decl(relationMaybeCheckOrder.ts, 0, 0)) +>v : Symbol(A.v, Decl(relationMaybeCheckOrder.ts, 5, 22)) + +interface B { next: B; v: string } +>B : Symbol(B, Decl(relationMaybeCheckOrder.ts, 5, 31)) +>next : Symbol(B.next, Decl(relationMaybeCheckOrder.ts, 6, 13)) +>B : Symbol(B, Decl(relationMaybeCheckOrder.ts, 5, 31)) +>v : Symbol(B.v, Decl(relationMaybeCheckOrder.ts, 6, 22)) + +type M = { [K in keyof T as B]: 1 }; +>M : Symbol(M, Decl(relationMaybeCheckOrder.ts, 6, 34)) +>T : Symbol(T, Decl(relationMaybeCheckOrder.ts, 7, 7)) +>K : Symbol(K, Decl(relationMaybeCheckOrder.ts, 7, 15)) +>T : Symbol(T, Decl(relationMaybeCheckOrder.ts, 7, 7)) +>B : Symbol(B, Decl(relationMaybeCheckOrder.ts, 5, 31)) + +declare const a: A; +>a : Symbol(a, Decl(relationMaybeCheckOrder.ts, 9, 13)) +>A : Symbol(A, Decl(relationMaybeCheckOrder.ts, 0, 0)) + +declare function h(x: B): 1; +>h : Symbol(h, Decl(relationMaybeCheckOrder.ts, 9, 19), Decl(relationMaybeCheckOrder.ts, 10, 28)) +>x : Symbol(x, Decl(relationMaybeCheckOrder.ts, 10, 19)) +>B : Symbol(B, Decl(relationMaybeCheckOrder.ts, 5, 31)) + +declare function h(x: unknown): 2; +>h : Symbol(h, Decl(relationMaybeCheckOrder.ts, 9, 19), Decl(relationMaybeCheckOrder.ts, 10, 28)) +>x : Symbol(x, Decl(relationMaybeCheckOrder.ts, 11, 19)) + +function f() { +>f : Symbol(f, Decl(relationMaybeCheckOrder.ts, 11, 34)) +>T : Symbol(T, Decl(relationMaybeCheckOrder.ts, 13, 11)) + + function g(x: keyof M): 1; +>g : Symbol(g, Decl(relationMaybeCheckOrder.ts, 13, 17), Decl(relationMaybeCheckOrder.ts, 14, 33), Decl(relationMaybeCheckOrder.ts, 15, 30)) +>x : Symbol(x, Decl(relationMaybeCheckOrder.ts, 14, 15)) +>M : Symbol(M, Decl(relationMaybeCheckOrder.ts, 6, 34)) +>T : Symbol(T, Decl(relationMaybeCheckOrder.ts, 13, 11)) + + function g(x: unknown): 2; +>g : Symbol(g, Decl(relationMaybeCheckOrder.ts, 13, 17), Decl(relationMaybeCheckOrder.ts, 14, 33), Decl(relationMaybeCheckOrder.ts, 15, 30)) +>x : Symbol(x, Decl(relationMaybeCheckOrder.ts, 15, 15)) + + function g(x: unknown) { return 1 as any; } +>g : Symbol(g, Decl(relationMaybeCheckOrder.ts, 13, 17), Decl(relationMaybeCheckOrder.ts, 14, 33), Decl(relationMaybeCheckOrder.ts, 15, 30)) +>x : Symbol(x, Decl(relationMaybeCheckOrder.ts, 16, 15)) + + const r: 1 = g(a); +>r : Symbol(r, Decl(relationMaybeCheckOrder.ts, 17, 9)) +>g : Symbol(g, Decl(relationMaybeCheckOrder.ts, 13, 17), Decl(relationMaybeCheckOrder.ts, 14, 33), Decl(relationMaybeCheckOrder.ts, 15, 30)) +>a : Symbol(a, Decl(relationMaybeCheckOrder.ts, 9, 13)) +} + +const w: 1 = h(a); +>w : Symbol(w, Decl(relationMaybeCheckOrder.ts, 20, 5)) +>h : Symbol(h, Decl(relationMaybeCheckOrder.ts, 9, 19), Decl(relationMaybeCheckOrder.ts, 10, 28)) +>a : Symbol(a, Decl(relationMaybeCheckOrder.ts, 9, 13)) + diff --git a/tsc/testdata/baselines/reference/compiler/relationMaybeCheckOrder.types b/tsc/testdata/baselines/reference/compiler/relationMaybeCheckOrder.types new file mode 100644 index 0000000000000..ecbee15a795d4 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/relationMaybeCheckOrder.types @@ -0,0 +1,60 @@ +//// [tests/cases/compiler/relationMaybeCheckOrder.ts] //// + +=== relationMaybeCheckOrder.ts === +// Relating to 'keyof M' rejects keys that relate only by assuming a +// comparison still in progress. Relating 'A' to 'B' assumes only itself +// along 'next', so it completes on its own and must be accepted whether +// or not the call to 'h' related 'A' to 'B' first. + +interface A { next: A; v: "a" } +>next : A +>v : "a" + +interface B { next: B; v: string } +>next : B +>v : string + +type M = { [K in keyof T as B]: 1 }; +>M : M + +declare const a: A; +>a : A + +declare function h(x: B): 1; +>h : { (x: B): 1; (x: unknown): 2; } +>x : B + +declare function h(x: unknown): 2; +>h : { (x: B): 1; (x: unknown): 2; } +>x : unknown + +function f() { +>f : () => void + + function g(x: keyof M): 1; +>g : { (x: keyof M): 1; (x: unknown): 2; } +>x : keyof M + + function g(x: unknown): 2; +>g : { (x: keyof M): 1; (x: unknown): 2; } +>x : unknown + + function g(x: unknown) { return 1 as any; } +>g : { (x: keyof M): 1; (x: unknown): 2; } +>x : unknown +>1 as any : any +>1 : 1 + + const r: 1 = g(a); +>r : 1 +>g(a) : 2 +>g : { (x: keyof M): 1; (x: unknown): 2; } +>a : A +} + +const w: 1 = h(a); +>w : 1 +>h(a) : 1 +>h : { (x: B): 1; (x: unknown): 2; } +>a : A + diff --git a/tsc/testdata/baselines/reference/compiler/varianceCycleCachedResults.errors.txt b/tsc/testdata/baselines/reference/compiler/varianceCycleCachedResults.errors.txt new file mode 100644 index 0000000000000..fed3dca53a0ed --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/varianceCycleCachedResults.errors.txt @@ -0,0 +1,25 @@ +first.ts(3,1): error TS2322: Type 'Box' is not assignable to type 'Box'. + Type 'number' is not assignable to type 'string'. + + +==== first.ts (1 errors) ==== + declare let b1: Box; + declare let b2: Box; + b1 = b2; + ~~ +!!! error TS2322: Type 'Box' is not assignable to type 'Box'. +!!! error TS2322: Type 'number' is not assignable to type 'string'. + +==== box.ts (0 errors) ==== + declare let a1: Box; + declare let a2: Box; + declare const cond: boolean; + class Box { + value!: T; + m() { + if (cond) return a1; + return a2; + } + } + const r = new Box().m(); + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/varianceCycleCachedResults.js b/tsc/testdata/baselines/reference/compiler/varianceCycleCachedResults.js new file mode 100644 index 0000000000000..1cc3125377745 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/varianceCycleCachedResults.js @@ -0,0 +1,35 @@ +//// [tests/cases/compiler/varianceCycleCachedResults.ts] //// + +//// [first.ts] +declare let b1: Box; +declare let b2: Box; +b1 = b2; + +//// [box.ts] +declare let a1: Box; +declare let a2: Box; +declare const cond: boolean; +class Box { + value!: T; + m() { + if (cond) return a1; + return a2; + } +} +const r = new Box().m(); + + +//// [first.js] +"use strict"; +b1 = b2; +//// [box.js] +"use strict"; +class Box { + value; + m() { + if (cond) + return a1; + return a2; + } +} +const r = new Box().m(); diff --git a/tsc/testdata/baselines/reference/compiler/varianceCycleCachedResults.symbols b/tsc/testdata/baselines/reference/compiler/varianceCycleCachedResults.symbols new file mode 100644 index 0000000000000..84c44e9268207 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/varianceCycleCachedResults.symbols @@ -0,0 +1,52 @@ +//// [tests/cases/compiler/varianceCycleCachedResults.ts] //// + +=== first.ts === +declare let b1: Box; +>b1 : Symbol(b1, Decl(first.ts, 0, 11)) +>Box : Symbol(Box, Decl(box.ts, 2, 28)) + +declare let b2: Box; +>b2 : Symbol(b2, Decl(first.ts, 1, 11)) +>Box : Symbol(Box, Decl(box.ts, 2, 28)) + +b1 = b2; +>b1 : Symbol(b1, Decl(first.ts, 0, 11)) +>b2 : Symbol(b2, Decl(first.ts, 1, 11)) + +=== box.ts === +declare let a1: Box; +>a1 : Symbol(a1, Decl(box.ts, 0, 11)) +>Box : Symbol(Box, Decl(box.ts, 2, 28)) + +declare let a2: Box; +>a2 : Symbol(a2, Decl(box.ts, 1, 11)) +>Box : Symbol(Box, Decl(box.ts, 2, 28)) + +declare const cond: boolean; +>cond : Symbol(cond, Decl(box.ts, 2, 13)) + +class Box { +>Box : Symbol(Box, Decl(box.ts, 2, 28)) +>T : Symbol(T, Decl(box.ts, 3, 10)) + + value!: T; +>value : Symbol(Box.value, Decl(box.ts, 3, 14)) +>T : Symbol(T, Decl(box.ts, 3, 10)) + + m() { +>m : Symbol(Box.m, Decl(box.ts, 4, 14)) + + if (cond) return a1; +>cond : Symbol(cond, Decl(box.ts, 2, 13)) +>a1 : Symbol(a1, Decl(box.ts, 0, 11)) + + return a2; +>a2 : Symbol(a2, Decl(box.ts, 1, 11)) + } +} +const r = new Box().m(); +>r : Symbol(r, Decl(box.ts, 10, 5)) +>new Box().m : Symbol(Box.m, Decl(box.ts, 4, 14)) +>Box : Symbol(Box, Decl(box.ts, 2, 28)) +>m : Symbol(Box.m, Decl(box.ts, 4, 14)) + diff --git a/tsc/testdata/baselines/reference/compiler/varianceCycleCachedResults.types b/tsc/testdata/baselines/reference/compiler/varianceCycleCachedResults.types new file mode 100644 index 0000000000000..c5448fc75d3ab --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/varianceCycleCachedResults.types @@ -0,0 +1,49 @@ +//// [tests/cases/compiler/varianceCycleCachedResults.ts] //// + +=== first.ts === +declare let b1: Box; +>b1 : Box + +declare let b2: Box; +>b2 : Box + +b1 = b2; +>b1 = b2 : Box +>b1 : Box +>b2 : Box + +=== box.ts === +declare let a1: Box; +>a1 : Box + +declare let a2: Box; +>a2 : Box + +declare const cond: boolean; +>cond : boolean + +class Box { +>Box : Box + + value!: T; +>value : T + + m() { +>m : () => Box + + if (cond) return a1; +>cond : boolean +>a1 : Box + + return a2; +>a2 : Box + } +} +const r = new Box().m(); +>r : Box +>new Box().m() : Box +>new Box().m : () => Box +>new Box() : Box +>Box : typeof Box +>m : () => Box + diff --git a/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.errors.txt b/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.errors.txt new file mode 100644 index 0000000000000..d7a540fb6524a --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.errors.txt @@ -0,0 +1,29 @@ +varianceCycleDiscardedDiagnostics.ts(12,5): error TS7022: 'Value' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. + + +==== varianceCycleDiscardedDiagnostics.ts (1 errors) ==== + // Measuring the variances of Bar resolves the type of Value, which picks an + // overload by relating Foo to Foo while the variances of Foo are + // still a guess. Diagnostics from that attempt must not outlive it. + + interface A { a: string } + interface B { foo: string } + declare function pick(x: Foo): A; + declare function pick(x: object): B; + + class Bar { + x!: T; + Value = pick(new Foo(this)).foo; + ~~~~~ +!!! error TS7022: 'Value' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. + } + + class Foo { + bar!: Bar; + constructor(bar: Bar) { + this.bar = bar; + } + } + + const v: number = new Bar().Value; + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.symbols b/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.symbols new file mode 100644 index 0000000000000..3da4d35f8204d --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.symbols @@ -0,0 +1,71 @@ +//// [tests/cases/compiler/varianceCycleDiscardedDiagnostics.ts] //// + +=== varianceCycleDiscardedDiagnostics.ts === +// Measuring the variances of Bar resolves the type of Value, which picks an +// overload by relating Foo to Foo while the variances of Foo are +// still a guess. Diagnostics from that attempt must not outlive it. + +interface A { a: string } +>A : Symbol(A, Decl(varianceCycleDiscardedDiagnostics.ts, 0, 0)) +>a : Symbol(A.a, Decl(varianceCycleDiscardedDiagnostics.ts, 4, 13)) + +interface B { foo: string } +>B : Symbol(B, Decl(varianceCycleDiscardedDiagnostics.ts, 4, 25)) +>foo : Symbol(B.foo, Decl(varianceCycleDiscardedDiagnostics.ts, 5, 13)) + +declare function pick(x: Foo): A; +>pick : Symbol(pick, Decl(varianceCycleDiscardedDiagnostics.ts, 5, 27), Decl(varianceCycleDiscardedDiagnostics.ts, 6, 41)) +>x : Symbol(x, Decl(varianceCycleDiscardedDiagnostics.ts, 6, 22)) +>Foo : Symbol(Foo, Decl(varianceCycleDiscardedDiagnostics.ts, 12, 1)) +>A : Symbol(A, Decl(varianceCycleDiscardedDiagnostics.ts, 0, 0)) + +declare function pick(x: object): B; +>pick : Symbol(pick, Decl(varianceCycleDiscardedDiagnostics.ts, 5, 27), Decl(varianceCycleDiscardedDiagnostics.ts, 6, 41)) +>x : Symbol(x, Decl(varianceCycleDiscardedDiagnostics.ts, 7, 22)) +>B : Symbol(B, Decl(varianceCycleDiscardedDiagnostics.ts, 4, 25)) + +class Bar { +>Bar : Symbol(Bar, Decl(varianceCycleDiscardedDiagnostics.ts, 7, 36)) +>T : Symbol(T, Decl(varianceCycleDiscardedDiagnostics.ts, 9, 10)) + + x!: T; +>x : Symbol(Bar.x, Decl(varianceCycleDiscardedDiagnostics.ts, 9, 14)) +>T : Symbol(T, Decl(varianceCycleDiscardedDiagnostics.ts, 9, 10)) + + Value = pick(new Foo(this)).foo; +>Value : Symbol(Bar.Value, Decl(varianceCycleDiscardedDiagnostics.ts, 10, 10)) +>pick(new Foo(this)).foo : Symbol(B.foo, Decl(varianceCycleDiscardedDiagnostics.ts, 5, 13)) +>pick : Symbol(pick, Decl(varianceCycleDiscardedDiagnostics.ts, 5, 27), Decl(varianceCycleDiscardedDiagnostics.ts, 6, 41)) +>Foo : Symbol(Foo, Decl(varianceCycleDiscardedDiagnostics.ts, 12, 1)) +>this : Symbol(Bar, Decl(varianceCycleDiscardedDiagnostics.ts, 7, 36)) +>foo : Symbol(B.foo, Decl(varianceCycleDiscardedDiagnostics.ts, 5, 13)) +} + +class Foo { +>Foo : Symbol(Foo, Decl(varianceCycleDiscardedDiagnostics.ts, 12, 1)) +>T : Symbol(T, Decl(varianceCycleDiscardedDiagnostics.ts, 14, 10)) + + bar!: Bar; +>bar : Symbol(Foo.bar, Decl(varianceCycleDiscardedDiagnostics.ts, 14, 14)) +>Bar : Symbol(Bar, Decl(varianceCycleDiscardedDiagnostics.ts, 7, 36)) +>T : Symbol(T, Decl(varianceCycleDiscardedDiagnostics.ts, 14, 10)) + + constructor(bar: Bar) { +>bar : Symbol(bar, Decl(varianceCycleDiscardedDiagnostics.ts, 16, 16)) +>Bar : Symbol(Bar, Decl(varianceCycleDiscardedDiagnostics.ts, 7, 36)) +>T : Symbol(T, Decl(varianceCycleDiscardedDiagnostics.ts, 14, 10)) + + this.bar = bar; +>this.bar : Symbol(Foo.bar, Decl(varianceCycleDiscardedDiagnostics.ts, 14, 14)) +>this : Symbol(Foo, Decl(varianceCycleDiscardedDiagnostics.ts, 12, 1)) +>bar : Symbol(Foo.bar, Decl(varianceCycleDiscardedDiagnostics.ts, 14, 14)) +>bar : Symbol(bar, Decl(varianceCycleDiscardedDiagnostics.ts, 16, 16)) + } +} + +const v: number = new Bar().Value; +>v : Symbol(v, Decl(varianceCycleDiscardedDiagnostics.ts, 21, 5)) +>new Bar().Value : Symbol(Bar.Value, Decl(varianceCycleDiscardedDiagnostics.ts, 10, 10)) +>Bar : Symbol(Bar, Decl(varianceCycleDiscardedDiagnostics.ts, 7, 36)) +>Value : Symbol(Bar.Value, Decl(varianceCycleDiscardedDiagnostics.ts, 10, 10)) + diff --git a/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.types b/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.types new file mode 100644 index 0000000000000..2b4d9d34b6775 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.types @@ -0,0 +1,63 @@ +//// [tests/cases/compiler/varianceCycleDiscardedDiagnostics.ts] //// + +=== varianceCycleDiscardedDiagnostics.ts === +// Measuring the variances of Bar resolves the type of Value, which picks an +// overload by relating Foo to Foo while the variances of Foo are +// still a guess. Diagnostics from that attempt must not outlive it. + +interface A { a: string } +>a : string + +interface B { foo: string } +>foo : string + +declare function pick(x: Foo): A; +>pick : { (x: Foo): A; (x: object): B; } +>x : Foo + +declare function pick(x: object): B; +>pick : { (x: Foo): A; (x: object): B; } +>x : object + +class Bar { +>Bar : Bar + + x!: T; +>x : T + + Value = pick(new Foo(this)).foo; +>Value : any +>pick(new Foo(this)).foo : string +>pick(new Foo(this)) : B +>pick : { (x: Foo): A; (x: object): B; } +>new Foo(this) : Foo +>Foo : typeof Foo +>this : this +>foo : string +} + +class Foo { +>Foo : Foo + + bar!: Bar; +>bar : Bar + + constructor(bar: Bar) { +>bar : Bar + + this.bar = bar; +>this.bar = bar : Bar +>this.bar : Bar +>this : this +>bar : Bar +>bar : Bar + } +} + +const v: number = new Bar().Value; +>v : number +>new Bar().Value : any +>new Bar() : Bar +>Bar : typeof Bar +>Value : any + diff --git a/tsc/testdata/baselines/reference/compiler/varianceCycleEntryOrder.errors.txt b/tsc/testdata/baselines/reference/compiler/varianceCycleEntryOrder.errors.txt new file mode 100644 index 0000000000000..3093fe2786a2e --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/varianceCycleEntryOrder.errors.txt @@ -0,0 +1,78 @@ +barFirst.ts(9,1): error TS2322: Type 'Bar<"lit">' is not assignable to type 'Bar'. + Type 'string' is not assignable to type '"lit"'. +barFirst.ts(10,1): error TS2322: Type 'Foo' is not assignable to type 'Foo<"lit">'. + Types of property 'x' are incompatible. + Type 'string' is not assignable to type '"lit"'. +barFirst.ts(11,1): error TS2322: Type 'Foo<"lit">' is not assignable to type 'Foo'. + Types of property 'b' are incompatible. + Type 'Bar>' is not assignable to type 'Bar>'. + Type 'Foo' is not assignable to type 'Foo<"lit">'. + Types of property 'x' are incompatible. + Type 'string' is not assignable to type '"lit"'. +fooFirst.ts(8,1): error TS2322: Type 'Foo' is not assignable to type 'Foo<"lit">'. + Types of property 'x' are incompatible. + Type 'string' is not assignable to type '"lit"'. +fooFirst.ts(9,1): error TS2322: Type 'Foo<"lit">' is not assignable to type 'Foo'. + Types of property 'b' are incompatible. + Type 'Bar>' is not assignable to type 'Bar>'. + Type 'Foo' is not assignable to type 'Foo<"lit">'. + Types of property 'x' are incompatible. + Type 'string' is not assignable to type '"lit"'. +fooFirst.ts(11,1): error TS2322: Type 'Bar<"lit">' is not assignable to type 'Bar'. + Type 'string' is not assignable to type '"lit"'. + + +==== fooFirst.ts (3 errors) ==== + export {}; + + interface Foo { x: T; b: Bar> } + interface Bar { f: (u: U) => void; foo: Foo> } + + declare let fs: Foo, fl: Foo<"lit">; + declare let bs: Bar, bl: Bar<"lit">; + fl = fs; // Error + ~~ +!!! error TS2322: Type 'Foo' is not assignable to type 'Foo<"lit">'. +!!! error TS2322: Types of property 'x' are incompatible. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. + fs = fl; // Error + ~~ +!!! error TS2322: Type 'Foo<"lit">' is not assignable to type 'Foo'. +!!! error TS2322: Types of property 'b' are incompatible. +!!! error TS2322: Type 'Bar>' is not assignable to type 'Bar>'. +!!! error TS2322: Type 'Foo' is not assignable to type 'Foo<"lit">'. +!!! error TS2322: Types of property 'x' are incompatible. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. + bl = bs; // Error + bs = bl; // Error + ~~ +!!! error TS2322: Type 'Bar<"lit">' is not assignable to type 'Bar'. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. + +==== barFirst.ts (3 errors) ==== + export {}; + + interface Foo { x: T; b: Bar> } + interface Bar { f: (u: U) => void; foo: Foo> } + + declare let fs: Foo, fl: Foo<"lit">; + declare let bs: Bar, bl: Bar<"lit">; + bl = bs; // Error + bs = bl; // Error + ~~ +!!! error TS2322: Type 'Bar<"lit">' is not assignable to type 'Bar'. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. + fl = fs; // Error + ~~ +!!! error TS2322: Type 'Foo' is not assignable to type 'Foo<"lit">'. +!!! error TS2322: Types of property 'x' are incompatible. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. + fs = fl; // Error + ~~ +!!! error TS2322: Type 'Foo<"lit">' is not assignable to type 'Foo'. +!!! error TS2322: Types of property 'b' are incompatible. +!!! error TS2322: Type 'Bar>' is not assignable to type 'Bar>'. +!!! error TS2322: Type 'Foo' is not assignable to type 'Foo<"lit">'. +!!! error TS2322: Types of property 'x' are incompatible. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/varianceCycleEntryOrder.symbols b/tsc/testdata/baselines/reference/compiler/varianceCycleEntryOrder.symbols new file mode 100644 index 0000000000000..478f02d4a04a7 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/varianceCycleEntryOrder.symbols @@ -0,0 +1,106 @@ +//// [tests/cases/compiler/varianceCycleEntryOrder.ts] //// + +=== fooFirst.ts === +export {}; + +interface Foo { x: T; b: Bar> } +>Foo : Symbol(Foo, Decl(fooFirst.ts, 0, 10)) +>T : Symbol(T, Decl(fooFirst.ts, 2, 14)) +>x : Symbol(Foo.x, Decl(fooFirst.ts, 2, 18)) +>T : Symbol(T, Decl(fooFirst.ts, 2, 14)) +>b : Symbol(Foo.b, Decl(fooFirst.ts, 2, 24)) +>Bar : Symbol(Bar, Decl(fooFirst.ts, 2, 41)) +>Foo : Symbol(Foo, Decl(fooFirst.ts, 0, 10)) +>T : Symbol(T, Decl(fooFirst.ts, 2, 14)) + +interface Bar { f: (u: U) => void; foo: Foo> } +>Bar : Symbol(Bar, Decl(fooFirst.ts, 2, 41)) +>U : Symbol(U, Decl(fooFirst.ts, 3, 14)) +>f : Symbol(Bar.f, Decl(fooFirst.ts, 3, 18)) +>u : Symbol(u, Decl(fooFirst.ts, 3, 23)) +>U : Symbol(U, Decl(fooFirst.ts, 3, 14)) +>foo : Symbol(Bar.foo, Decl(fooFirst.ts, 3, 37)) +>Foo : Symbol(Foo, Decl(fooFirst.ts, 0, 10)) +>Bar : Symbol(Bar, Decl(fooFirst.ts, 2, 41)) +>U : Symbol(U, Decl(fooFirst.ts, 3, 14)) + +declare let fs: Foo, fl: Foo<"lit">; +>fs : Symbol(fs, Decl(fooFirst.ts, 5, 11)) +>Foo : Symbol(Foo, Decl(fooFirst.ts, 0, 10)) +>fl : Symbol(fl, Decl(fooFirst.ts, 5, 28)) +>Foo : Symbol(Foo, Decl(fooFirst.ts, 0, 10)) + +declare let bs: Bar, bl: Bar<"lit">; +>bs : Symbol(bs, Decl(fooFirst.ts, 6, 11)) +>Bar : Symbol(Bar, Decl(fooFirst.ts, 2, 41)) +>bl : Symbol(bl, Decl(fooFirst.ts, 6, 28)) +>Bar : Symbol(Bar, Decl(fooFirst.ts, 2, 41)) + +fl = fs; // Error +>fl : Symbol(fl, Decl(fooFirst.ts, 5, 28)) +>fs : Symbol(fs, Decl(fooFirst.ts, 5, 11)) + +fs = fl; // Error +>fs : Symbol(fs, Decl(fooFirst.ts, 5, 11)) +>fl : Symbol(fl, Decl(fooFirst.ts, 5, 28)) + +bl = bs; // Error +>bl : Symbol(bl, Decl(fooFirst.ts, 6, 28)) +>bs : Symbol(bs, Decl(fooFirst.ts, 6, 11)) + +bs = bl; // Error +>bs : Symbol(bs, Decl(fooFirst.ts, 6, 11)) +>bl : Symbol(bl, Decl(fooFirst.ts, 6, 28)) + +=== barFirst.ts === +export {}; + +interface Foo { x: T; b: Bar> } +>Foo : Symbol(Foo, Decl(barFirst.ts, 0, 10)) +>T : Symbol(T, Decl(barFirst.ts, 2, 14)) +>x : Symbol(Foo.x, Decl(barFirst.ts, 2, 18)) +>T : Symbol(T, Decl(barFirst.ts, 2, 14)) +>b : Symbol(Foo.b, Decl(barFirst.ts, 2, 24)) +>Bar : Symbol(Bar, Decl(barFirst.ts, 2, 41)) +>Foo : Symbol(Foo, Decl(barFirst.ts, 0, 10)) +>T : Symbol(T, Decl(barFirst.ts, 2, 14)) + +interface Bar { f: (u: U) => void; foo: Foo> } +>Bar : Symbol(Bar, Decl(barFirst.ts, 2, 41)) +>U : Symbol(U, Decl(barFirst.ts, 3, 14)) +>f : Symbol(Bar.f, Decl(barFirst.ts, 3, 18)) +>u : Symbol(u, Decl(barFirst.ts, 3, 23)) +>U : Symbol(U, Decl(barFirst.ts, 3, 14)) +>foo : Symbol(Bar.foo, Decl(barFirst.ts, 3, 37)) +>Foo : Symbol(Foo, Decl(barFirst.ts, 0, 10)) +>Bar : Symbol(Bar, Decl(barFirst.ts, 2, 41)) +>U : Symbol(U, Decl(barFirst.ts, 3, 14)) + +declare let fs: Foo, fl: Foo<"lit">; +>fs : Symbol(fs, Decl(barFirst.ts, 5, 11)) +>Foo : Symbol(Foo, Decl(barFirst.ts, 0, 10)) +>fl : Symbol(fl, Decl(barFirst.ts, 5, 28)) +>Foo : Symbol(Foo, Decl(barFirst.ts, 0, 10)) + +declare let bs: Bar, bl: Bar<"lit">; +>bs : Symbol(bs, Decl(barFirst.ts, 6, 11)) +>Bar : Symbol(Bar, Decl(barFirst.ts, 2, 41)) +>bl : Symbol(bl, Decl(barFirst.ts, 6, 28)) +>Bar : Symbol(Bar, Decl(barFirst.ts, 2, 41)) + +bl = bs; // Error +>bl : Symbol(bl, Decl(barFirst.ts, 6, 28)) +>bs : Symbol(bs, Decl(barFirst.ts, 6, 11)) + +bs = bl; // Error +>bs : Symbol(bs, Decl(barFirst.ts, 6, 11)) +>bl : Symbol(bl, Decl(barFirst.ts, 6, 28)) + +fl = fs; // Error +>fl : Symbol(fl, Decl(barFirst.ts, 5, 28)) +>fs : Symbol(fs, Decl(barFirst.ts, 5, 11)) + +fs = fl; // Error +>fs : Symbol(fs, Decl(barFirst.ts, 5, 11)) +>fl : Symbol(fl, Decl(barFirst.ts, 5, 28)) + diff --git a/tsc/testdata/baselines/reference/compiler/varianceCycleEntryOrder.types b/tsc/testdata/baselines/reference/compiler/varianceCycleEntryOrder.types new file mode 100644 index 0000000000000..3e1522dd51543 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/varianceCycleEntryOrder.types @@ -0,0 +1,82 @@ +//// [tests/cases/compiler/varianceCycleEntryOrder.ts] //// + +=== fooFirst.ts === +export {}; + +interface Foo { x: T; b: Bar> } +>x : T +>b : Bar> + +interface Bar { f: (u: U) => void; foo: Foo> } +>f : (u: U) => void +>u : U +>foo : Foo> + +declare let fs: Foo, fl: Foo<"lit">; +>fs : Foo +>fl : Foo<"lit"> + +declare let bs: Bar, bl: Bar<"lit">; +>bs : Bar +>bl : Bar<"lit"> + +fl = fs; // Error +>fl = fs : Foo +>fl : Foo<"lit"> +>fs : Foo + +fs = fl; // Error +>fs = fl : Foo<"lit"> +>fs : Foo +>fl : Foo<"lit"> + +bl = bs; // Error +>bl = bs : Bar +>bl : Bar<"lit"> +>bs : Bar + +bs = bl; // Error +>bs = bl : Bar<"lit"> +>bs : Bar +>bl : Bar<"lit"> + +=== barFirst.ts === +export {}; + +interface Foo { x: T; b: Bar> } +>x : T +>b : Bar> + +interface Bar { f: (u: U) => void; foo: Foo> } +>f : (u: U) => void +>u : U +>foo : Foo> + +declare let fs: Foo, fl: Foo<"lit">; +>fs : Foo +>fl : Foo<"lit"> + +declare let bs: Bar, bl: Bar<"lit">; +>bs : Bar +>bl : Bar<"lit"> + +bl = bs; // Error +>bl = bs : Bar +>bl : Bar<"lit"> +>bs : Bar + +bs = bl; // Error +>bs = bl : Bar<"lit"> +>bs : Bar +>bl : Bar<"lit"> + +fl = fs; // Error +>fl = fs : Foo +>fl : Foo<"lit"> +>fs : Foo + +fs = fl; // Error +>fs = fl : Foo<"lit"> +>fs : Foo +>fl : Foo<"lit"> + diff --git a/tsc/testdata/baselines/reference/compiler/varianceCycleStructuralFallback.errors.txt b/tsc/testdata/baselines/reference/compiler/varianceCycleStructuralFallback.errors.txt new file mode 100644 index 0000000000000..85a24505357b2 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/varianceCycleStructuralFallback.errors.txt @@ -0,0 +1,86 @@ +maFirst.ts(8,1): error TS2322: Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. + The types of 'x.p' are incompatible between these types. + Type 'string' is not assignable to type '"lit"'. +maFirst.ts(9,1): error TS2322: Type 'MA<{ p: "lit"; }>' is not assignable to type 'MA<{ p: string; }>'. + Types of property 'b' are incompatible. + Type 'MB>' is not assignable to type 'MB>'. + Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. + The types of 'x.p' are incompatible between these types. + Type 'string' is not assignable to type '"lit"'. +maFirst.ts(11,1): error TS2322: Type 'MB<{ p: "lit"; }>' is not assignable to type 'MB<{ p: string; }>'. + Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. + Types of property 'p' are incompatible. + Type 'string' is not assignable to type '"lit"'. +mbFirst.ts(9,1): error TS2322: Type 'MB<{ p: "lit"; }>' is not assignable to type 'MB<{ p: string; }>'. + Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. + Types of property 'p' are incompatible. + Type 'string' is not assignable to type '"lit"'. +mbFirst.ts(10,1): error TS2322: Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. + The types of 'x.p' are incompatible between these types. + Type 'string' is not assignable to type '"lit"'. +mbFirst.ts(11,1): error TS2322: Type 'MA<{ p: "lit"; }>' is not assignable to type 'MA<{ p: string; }>'. + Types of property 'b' are incompatible. + Type 'MB>' is not assignable to type 'MB>'. + Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. + The types of 'x.p' are incompatible between these types. + Type 'string' is not assignable to type '"lit"'. + + +==== maFirst.ts (3 errors) ==== + export {}; + + type MA = { x: { [K in keyof T]-?: T[K] }; b: MB> }; + type MB = { f: (u: U) => void; a: MA> }; + + declare let as: MA<{ p: string }>, al: MA<{ p: "lit" }>; + declare let bs: MB<{ p: string }>, bl: MB<{ p: "lit" }>; + al = as; + ~~ +!!! error TS2322: Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. +!!! error TS2322: The types of 'x.p' are incompatible between these types. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. + as = al; + ~~ +!!! error TS2322: Type 'MA<{ p: "lit"; }>' is not assignable to type 'MA<{ p: string; }>'. +!!! error TS2322: Types of property 'b' are incompatible. +!!! error TS2322: Type 'MB>' is not assignable to type 'MB>'. +!!! error TS2322: Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. +!!! error TS2322: The types of 'x.p' are incompatible between these types. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. + bl = bs; + bs = bl; + ~~ +!!! error TS2322: Type 'MB<{ p: "lit"; }>' is not assignable to type 'MB<{ p: string; }>'. +!!! error TS2322: Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. +!!! error TS2322: Types of property 'p' are incompatible. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. + +==== mbFirst.ts (3 errors) ==== + export {}; + + type MA = { x: { [K in keyof T]-?: T[K] }; b: MB> }; + type MB = { f: (u: U) => void; a: MA> }; + + declare let as: MA<{ p: string }>, al: MA<{ p: "lit" }>; + declare let bs: MB<{ p: string }>, bl: MB<{ p: "lit" }>; + bl = bs; + bs = bl; + ~~ +!!! error TS2322: Type 'MB<{ p: "lit"; }>' is not assignable to type 'MB<{ p: string; }>'. +!!! error TS2322: Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. +!!! error TS2322: Types of property 'p' are incompatible. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. + al = as; + ~~ +!!! error TS2322: Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. +!!! error TS2322: The types of 'x.p' are incompatible between these types. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. + as = al; + ~~ +!!! error TS2322: Type 'MA<{ p: "lit"; }>' is not assignable to type 'MA<{ p: string; }>'. +!!! error TS2322: Types of property 'b' are incompatible. +!!! error TS2322: Type 'MB>' is not assignable to type 'MB>'. +!!! error TS2322: Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. +!!! error TS2322: The types of 'x.p' are incompatible between these types. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/varianceCycleStructuralFallback.symbols b/tsc/testdata/baselines/reference/compiler/varianceCycleStructuralFallback.symbols new file mode 100644 index 0000000000000..6859a8dde928b --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/varianceCycleStructuralFallback.symbols @@ -0,0 +1,120 @@ +//// [tests/cases/compiler/varianceCycleStructuralFallback.ts] //// + +=== maFirst.ts === +export {}; + +type MA = { x: { [K in keyof T]-?: T[K] }; b: MB> }; +>MA : Symbol(MA, Decl(maFirst.ts, 0, 10)) +>T : Symbol(T, Decl(maFirst.ts, 2, 8)) +>x : Symbol(x, Decl(maFirst.ts, 2, 14)) +>K : Symbol(K, Decl(maFirst.ts, 2, 21)) +>T : Symbol(T, Decl(maFirst.ts, 2, 8)) +>T : Symbol(T, Decl(maFirst.ts, 2, 8)) +>K : Symbol(K, Decl(maFirst.ts, 2, 21)) +>b : Symbol(b, Decl(maFirst.ts, 2, 45)) +>MB : Symbol(MB, Decl(maFirst.ts, 2, 61)) +>MA : Symbol(MA, Decl(maFirst.ts, 0, 10)) +>T : Symbol(T, Decl(maFirst.ts, 2, 8)) + +type MB = { f: (u: U) => void; a: MA> }; +>MB : Symbol(MB, Decl(maFirst.ts, 2, 61)) +>U : Symbol(U, Decl(maFirst.ts, 3, 8)) +>f : Symbol(f, Decl(maFirst.ts, 3, 14)) +>u : Symbol(u, Decl(maFirst.ts, 3, 19)) +>U : Symbol(U, Decl(maFirst.ts, 3, 8)) +>a : Symbol(a, Decl(maFirst.ts, 3, 33)) +>MA : Symbol(MA, Decl(maFirst.ts, 0, 10)) +>MB : Symbol(MB, Decl(maFirst.ts, 2, 61)) +>U : Symbol(U, Decl(maFirst.ts, 3, 8)) + +declare let as: MA<{ p: string }>, al: MA<{ p: "lit" }>; +>as : Symbol(as, Decl(maFirst.ts, 5, 11)) +>MA : Symbol(MA, Decl(maFirst.ts, 0, 10)) +>p : Symbol(p, Decl(maFirst.ts, 5, 20)) +>al : Symbol(al, Decl(maFirst.ts, 5, 34)) +>MA : Symbol(MA, Decl(maFirst.ts, 0, 10)) +>p : Symbol(p, Decl(maFirst.ts, 5, 43)) + +declare let bs: MB<{ p: string }>, bl: MB<{ p: "lit" }>; +>bs : Symbol(bs, Decl(maFirst.ts, 6, 11)) +>MB : Symbol(MB, Decl(maFirst.ts, 2, 61)) +>p : Symbol(p, Decl(maFirst.ts, 6, 20)) +>bl : Symbol(bl, Decl(maFirst.ts, 6, 34)) +>MB : Symbol(MB, Decl(maFirst.ts, 2, 61)) +>p : Symbol(p, Decl(maFirst.ts, 6, 43)) + +al = as; +>al : Symbol(al, Decl(maFirst.ts, 5, 34)) +>as : Symbol(as, Decl(maFirst.ts, 5, 11)) + +as = al; +>as : Symbol(as, Decl(maFirst.ts, 5, 11)) +>al : Symbol(al, Decl(maFirst.ts, 5, 34)) + +bl = bs; +>bl : Symbol(bl, Decl(maFirst.ts, 6, 34)) +>bs : Symbol(bs, Decl(maFirst.ts, 6, 11)) + +bs = bl; +>bs : Symbol(bs, Decl(maFirst.ts, 6, 11)) +>bl : Symbol(bl, Decl(maFirst.ts, 6, 34)) + +=== mbFirst.ts === +export {}; + +type MA = { x: { [K in keyof T]-?: T[K] }; b: MB> }; +>MA : Symbol(MA, Decl(mbFirst.ts, 0, 10)) +>T : Symbol(T, Decl(mbFirst.ts, 2, 8)) +>x : Symbol(x, Decl(mbFirst.ts, 2, 14)) +>K : Symbol(K, Decl(mbFirst.ts, 2, 21)) +>T : Symbol(T, Decl(mbFirst.ts, 2, 8)) +>T : Symbol(T, Decl(mbFirst.ts, 2, 8)) +>K : Symbol(K, Decl(mbFirst.ts, 2, 21)) +>b : Symbol(b, Decl(mbFirst.ts, 2, 45)) +>MB : Symbol(MB, Decl(mbFirst.ts, 2, 61)) +>MA : Symbol(MA, Decl(mbFirst.ts, 0, 10)) +>T : Symbol(T, Decl(mbFirst.ts, 2, 8)) + +type MB = { f: (u: U) => void; a: MA> }; +>MB : Symbol(MB, Decl(mbFirst.ts, 2, 61)) +>U : Symbol(U, Decl(mbFirst.ts, 3, 8)) +>f : Symbol(f, Decl(mbFirst.ts, 3, 14)) +>u : Symbol(u, Decl(mbFirst.ts, 3, 19)) +>U : Symbol(U, Decl(mbFirst.ts, 3, 8)) +>a : Symbol(a, Decl(mbFirst.ts, 3, 33)) +>MA : Symbol(MA, Decl(mbFirst.ts, 0, 10)) +>MB : Symbol(MB, Decl(mbFirst.ts, 2, 61)) +>U : Symbol(U, Decl(mbFirst.ts, 3, 8)) + +declare let as: MA<{ p: string }>, al: MA<{ p: "lit" }>; +>as : Symbol(as, Decl(mbFirst.ts, 5, 11)) +>MA : Symbol(MA, Decl(mbFirst.ts, 0, 10)) +>p : Symbol(p, Decl(mbFirst.ts, 5, 20)) +>al : Symbol(al, Decl(mbFirst.ts, 5, 34)) +>MA : Symbol(MA, Decl(mbFirst.ts, 0, 10)) +>p : Symbol(p, Decl(mbFirst.ts, 5, 43)) + +declare let bs: MB<{ p: string }>, bl: MB<{ p: "lit" }>; +>bs : Symbol(bs, Decl(mbFirst.ts, 6, 11)) +>MB : Symbol(MB, Decl(mbFirst.ts, 2, 61)) +>p : Symbol(p, Decl(mbFirst.ts, 6, 20)) +>bl : Symbol(bl, Decl(mbFirst.ts, 6, 34)) +>MB : Symbol(MB, Decl(mbFirst.ts, 2, 61)) +>p : Symbol(p, Decl(mbFirst.ts, 6, 43)) + +bl = bs; +>bl : Symbol(bl, Decl(mbFirst.ts, 6, 34)) +>bs : Symbol(bs, Decl(mbFirst.ts, 6, 11)) + +bs = bl; +>bs : Symbol(bs, Decl(mbFirst.ts, 6, 11)) +>bl : Symbol(bl, Decl(mbFirst.ts, 6, 34)) + +al = as; +>al : Symbol(al, Decl(mbFirst.ts, 5, 34)) +>as : Symbol(as, Decl(mbFirst.ts, 5, 11)) + +as = al; +>as : Symbol(as, Decl(mbFirst.ts, 5, 11)) +>al : Symbol(al, Decl(mbFirst.ts, 5, 34)) + diff --git a/tsc/testdata/baselines/reference/compiler/varianceCycleStructuralFallback.types b/tsc/testdata/baselines/reference/compiler/varianceCycleStructuralFallback.types new file mode 100644 index 0000000000000..e40fcb80e2fea --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/varianceCycleStructuralFallback.types @@ -0,0 +1,94 @@ +//// [tests/cases/compiler/varianceCycleStructuralFallback.ts] //// + +=== maFirst.ts === +export {}; + +type MA = { x: { [K in keyof T]-?: T[K] }; b: MB> }; +>MA : MA +>x : { [K in keyof T]-?: T[K]; } +>b : MB> + +type MB = { f: (u: U) => void; a: MA> }; +>MB : MB +>f : (u: U) => void +>u : U +>a : MA> + +declare let as: MA<{ p: string }>, al: MA<{ p: "lit" }>; +>as : MA<{ p: string; }> +>p : string +>al : MA<{ p: "lit"; }> +>p : "lit" + +declare let bs: MB<{ p: string }>, bl: MB<{ p: "lit" }>; +>bs : MB<{ p: string; }> +>p : string +>bl : MB<{ p: "lit"; }> +>p : "lit" + +al = as; +>al = as : MA<{ p: string; }> +>al : MA<{ p: "lit"; }> +>as : MA<{ p: string; }> + +as = al; +>as = al : MA<{ p: "lit"; }> +>as : MA<{ p: string; }> +>al : MA<{ p: "lit"; }> + +bl = bs; +>bl = bs : MB<{ p: string; }> +>bl : MB<{ p: "lit"; }> +>bs : MB<{ p: string; }> + +bs = bl; +>bs = bl : MB<{ p: "lit"; }> +>bs : MB<{ p: string; }> +>bl : MB<{ p: "lit"; }> + +=== mbFirst.ts === +export {}; + +type MA = { x: { [K in keyof T]-?: T[K] }; b: MB> }; +>MA : MA +>x : { [K in keyof T]-?: T[K]; } +>b : MB> + +type MB = { f: (u: U) => void; a: MA> }; +>MB : MB +>f : (u: U) => void +>u : U +>a : MA> + +declare let as: MA<{ p: string }>, al: MA<{ p: "lit" }>; +>as : MA<{ p: string; }> +>p : string +>al : MA<{ p: "lit"; }> +>p : "lit" + +declare let bs: MB<{ p: string }>, bl: MB<{ p: "lit" }>; +>bs : MB<{ p: string; }> +>p : string +>bl : MB<{ p: "lit"; }> +>p : "lit" + +bl = bs; +>bl = bs : MB<{ p: string; }> +>bl : MB<{ p: "lit"; }> +>bs : MB<{ p: string; }> + +bs = bl; +>bs = bl : MB<{ p: "lit"; }> +>bs : MB<{ p: string; }> +>bl : MB<{ p: "lit"; }> + +al = as; +>al = as : MA<{ p: string; }> +>al : MA<{ p: "lit"; }> +>as : MA<{ p: string; }> + +as = al; +>as = al : MA<{ p: "lit"; }> +>as : MA<{ p: string; }> +>al : MA<{ p: "lit"; }> + diff --git a/tsc/testdata/baselines/reference/compiler/varianceMeasuredWithinCircularity.errors.txt b/tsc/testdata/baselines/reference/compiler/varianceMeasuredWithinCircularity.errors.txt new file mode 100644 index 0000000000000..d3d975854426a --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/varianceMeasuredWithinCircularity.errors.txt @@ -0,0 +1,63 @@ +varianceMeasuredWithinCircularity.ts(24,5): error TS2322: Type 'Selection' is not assignable to type 'Selection'. + Types of property 'join' are incompatible. + Type '(enter: string | ((elem: Selection) => Selection | TransitionLike)) => Selection' is not assignable to type '(enter: string | ((elem: Selection) => Selection | TransitionLike)) => Selection'. + Types of parameters 'enter' and 'enter' are incompatible. + Type 'string | ((elem: Selection) => Selection | TransitionLike)' is not assignable to type 'string | ((elem: Selection) => Selection | TransitionLike)'. + Type '(elem: Selection) => Selection | TransitionLike' is not assignable to type 'string | ((elem: Selection) => Selection | TransitionLike)'. + Type '(elem: Selection) => Selection | TransitionLike' is not assignable to type '(elem: Selection) => Selection | TransitionLike'. + Type 'Selection | TransitionLike' is not assignable to type 'Selection | TransitionLike'. + Type 'Selection' is not assignable to type 'Selection | TransitionLike'. + Type 'Selection' is not assignable to type 'Selection'. + Types of property 'data' are incompatible. + Type '(key: (parent: Base) => string) => Selection' is not assignable to type '(key: (parent: Derived) => string) => Selection'. + Types of parameters 'key' and 'key' are incompatible. + Types of parameters 'parent' and 'parent' are incompatible. + Property 'derived' is missing in type 'Base' but required in type 'Derived'. + + +==== varianceMeasuredWithinCircularity.ts (1 errors) ==== + // The variances of Selection and TransitionLike depend on each other. + // The callback of `data` requires Selection to be covariant in P, while + // `join` passes Selection to a callback, which then requires it to + // be contravariant in P, so Selection is invariant in P. TransitionLike + // reaches P of a Selection through `selection().children()`, so it is + // invariant in G. Both must hold whichever variance is measured first. + + export {}; + + interface Base { base: string } + interface Derived extends Base { derived: string } + + interface Selection { + data(key: (parent: P) => string): Selection; + join(enter: string | ((elem: Selection) => Selection | TransitionLike)): Selection; + children(): Selection; + } + + interface TransitionLike { + selection(): Selection; + } + + declare let s1: Selection; + let s2: Selection = s1; + ~~ +!!! error TS2322: Type 'Selection' is not assignable to type 'Selection'. +!!! error TS2322: Types of property 'join' are incompatible. +!!! error TS2322: Type '(enter: string | ((elem: Selection) => Selection | TransitionLike)) => Selection' is not assignable to type '(enter: string | ((elem: Selection) => Selection | TransitionLike)) => Selection'. +!!! error TS2322: Types of parameters 'enter' and 'enter' are incompatible. +!!! error TS2322: Type 'string | ((elem: Selection) => Selection | TransitionLike)' is not assignable to type 'string | ((elem: Selection) => Selection | TransitionLike)'. +!!! error TS2322: Type '(elem: Selection) => Selection | TransitionLike' is not assignable to type 'string | ((elem: Selection) => Selection | TransitionLike)'. +!!! error TS2322: Type '(elem: Selection) => Selection | TransitionLike' is not assignable to type '(elem: Selection) => Selection | TransitionLike'. +!!! error TS2322: Type 'Selection | TransitionLike' is not assignable to type 'Selection | TransitionLike'. +!!! error TS2322: Type 'Selection' is not assignable to type 'Selection | TransitionLike'. +!!! error TS2322: Type 'Selection' is not assignable to type 'Selection'. +!!! error TS2322: Types of property 'data' are incompatible. +!!! error TS2322: Type '(key: (parent: Base) => string) => Selection' is not assignable to type '(key: (parent: Derived) => string) => Selection'. +!!! error TS2322: Types of parameters 'key' and 'key' are incompatible. +!!! error TS2322: Types of parameters 'parent' and 'parent' are incompatible. +!!! error TS2322: Property 'derived' is missing in type 'Base' but required in type 'Derived'. +!!! related TS2728 varianceMeasuredWithinCircularity.ts:11:34: 'derived' is declared here. + + declare let t1: TransitionLike; + let t2: TransitionLike = t1; + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/varianceMeasuredWithinCircularity.symbols b/tsc/testdata/baselines/reference/compiler/varianceMeasuredWithinCircularity.symbols new file mode 100644 index 0000000000000..23cef834c47e8 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/varianceMeasuredWithinCircularity.symbols @@ -0,0 +1,89 @@ +//// [tests/cases/compiler/varianceMeasuredWithinCircularity.ts] //// + +=== varianceMeasuredWithinCircularity.ts === +// The variances of Selection and TransitionLike depend on each other. +// The callback of `data` requires Selection to be covariant in P, while +// `join` passes Selection to a callback, which then requires it to +// be contravariant in P, so Selection is invariant in P. TransitionLike +// reaches P of a Selection through `selection().children()`, so it is +// invariant in G. Both must hold whichever variance is measured first. + +export {}; + +interface Base { base: string } +>Base : Symbol(Base, Decl(varianceMeasuredWithinCircularity.ts, 7, 10)) +>base : Symbol(Base.base, Decl(varianceMeasuredWithinCircularity.ts, 9, 16)) + +interface Derived extends Base { derived: string } +>Derived : Symbol(Derived, Decl(varianceMeasuredWithinCircularity.ts, 9, 31)) +>Base : Symbol(Base, Decl(varianceMeasuredWithinCircularity.ts, 7, 10)) +>derived : Symbol(Derived.derived, Decl(varianceMeasuredWithinCircularity.ts, 10, 32)) + +interface Selection { +>Selection : Symbol(Selection, Decl(varianceMeasuredWithinCircularity.ts, 10, 50)) +>G : Symbol(G, Decl(varianceMeasuredWithinCircularity.ts, 12, 20)) +>P : Symbol(P, Decl(varianceMeasuredWithinCircularity.ts, 12, 22)) + + data(key: (parent: P) => string): Selection; +>data : Symbol(Selection.data, Decl(varianceMeasuredWithinCircularity.ts, 12, 27)) +>key : Symbol(key, Decl(varianceMeasuredWithinCircularity.ts, 13, 9)) +>parent : Symbol(parent, Decl(varianceMeasuredWithinCircularity.ts, 13, 15)) +>P : Symbol(P, Decl(varianceMeasuredWithinCircularity.ts, 12, 22)) +>Selection : Symbol(Selection, Decl(varianceMeasuredWithinCircularity.ts, 10, 50)) +>G : Symbol(G, Decl(varianceMeasuredWithinCircularity.ts, 12, 20)) +>P : Symbol(P, Decl(varianceMeasuredWithinCircularity.ts, 12, 22)) + + join(enter: string | ((elem: Selection) => Selection | TransitionLike)): Selection; +>join : Symbol(Selection.join, Decl(varianceMeasuredWithinCircularity.ts, 13, 54)) +>enter : Symbol(enter, Decl(varianceMeasuredWithinCircularity.ts, 14, 9)) +>elem : Symbol(elem, Decl(varianceMeasuredWithinCircularity.ts, 14, 27)) +>Selection : Symbol(Selection, Decl(varianceMeasuredWithinCircularity.ts, 10, 50)) +>G : Symbol(G, Decl(varianceMeasuredWithinCircularity.ts, 12, 20)) +>P : Symbol(P, Decl(varianceMeasuredWithinCircularity.ts, 12, 22)) +>Selection : Symbol(Selection, Decl(varianceMeasuredWithinCircularity.ts, 10, 50)) +>G : Symbol(G, Decl(varianceMeasuredWithinCircularity.ts, 12, 20)) +>P : Symbol(P, Decl(varianceMeasuredWithinCircularity.ts, 12, 22)) +>TransitionLike : Symbol(TransitionLike, Decl(varianceMeasuredWithinCircularity.ts, 16, 1)) +>G : Symbol(G, Decl(varianceMeasuredWithinCircularity.ts, 12, 20)) +>Selection : Symbol(Selection, Decl(varianceMeasuredWithinCircularity.ts, 10, 50)) +>G : Symbol(G, Decl(varianceMeasuredWithinCircularity.ts, 12, 20)) +>P : Symbol(P, Decl(varianceMeasuredWithinCircularity.ts, 12, 22)) + + children(): Selection; +>children : Symbol(Selection.children, Decl(varianceMeasuredWithinCircularity.ts, 14, 108)) +>Selection : Symbol(Selection, Decl(varianceMeasuredWithinCircularity.ts, 10, 50)) +>G : Symbol(G, Decl(varianceMeasuredWithinCircularity.ts, 12, 20)) +} + +interface TransitionLike { +>TransitionLike : Symbol(TransitionLike, Decl(varianceMeasuredWithinCircularity.ts, 16, 1)) +>G : Symbol(G, Decl(varianceMeasuredWithinCircularity.ts, 18, 25)) + + selection(): Selection; +>selection : Symbol(TransitionLike.selection, Decl(varianceMeasuredWithinCircularity.ts, 18, 29)) +>Selection : Symbol(Selection, Decl(varianceMeasuredWithinCircularity.ts, 10, 50)) +>G : Symbol(G, Decl(varianceMeasuredWithinCircularity.ts, 18, 25)) +} + +declare let s1: Selection; +>s1 : Symbol(s1, Decl(varianceMeasuredWithinCircularity.ts, 22, 11)) +>Selection : Symbol(Selection, Decl(varianceMeasuredWithinCircularity.ts, 10, 50)) +>Derived : Symbol(Derived, Decl(varianceMeasuredWithinCircularity.ts, 9, 31)) + +let s2: Selection = s1; +>s2 : Symbol(s2, Decl(varianceMeasuredWithinCircularity.ts, 23, 3)) +>Selection : Symbol(Selection, Decl(varianceMeasuredWithinCircularity.ts, 10, 50)) +>Base : Symbol(Base, Decl(varianceMeasuredWithinCircularity.ts, 7, 10)) +>s1 : Symbol(s1, Decl(varianceMeasuredWithinCircularity.ts, 22, 11)) + +declare let t1: TransitionLike; +>t1 : Symbol(t1, Decl(varianceMeasuredWithinCircularity.ts, 25, 11)) +>TransitionLike : Symbol(TransitionLike, Decl(varianceMeasuredWithinCircularity.ts, 16, 1)) +>Derived : Symbol(Derived, Decl(varianceMeasuredWithinCircularity.ts, 9, 31)) + +let t2: TransitionLike = t1; +>t2 : Symbol(t2, Decl(varianceMeasuredWithinCircularity.ts, 26, 3)) +>TransitionLike : Symbol(TransitionLike, Decl(varianceMeasuredWithinCircularity.ts, 16, 1)) +>Base : Symbol(Base, Decl(varianceMeasuredWithinCircularity.ts, 7, 10)) +>t1 : Symbol(t1, Decl(varianceMeasuredWithinCircularity.ts, 25, 11)) + diff --git a/tsc/testdata/baselines/reference/compiler/varianceMeasuredWithinCircularity.types b/tsc/testdata/baselines/reference/compiler/varianceMeasuredWithinCircularity.types new file mode 100644 index 0000000000000..e6075d898565c --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/varianceMeasuredWithinCircularity.types @@ -0,0 +1,52 @@ +//// [tests/cases/compiler/varianceMeasuredWithinCircularity.ts] //// + +=== varianceMeasuredWithinCircularity.ts === +// The variances of Selection and TransitionLike depend on each other. +// The callback of `data` requires Selection to be covariant in P, while +// `join` passes Selection to a callback, which then requires it to +// be contravariant in P, so Selection is invariant in P. TransitionLike +// reaches P of a Selection through `selection().children()`, so it is +// invariant in G. Both must hold whichever variance is measured first. + +export {}; + +interface Base { base: string } +>base : string + +interface Derived extends Base { derived: string } +>derived : string + +interface Selection { + data(key: (parent: P) => string): Selection; +>data : (key: (parent: P) => string) => Selection +>key : (parent: P) => string +>parent : P + + join(enter: string | ((elem: Selection) => Selection | TransitionLike)): Selection; +>join : (enter: string | ((elem: Selection) => Selection | TransitionLike)) => Selection +>enter : string | ((elem: Selection) => Selection | TransitionLike) +>elem : Selection + + children(): Selection; +>children : () => Selection +} + +interface TransitionLike { + selection(): Selection; +>selection : () => Selection +} + +declare let s1: Selection; +>s1 : Selection + +let s2: Selection = s1; +>s2 : Selection +>s1 : Selection + +declare let t1: TransitionLike; +>t1 : TransitionLike + +let t2: TransitionLike = t1; +>t2 : TransitionLike +>t1 : TransitionLike + diff --git a/tsc/testdata/tests/cases/compiler/contextualCheckReentryFromOuterTypeParameters.ts b/tsc/testdata/tests/cases/compiler/contextualCheckReentryFromOuterTypeParameters.ts new file mode 100644 index 0000000000000..4d185d6668c8a --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/contextualCheckReentryFromOuterTypeParameters.ts @@ -0,0 +1,17 @@ +// @strict: true +// @noEmit: true + +interface Argv { + command(builder: (args: Argv) => Argv, handler: (args: Arguments) => void): Argv; + option(key: K, options: O): Argv<{ [key in K]: O } & Check>; +} +type Arguments = { [key in keyof T]: T[key] } & { [key: string]: unknown }; +type Check = O extends {} ? {} : {}; +declare const yargs: Argv; + +yargs.command( + (yargs) => yargs.option("a", { type: "string" }), + (argv) => { + const a: { type: string } = argv.a; + }, +); diff --git a/tsc/testdata/tests/cases/compiler/deferredTypeReferenceCycleRollback.ts b/tsc/testdata/tests/cases/compiler/deferredTypeReferenceCycleRollback.ts new file mode 100644 index 0000000000000..a33318012116f --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/deferredTypeReferenceCycleRollback.ts @@ -0,0 +1,20 @@ +// @strict: true +// @noEmit: true + +// A cycle rollback used to reset the type of the Array> +// node while the deferred reference identified by that node survived, +// which crashed a later instantiation of it. + +declare function declare(): void; + +interface PluginObj { + visitor: Visit; +} +type Visit = VisitFn | VisitObj; +type VisitFn = (path: NodePath

) => void; +interface VisitObj {} +declare class NodePath { + parentPath: NodePath>; + get: Get; +} +type Get = T extends Array ? Array> : never; diff --git a/tsc/testdata/tests/cases/compiler/instantiationLimitsCheckOrder.ts b/tsc/testdata/tests/cases/compiler/instantiationLimitsCheckOrder.ts new file mode 100644 index 0000000000000..2047e52a8329c --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/instantiationLimitsCheckOrder.ts @@ -0,0 +1,25 @@ +// @noEmit: true + +// Instantiation limits must not depend on what was instantiated before. +// This holds for the depth limit, but not yet for the limit on the number +// of instantiations, which Wide2All only reaches if Wide2Tail was not +// checked first. + +type D = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; +type K = `${D}${D}${D}`; + +// Over five million instantiations for one statement. +type Wide = N["length"] extends 6 ? I : { [J in K]: Wide<[...N, 0], [J, I][0]> }[K]; +type WideAll = Wide<[], "">; + +// The same, but half of the instantiations already happened for another +// statement. +type Wide2 = N["length"] extends 6 ? I : { [J in K]: Wide2<[...N, 0], [J, I][0]> }[K]; +type Wide2Tail = Wide2<[0, 0, 0], "">; +type Wide2All = Wide2<[], "">; + +// Over a hundred nested instantiations, half of which already happened for +// another statement. +type Deep = N["length"] extends 60 ? never : Deep<[...N, 0]> | N["length"]; +type DeepTail = Deep<[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]>; +type DeepAll = Deep<[]>; diff --git a/tsc/testdata/tests/cases/compiler/relationDeeplyNestedCheckOrder.ts b/tsc/testdata/tests/cases/compiler/relationDeeplyNestedCheckOrder.ts new file mode 100644 index 0000000000000..a085da345dfcb --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/relationDeeplyNestedCheckOrder.ts @@ -0,0 +1,16 @@ +// @strict: true +// @noEmit: true + +// Relating 'B<{ a: string }>' to 'B<{ a: "lit" }>' eventually relates 'string' +// to '"lit"' through 'm0.m1.a.m0.m1'. Relating the 'A' instantiations first +// reaches the same comparison only after giving up on deeply nested types, +// which must not make relating the 'B' instantiations succeed afterwards. + +type A = { m0: (x: B) => void; m1: { [K in keyof T]: B } }; +type B = { m0: A }; + +declare let a1: A<{ a: string }>, a2: A<{ a: "lit" }>; +declare let b1: B<{ a: string }>, b2: B<{ a: "lit" }>; + +a2 = a1; +b2 = b1; // Error diff --git a/tsc/testdata/tests/cases/compiler/relationMaybeCheckOrder.ts b/tsc/testdata/tests/cases/compiler/relationMaybeCheckOrder.ts new file mode 100644 index 0000000000000..b56c53b300a7a --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/relationMaybeCheckOrder.ts @@ -0,0 +1,24 @@ +// @strict: true +// @noEmit: true + +// Relating to 'keyof M' rejects keys that relate only by assuming a +// comparison still in progress. Relating 'A' to 'B' assumes only itself +// along 'next', so it completes on its own and must be accepted whether +// or not the call to 'h' related 'A' to 'B' first. + +interface A { next: A; v: "a" } +interface B { next: B; v: string } +type M = { [K in keyof T as B]: 1 }; + +declare const a: A; +declare function h(x: B): 1; +declare function h(x: unknown): 2; + +function f() { + function g(x: keyof M): 1; + function g(x: unknown): 2; + function g(x: unknown) { return 1 as any; } + const r: 1 = g(a); +} + +const w: 1 = h(a); diff --git a/tsc/testdata/tests/cases/compiler/varianceCycleCachedResults.ts b/tsc/testdata/tests/cases/compiler/varianceCycleCachedResults.ts new file mode 100644 index 0000000000000..d8d751ee1e7bc --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/varianceCycleCachedResults.ts @@ -0,0 +1,24 @@ +// @strict: true + +// Relating 'Box' to 'Box' measures the variances of 'Box', which +// resolves the return type of 'm', which relates 'Box' to 'Box' +// while those variances are incomplete. Results computed meanwhile must not be +// kept, so 'm' returns both types. + +// @filename: first.ts +declare let b1: Box; +declare let b2: Box; +b1 = b2; + +// @filename: box.ts +declare let a1: Box; +declare let a2: Box; +declare const cond: boolean; +class Box { + value!: T; + m() { + if (cond) return a1; + return a2; + } +} +const r = new Box().m(); diff --git a/tsc/testdata/tests/cases/compiler/varianceCycleDiscardedDiagnostics.ts b/tsc/testdata/tests/cases/compiler/varianceCycleDiscardedDiagnostics.ts new file mode 100644 index 0000000000000..c610fbca080d7 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/varianceCycleDiscardedDiagnostics.ts @@ -0,0 +1,26 @@ +// @strict: true +// @target: es2022 +// @noEmit: true + +// Measuring the variances of Bar resolves the type of Value, which picks an +// overload by relating Foo to Foo while the variances of Foo are +// still a guess. Diagnostics from that attempt must not outlive it. + +interface A { a: string } +interface B { foo: string } +declare function pick(x: Foo): A; +declare function pick(x: object): B; + +class Bar { + x!: T; + Value = pick(new Foo(this)).foo; +} + +class Foo { + bar!: Bar; + constructor(bar: Bar) { + this.bar = bar; + } +} + +const v: number = new Bar().Value; diff --git a/tsc/testdata/tests/cases/compiler/varianceCycleEntryOrder.ts b/tsc/testdata/tests/cases/compiler/varianceCycleEntryOrder.ts new file mode 100644 index 0000000000000..e7d881c167dcf --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/varianceCycleEntryOrder.ts @@ -0,0 +1,32 @@ +// @strict: true +// @noEmit: true + +// Foo and Bar are both invariant: Foo through x and the contravariant +// use of Foo in Bar, and Bar through f and the invariant Foo>. +// Their variances should not depend on which is measured first. + +// @filename: fooFirst.ts +export {}; + +interface Foo { x: T; b: Bar> } +interface Bar { f: (u: U) => void; foo: Foo> } + +declare let fs: Foo, fl: Foo<"lit">; +declare let bs: Bar, bl: Bar<"lit">; +fl = fs; // Error +fs = fl; // Error +bl = bs; // Error +bs = bl; // Error + +// @filename: barFirst.ts +export {}; + +interface Foo { x: T; b: Bar> } +interface Bar { f: (u: U) => void; foo: Foo> } + +declare let fs: Foo, fl: Foo<"lit">; +declare let bs: Bar, bl: Bar<"lit">; +bl = bs; // Error +bs = bl; // Error +fl = fs; // Error +fs = fl; // Error diff --git a/tsc/testdata/tests/cases/compiler/varianceCycleStructuralFallback.ts b/tsc/testdata/tests/cases/compiler/varianceCycleStructuralFallback.ts new file mode 100644 index 0000000000000..e3d0f7deff7f5 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/varianceCycleStructuralFallback.ts @@ -0,0 +1,33 @@ +// @strict: true +// @noEmit: true + +// The -? mapped type makes the variance of MA unmeasurable, so comparisons +// of instantiations of MA made while measuring the variances of MA and MB +// fall back to structural comparisons. The variances should not depend on +// which type is measured first. + +// @filename: maFirst.ts +export {}; + +type MA = { x: { [K in keyof T]-?: T[K] }; b: MB> }; +type MB = { f: (u: U) => void; a: MA> }; + +declare let as: MA<{ p: string }>, al: MA<{ p: "lit" }>; +declare let bs: MB<{ p: string }>, bl: MB<{ p: "lit" }>; +al = as; +as = al; +bl = bs; +bs = bl; + +// @filename: mbFirst.ts +export {}; + +type MA = { x: { [K in keyof T]-?: T[K] }; b: MB> }; +type MB = { f: (u: U) => void; a: MA> }; + +declare let as: MA<{ p: string }>, al: MA<{ p: "lit" }>; +declare let bs: MB<{ p: string }>, bl: MB<{ p: "lit" }>; +bl = bs; +bs = bl; +al = as; +as = al; diff --git a/tsc/testdata/tests/cases/compiler/varianceMeasuredWithinCircularity.ts b/tsc/testdata/tests/cases/compiler/varianceMeasuredWithinCircularity.ts new file mode 100644 index 0000000000000..712ee43f4f782 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/varianceMeasuredWithinCircularity.ts @@ -0,0 +1,30 @@ +// @strict: true +// @noEmit: true + +// The variances of Selection and TransitionLike depend on each other. +// The callback of `data` requires Selection to be covariant in P, while +// `join` passes Selection to a callback, which then requires it to +// be contravariant in P, so Selection is invariant in P. TransitionLike +// reaches P of a Selection through `selection().children()`, so it is +// invariant in G. Both must hold whichever variance is measured first. + +export {}; + +interface Base { base: string } +interface Derived extends Base { derived: string } + +interface Selection { + data(key: (parent: P) => string): Selection; + join(enter: string | ((elem: Selection) => Selection | TransitionLike)): Selection; + children(): Selection; +} + +interface TransitionLike { + selection(): Selection; +} + +declare let s1: Selection; +let s2: Selection = s1; + +declare let t1: TransitionLike; +let t2: TransitionLike = t1; From b0bfcaf5e2a705f26ae53a9041413d8c4e81e029 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 21 Oct 2026 11:03:18 -0700 Subject: [PATCH 005/194] Add test for recursive variance fixed points Variance measured through a cycle of recursive references used to depend on which type in the cycle was measured first, so reordering declarations or assignments changed which assignments were errors. These cases cover cycles through interfaces, type aliases, callbacks, and nested compositions, alongside annotated and structurally measured types whose results should not change. --- .../recursiveVarianceFixedPoint.errors.txt | 227 +++++++++ .../recursiveVarianceFixedPoint.symbols | 455 ++++++++++++++++++ .../recursiveVarianceFixedPoint.types | 344 +++++++++++++ .../compiler/recursiveVarianceFixedPoint.ts | 159 ++++++ 4 files changed, 1185 insertions(+) create mode 100644 tsc/testdata/baselines/reference/compiler/recursiveVarianceFixedPoint.errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/recursiveVarianceFixedPoint.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/recursiveVarianceFixedPoint.types create mode 100755 tsc/testdata/tests/cases/compiler/recursiveVarianceFixedPoint.ts diff --git a/tsc/testdata/baselines/reference/compiler/recursiveVarianceFixedPoint.errors.txt b/tsc/testdata/baselines/reference/compiler/recursiveVarianceFixedPoint.errors.txt new file mode 100644 index 0000000000000..1b54f45a5c6a5 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/recursiveVarianceFixedPoint.errors.txt @@ -0,0 +1,227 @@ +annotations.ts(18,1): error TS2322: Type 'AnnotatedTree' is not assignable to type 'AnnotatedTree'. + Type 'unknown' is not assignable to type 'string'. +annotations.ts(19,1): error TS2322: Type 'AnnotatedStore' is not assignable to type 'AnnotatedStore'. + Types of property 'listener' are incompatible. + Type '(batch: AnnotatedStore) => void' is not assignable to type '(batch: AnnotatedStore) => void'. + Types of parameters 'batch' and 'batch' are incompatible. + Type 'AnnotatedStore' is not assignable to type 'AnnotatedStore'. + Types of property 'value' are incompatible. + Type 'unknown[]' is not assignable to type 'string[]'. + Type 'unknown' is not assignable to type 'string'. +annotations.ts(20,1): error TS2322: Type 'AnnotatedStore' is not assignable to type 'AnnotatedStore'. + Types of property 'value' are incompatible. + Type 'unknown' is not assignable to type 'string'. +columnDefFirst.ts(14,1): error TS2322: Type 'ColumnDef<{ name: string; }, string>' is not assignable to type 'ColumnDef<{ name: string; }, unknown>'. + Type 'unknown' is not assignable to type 'string'. +listenerFirst.ts(14,1): error TS2322: Type 'Listener' is not assignable to type 'Listener'. + Type 'unknown' is not assignable to type 'string'. +nestedComposition.ts(14,1): error TS2322: Type 'Outer' is not assignable to type 'Outer'. + Types of property 'next' are incompatible. + Type 'Inner>' is not assignable to type 'Inner>'. + Type 'Outer' is not assignable to type 'Outer'. + Types of property 'value' are incompatible. + Type 'unknown' is not assignable to type 'string'. +nestedComposition.ts(15,1): error TS2322: Type 'Outer' is not assignable to type 'Outer'. + Types of property 'value' are incompatible. + Type 'unknown' is not assignable to type 'string'. +positiveRecursion.ts(18,1): error TS2322: Type 'Tree' is not assignable to type 'Tree'. + Type 'unknown' is not assignable to type 'string'. +structuralMeasurement.ts(23,1): error TS2322: Type 'GenericMethod' is not assignable to type 'GenericMethod'. + Type 'unknown' is not assignable to type 'string'. + + +==== storeFirst.ts (0 errors) ==== + export {}; + + interface Store { + value: T; + listener: Listener; + } + type Listener = (batch: Store) => void; + + declare let strings: Store; + declare let unknowns: Store; + declare let stringListener: Listener; + declare let unknownListener: Listener; + + unknowns = strings; // Error + unknownListener = stringListener; // Error + +==== listenerFirst.ts (1 errors) ==== + export {}; + + type Listener = (batch: Store) => void; + interface Store { + listener: Listener; + value: T; + } + + declare let strings: Store; + declare let unknowns: Store; + declare let stringListener: Listener; + declare let unknownListener: Listener; + + unknownListener = stringListener; // Error + ~~~~~~~~~~~~~~~ +!!! error TS2322: Type 'Listener' is not assignable to type 'Listener'. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. + unknowns = strings; // Error + +==== columnDefFirst.ts (1 errors) ==== + export {}; + + interface ColumnDef { + cell?: (column: Column) => void; + } + interface Column { + accessorFn?: (row: Row) => Value; + columnDef: ColumnDef; + } + + declare let stringColumn: ColumnDef<{ name: string }, string>; + declare let unknownColumn: ColumnDef<{ name: string }, unknown>; + + unknownColumn = stringColumn; // Error + ~~~~~~~~~~~~~ +!!! error TS2322: Type 'ColumnDef<{ name: string; }, string>' is not assignable to type 'ColumnDef<{ name: string; }, unknown>'. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. + stringColumn = unknownColumn; // Error + +==== columnFirst.ts (0 errors) ==== + export {}; + + interface Column { + columnDef: ColumnDef; + accessorFn?: (row: Row) => Value; + } + interface ColumnDef { + cell?: (column: Column) => void; + } + + declare let stringColumn: ColumnDef<{ name: string }, string>; + declare let unknownColumn: ColumnDef<{ name: string }, unknown>; + + unknownColumn = stringColumn; // Error + stringColumn = unknownColumn; // Error + +==== positiveRecursion.ts (1 errors) ==== + export {}; + + interface Tree { + readonly value: T; + readonly children: readonly Tree[]; + readonly metadata: Map; + } + interface Phantom { + next: Phantom; + } + + declare let stringTree: Tree; + declare let unknownTree: Tree; + declare let stringPhantom: Phantom; + declare let numberPhantom: Phantom; + + unknownTree = stringTree; + stringTree = unknownTree; // Error + ~~~~~~~~~~ +!!! error TS2322: Type 'Tree' is not assignable to type 'Tree'. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. + stringPhantom = numberPhantom; + numberPhantom = stringPhantom; + +==== nestedComposition.ts (2 errors) ==== + export {}; + + interface Outer { + value: T; + next: Inner>; + } + interface Inner { + consume: (value: T) => void; + } + + declare let strings: Outer; + declare let unknowns: Outer; + + unknowns = strings; // Error + ~~~~~~~~ +!!! error TS2322: Type 'Outer' is not assignable to type 'Outer'. +!!! error TS2322: Types of property 'next' are incompatible. +!!! error TS2322: Type 'Inner>' is not assignable to type 'Inner>'. +!!! error TS2322: Type 'Outer' is not assignable to type 'Outer'. +!!! error TS2322: Types of property 'value' are incompatible. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. + strings = unknowns; // Error + ~~~~~~~ +!!! error TS2322: Type 'Outer' is not assignable to type 'Outer'. +!!! error TS2322: Types of property 'value' are incompatible. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. + +==== annotations.ts (3 errors) ==== + export {}; + + interface AnnotatedTree { + readonly value: T; + readonly children: AnnotatedTree[]; + } + interface AnnotatedStore { + value: T; + listener: (batch: AnnotatedStore) => void; + } + + declare let stringTree: AnnotatedTree; + declare let unknownTree: AnnotatedTree; + declare let stringStore: AnnotatedStore; + declare let unknownStore: AnnotatedStore; + + unknownTree = stringTree; + stringTree = unknownTree; // Error + ~~~~~~~~~~ +!!! error TS2322: Type 'AnnotatedTree' is not assignable to type 'AnnotatedTree'. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. + unknownStore = stringStore; // Error + ~~~~~~~~~~~~ +!!! error TS2322: Type 'AnnotatedStore' is not assignable to type 'AnnotatedStore'. +!!! error TS2322: Types of property 'listener' are incompatible. +!!! error TS2322: Type '(batch: AnnotatedStore) => void' is not assignable to type '(batch: AnnotatedStore) => void'. +!!! error TS2322: Types of parameters 'batch' and 'batch' are incompatible. +!!! error TS2322: Type 'AnnotatedStore' is not assignable to type 'AnnotatedStore'. +!!! error TS2322: Types of property 'value' are incompatible. +!!! error TS2322: Type 'unknown[]' is not assignable to type 'string[]'. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. + stringStore = unknownStore; // Error + ~~~~~~~~~~~ +!!! error TS2322: Type 'AnnotatedStore' is not assignable to type 'AnnotatedStore'. +!!! error TS2322: Types of property 'value' are incompatible. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. + +==== structuralMeasurement.ts (1 errors) ==== + export {}; + + interface GenericMethod { + value: T; + next: (value: U) => GenericMethod; + } + interface Projected { + value: T["value"]; + next: Projected; + } + interface Method { + value: T; + accept(value: Method): void; + } + + declare let strings: GenericMethod; + declare let unknowns: GenericMethod; + declare let stringMethod: Method; + declare let unknownMethod: Method; + declare let projected: Projected<{ value: string; extra: number }>; + + unknowns = strings; + strings = unknowns; // Error + ~~~~~~~ +!!! error TS2322: Type 'GenericMethod' is not assignable to type 'GenericMethod'. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. + unknownMethod = stringMethod; + const widened: Projected<{ value: string }> = projected; + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/recursiveVarianceFixedPoint.symbols b/tsc/testdata/baselines/reference/compiler/recursiveVarianceFixedPoint.symbols new file mode 100644 index 0000000000000..5609297b7b09a --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/recursiveVarianceFixedPoint.symbols @@ -0,0 +1,455 @@ +//// [tests/cases/compiler/recursiveVarianceFixedPoint.ts] //// + +=== storeFirst.ts === +export {}; + +interface Store { +>Store : Symbol(Store, Decl(storeFirst.ts, 0, 10)) +>T : Symbol(T, Decl(storeFirst.ts, 2, 16)) + + value: T; +>value : Symbol(Store.value, Decl(storeFirst.ts, 2, 20)) +>T : Symbol(T, Decl(storeFirst.ts, 2, 16)) + + listener: Listener; +>listener : Symbol(Store.listener, Decl(storeFirst.ts, 3, 13)) +>Listener : Symbol(Listener, Decl(storeFirst.ts, 5, 1)) +>T : Symbol(T, Decl(storeFirst.ts, 2, 16)) +} +type Listener = (batch: Store) => void; +>Listener : Symbol(Listener, Decl(storeFirst.ts, 5, 1)) +>T : Symbol(T, Decl(storeFirst.ts, 6, 14)) +>batch : Symbol(batch, Decl(storeFirst.ts, 6, 20)) +>Store : Symbol(Store, Decl(storeFirst.ts, 0, 10)) +>T : Symbol(T, Decl(storeFirst.ts, 6, 14)) + +declare let strings: Store; +>strings : Symbol(strings, Decl(storeFirst.ts, 8, 11)) +>Store : Symbol(Store, Decl(storeFirst.ts, 0, 10)) + +declare let unknowns: Store; +>unknowns : Symbol(unknowns, Decl(storeFirst.ts, 9, 11)) +>Store : Symbol(Store, Decl(storeFirst.ts, 0, 10)) + +declare let stringListener: Listener; +>stringListener : Symbol(stringListener, Decl(storeFirst.ts, 10, 11)) +>Listener : Symbol(Listener, Decl(storeFirst.ts, 5, 1)) + +declare let unknownListener: Listener; +>unknownListener : Symbol(unknownListener, Decl(storeFirst.ts, 11, 11)) +>Listener : Symbol(Listener, Decl(storeFirst.ts, 5, 1)) + +unknowns = strings; // Error +>unknowns : Symbol(unknowns, Decl(storeFirst.ts, 9, 11)) +>strings : Symbol(strings, Decl(storeFirst.ts, 8, 11)) + +unknownListener = stringListener; // Error +>unknownListener : Symbol(unknownListener, Decl(storeFirst.ts, 11, 11)) +>stringListener : Symbol(stringListener, Decl(storeFirst.ts, 10, 11)) + +=== listenerFirst.ts === +export {}; + +type Listener = (batch: Store) => void; +>Listener : Symbol(Listener, Decl(listenerFirst.ts, 0, 10)) +>T : Symbol(T, Decl(listenerFirst.ts, 2, 14)) +>batch : Symbol(batch, Decl(listenerFirst.ts, 2, 20)) +>Store : Symbol(Store, Decl(listenerFirst.ts, 2, 47)) +>T : Symbol(T, Decl(listenerFirst.ts, 2, 14)) + +interface Store { +>Store : Symbol(Store, Decl(listenerFirst.ts, 2, 47)) +>T : Symbol(T, Decl(listenerFirst.ts, 3, 16)) + + listener: Listener; +>listener : Symbol(Store.listener, Decl(listenerFirst.ts, 3, 20)) +>Listener : Symbol(Listener, Decl(listenerFirst.ts, 0, 10)) +>T : Symbol(T, Decl(listenerFirst.ts, 3, 16)) + + value: T; +>value : Symbol(Store.value, Decl(listenerFirst.ts, 4, 26)) +>T : Symbol(T, Decl(listenerFirst.ts, 3, 16)) +} + +declare let strings: Store; +>strings : Symbol(strings, Decl(listenerFirst.ts, 8, 11)) +>Store : Symbol(Store, Decl(listenerFirst.ts, 2, 47)) + +declare let unknowns: Store; +>unknowns : Symbol(unknowns, Decl(listenerFirst.ts, 9, 11)) +>Store : Symbol(Store, Decl(listenerFirst.ts, 2, 47)) + +declare let stringListener: Listener; +>stringListener : Symbol(stringListener, Decl(listenerFirst.ts, 10, 11)) +>Listener : Symbol(Listener, Decl(listenerFirst.ts, 0, 10)) + +declare let unknownListener: Listener; +>unknownListener : Symbol(unknownListener, Decl(listenerFirst.ts, 11, 11)) +>Listener : Symbol(Listener, Decl(listenerFirst.ts, 0, 10)) + +unknownListener = stringListener; // Error +>unknownListener : Symbol(unknownListener, Decl(listenerFirst.ts, 11, 11)) +>stringListener : Symbol(stringListener, Decl(listenerFirst.ts, 10, 11)) + +unknowns = strings; // Error +>unknowns : Symbol(unknowns, Decl(listenerFirst.ts, 9, 11)) +>strings : Symbol(strings, Decl(listenerFirst.ts, 8, 11)) + +=== columnDefFirst.ts === +export {}; + +interface ColumnDef { +>ColumnDef : Symbol(ColumnDef, Decl(columnDefFirst.ts, 0, 10)) +>Row : Symbol(Row, Decl(columnDefFirst.ts, 2, 20)) +>Value : Symbol(Value, Decl(columnDefFirst.ts, 2, 24)) + + cell?: (column: Column) => void; +>cell : Symbol(ColumnDef.cell, Decl(columnDefFirst.ts, 2, 43)) +>column : Symbol(column, Decl(columnDefFirst.ts, 3, 12)) +>Column : Symbol(Column, Decl(columnDefFirst.ts, 4, 1)) +>Row : Symbol(Row, Decl(columnDefFirst.ts, 2, 20)) +>Value : Symbol(Value, Decl(columnDefFirst.ts, 2, 24)) +} +interface Column { +>Column : Symbol(Column, Decl(columnDefFirst.ts, 4, 1)) +>Row : Symbol(Row, Decl(columnDefFirst.ts, 5, 17)) +>Value : Symbol(Value, Decl(columnDefFirst.ts, 5, 21)) + + accessorFn?: (row: Row) => Value; +>accessorFn : Symbol(Column.accessorFn, Decl(columnDefFirst.ts, 5, 40)) +>row : Symbol(row, Decl(columnDefFirst.ts, 6, 18)) +>Row : Symbol(Row, Decl(columnDefFirst.ts, 5, 17)) +>Value : Symbol(Value, Decl(columnDefFirst.ts, 5, 21)) + + columnDef: ColumnDef; +>columnDef : Symbol(Column.columnDef, Decl(columnDefFirst.ts, 6, 37)) +>ColumnDef : Symbol(ColumnDef, Decl(columnDefFirst.ts, 0, 10)) +>Row : Symbol(Row, Decl(columnDefFirst.ts, 5, 17)) +>Value : Symbol(Value, Decl(columnDefFirst.ts, 5, 21)) +} + +declare let stringColumn: ColumnDef<{ name: string }, string>; +>stringColumn : Symbol(stringColumn, Decl(columnDefFirst.ts, 10, 11)) +>ColumnDef : Symbol(ColumnDef, Decl(columnDefFirst.ts, 0, 10)) +>name : Symbol(name, Decl(columnDefFirst.ts, 10, 37)) + +declare let unknownColumn: ColumnDef<{ name: string }, unknown>; +>unknownColumn : Symbol(unknownColumn, Decl(columnDefFirst.ts, 11, 11)) +>ColumnDef : Symbol(ColumnDef, Decl(columnDefFirst.ts, 0, 10)) +>name : Symbol(name, Decl(columnDefFirst.ts, 11, 38)) + +unknownColumn = stringColumn; // Error +>unknownColumn : Symbol(unknownColumn, Decl(columnDefFirst.ts, 11, 11)) +>stringColumn : Symbol(stringColumn, Decl(columnDefFirst.ts, 10, 11)) + +stringColumn = unknownColumn; // Error +>stringColumn : Symbol(stringColumn, Decl(columnDefFirst.ts, 10, 11)) +>unknownColumn : Symbol(unknownColumn, Decl(columnDefFirst.ts, 11, 11)) + +=== columnFirst.ts === +export {}; + +interface Column { +>Column : Symbol(Column, Decl(columnFirst.ts, 0, 10)) +>Row : Symbol(Row, Decl(columnFirst.ts, 2, 17)) +>Value : Symbol(Value, Decl(columnFirst.ts, 2, 21)) + + columnDef: ColumnDef; +>columnDef : Symbol(Column.columnDef, Decl(columnFirst.ts, 2, 40)) +>ColumnDef : Symbol(ColumnDef, Decl(columnFirst.ts, 5, 1)) +>Row : Symbol(Row, Decl(columnFirst.ts, 2, 17)) +>Value : Symbol(Value, Decl(columnFirst.ts, 2, 21)) + + accessorFn?: (row: Row) => Value; +>accessorFn : Symbol(Column.accessorFn, Decl(columnFirst.ts, 3, 37)) +>row : Symbol(row, Decl(columnFirst.ts, 4, 18)) +>Row : Symbol(Row, Decl(columnFirst.ts, 2, 17)) +>Value : Symbol(Value, Decl(columnFirst.ts, 2, 21)) +} +interface ColumnDef { +>ColumnDef : Symbol(ColumnDef, Decl(columnFirst.ts, 5, 1)) +>Row : Symbol(Row, Decl(columnFirst.ts, 6, 20)) +>Value : Symbol(Value, Decl(columnFirst.ts, 6, 24)) + + cell?: (column: Column) => void; +>cell : Symbol(ColumnDef.cell, Decl(columnFirst.ts, 6, 43)) +>column : Symbol(column, Decl(columnFirst.ts, 7, 12)) +>Column : Symbol(Column, Decl(columnFirst.ts, 0, 10)) +>Row : Symbol(Row, Decl(columnFirst.ts, 6, 20)) +>Value : Symbol(Value, Decl(columnFirst.ts, 6, 24)) +} + +declare let stringColumn: ColumnDef<{ name: string }, string>; +>stringColumn : Symbol(stringColumn, Decl(columnFirst.ts, 10, 11)) +>ColumnDef : Symbol(ColumnDef, Decl(columnFirst.ts, 5, 1)) +>name : Symbol(name, Decl(columnFirst.ts, 10, 37)) + +declare let unknownColumn: ColumnDef<{ name: string }, unknown>; +>unknownColumn : Symbol(unknownColumn, Decl(columnFirst.ts, 11, 11)) +>ColumnDef : Symbol(ColumnDef, Decl(columnFirst.ts, 5, 1)) +>name : Symbol(name, Decl(columnFirst.ts, 11, 38)) + +unknownColumn = stringColumn; // Error +>unknownColumn : Symbol(unknownColumn, Decl(columnFirst.ts, 11, 11)) +>stringColumn : Symbol(stringColumn, Decl(columnFirst.ts, 10, 11)) + +stringColumn = unknownColumn; // Error +>stringColumn : Symbol(stringColumn, Decl(columnFirst.ts, 10, 11)) +>unknownColumn : Symbol(unknownColumn, Decl(columnFirst.ts, 11, 11)) + +=== positiveRecursion.ts === +export {}; + +interface Tree { +>Tree : Symbol(Tree, Decl(positiveRecursion.ts, 0, 10)) +>T : Symbol(T, Decl(positiveRecursion.ts, 2, 15)) + + readonly value: T; +>value : Symbol(Tree.value, Decl(positiveRecursion.ts, 2, 19)) +>T : Symbol(T, Decl(positiveRecursion.ts, 2, 15)) + + readonly children: readonly Tree[]; +>children : Symbol(Tree.children, Decl(positiveRecursion.ts, 3, 22)) +>Tree : Symbol(Tree, Decl(positiveRecursion.ts, 0, 10)) +>T : Symbol(T, Decl(positiveRecursion.ts, 2, 15)) + + readonly metadata: Map; +>metadata : Symbol(Tree.metadata, Decl(positiveRecursion.ts, 4, 42)) +>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, --, --)) +} +interface Phantom { +>Phantom : Symbol(Phantom, Decl(positiveRecursion.ts, 6, 1)) +>T : Symbol(T, Decl(positiveRecursion.ts, 7, 18)) + + next: Phantom; +>next : Symbol(Phantom.next, Decl(positiveRecursion.ts, 7, 22)) +>Phantom : Symbol(Phantom, Decl(positiveRecursion.ts, 6, 1)) +>T : Symbol(T, Decl(positiveRecursion.ts, 7, 18)) +} + +declare let stringTree: Tree; +>stringTree : Symbol(stringTree, Decl(positiveRecursion.ts, 11, 11)) +>Tree : Symbol(Tree, Decl(positiveRecursion.ts, 0, 10)) + +declare let unknownTree: Tree; +>unknownTree : Symbol(unknownTree, Decl(positiveRecursion.ts, 12, 11)) +>Tree : Symbol(Tree, Decl(positiveRecursion.ts, 0, 10)) + +declare let stringPhantom: Phantom; +>stringPhantom : Symbol(stringPhantom, Decl(positiveRecursion.ts, 13, 11)) +>Phantom : Symbol(Phantom, Decl(positiveRecursion.ts, 6, 1)) + +declare let numberPhantom: Phantom; +>numberPhantom : Symbol(numberPhantom, Decl(positiveRecursion.ts, 14, 11)) +>Phantom : Symbol(Phantom, Decl(positiveRecursion.ts, 6, 1)) + +unknownTree = stringTree; +>unknownTree : Symbol(unknownTree, Decl(positiveRecursion.ts, 12, 11)) +>stringTree : Symbol(stringTree, Decl(positiveRecursion.ts, 11, 11)) + +stringTree = unknownTree; // Error +>stringTree : Symbol(stringTree, Decl(positiveRecursion.ts, 11, 11)) +>unknownTree : Symbol(unknownTree, Decl(positiveRecursion.ts, 12, 11)) + +stringPhantom = numberPhantom; +>stringPhantom : Symbol(stringPhantom, Decl(positiveRecursion.ts, 13, 11)) +>numberPhantom : Symbol(numberPhantom, Decl(positiveRecursion.ts, 14, 11)) + +numberPhantom = stringPhantom; +>numberPhantom : Symbol(numberPhantom, Decl(positiveRecursion.ts, 14, 11)) +>stringPhantom : Symbol(stringPhantom, Decl(positiveRecursion.ts, 13, 11)) + +=== nestedComposition.ts === +export {}; + +interface Outer { +>Outer : Symbol(Outer, Decl(nestedComposition.ts, 0, 10)) +>T : Symbol(T, Decl(nestedComposition.ts, 2, 16)) + + value: T; +>value : Symbol(Outer.value, Decl(nestedComposition.ts, 2, 20)) +>T : Symbol(T, Decl(nestedComposition.ts, 2, 16)) + + next: Inner>; +>next : Symbol(Outer.next, Decl(nestedComposition.ts, 3, 13)) +>Inner : Symbol(Inner, Decl(nestedComposition.ts, 5, 1)) +>Outer : Symbol(Outer, Decl(nestedComposition.ts, 0, 10)) +>T : Symbol(T, Decl(nestedComposition.ts, 2, 16)) +} +interface Inner { +>Inner : Symbol(Inner, Decl(nestedComposition.ts, 5, 1)) +>T : Symbol(T, Decl(nestedComposition.ts, 6, 16)) + + consume: (value: T) => void; +>consume : Symbol(Inner.consume, Decl(nestedComposition.ts, 6, 20)) +>value : Symbol(value, Decl(nestedComposition.ts, 7, 14)) +>T : Symbol(T, Decl(nestedComposition.ts, 6, 16)) +} + +declare let strings: Outer; +>strings : Symbol(strings, Decl(nestedComposition.ts, 10, 11)) +>Outer : Symbol(Outer, Decl(nestedComposition.ts, 0, 10)) + +declare let unknowns: Outer; +>unknowns : Symbol(unknowns, Decl(nestedComposition.ts, 11, 11)) +>Outer : Symbol(Outer, Decl(nestedComposition.ts, 0, 10)) + +unknowns = strings; // Error +>unknowns : Symbol(unknowns, Decl(nestedComposition.ts, 11, 11)) +>strings : Symbol(strings, Decl(nestedComposition.ts, 10, 11)) + +strings = unknowns; // Error +>strings : Symbol(strings, Decl(nestedComposition.ts, 10, 11)) +>unknowns : Symbol(unknowns, Decl(nestedComposition.ts, 11, 11)) + +=== annotations.ts === +export {}; + +interface AnnotatedTree { +>AnnotatedTree : Symbol(AnnotatedTree, Decl(annotations.ts, 0, 10)) +>T : Symbol(T, Decl(annotations.ts, 2, 24)) + + readonly value: T; +>value : Symbol(AnnotatedTree.value, Decl(annotations.ts, 2, 32)) +>T : Symbol(T, Decl(annotations.ts, 2, 24)) + + readonly children: AnnotatedTree[]; +>children : Symbol(AnnotatedTree.children, Decl(annotations.ts, 3, 22)) +>AnnotatedTree : Symbol(AnnotatedTree, Decl(annotations.ts, 0, 10)) +>T : Symbol(T, Decl(annotations.ts, 2, 24)) +} +interface AnnotatedStore { +>AnnotatedStore : Symbol(AnnotatedStore, Decl(annotations.ts, 5, 1)) +>T : Symbol(T, Decl(annotations.ts, 6, 25)) + + value: T; +>value : Symbol(AnnotatedStore.value, Decl(annotations.ts, 6, 36)) +>T : Symbol(T, Decl(annotations.ts, 6, 25)) + + listener: (batch: AnnotatedStore) => void; +>listener : Symbol(AnnotatedStore.listener, Decl(annotations.ts, 7, 13)) +>batch : Symbol(batch, Decl(annotations.ts, 8, 15)) +>AnnotatedStore : Symbol(AnnotatedStore, Decl(annotations.ts, 5, 1)) +>T : Symbol(T, Decl(annotations.ts, 6, 25)) +} + +declare let stringTree: AnnotatedTree; +>stringTree : Symbol(stringTree, Decl(annotations.ts, 11, 11)) +>AnnotatedTree : Symbol(AnnotatedTree, Decl(annotations.ts, 0, 10)) + +declare let unknownTree: AnnotatedTree; +>unknownTree : Symbol(unknownTree, Decl(annotations.ts, 12, 11)) +>AnnotatedTree : Symbol(AnnotatedTree, Decl(annotations.ts, 0, 10)) + +declare let stringStore: AnnotatedStore; +>stringStore : Symbol(stringStore, Decl(annotations.ts, 13, 11)) +>AnnotatedStore : Symbol(AnnotatedStore, Decl(annotations.ts, 5, 1)) + +declare let unknownStore: AnnotatedStore; +>unknownStore : Symbol(unknownStore, Decl(annotations.ts, 14, 11)) +>AnnotatedStore : Symbol(AnnotatedStore, Decl(annotations.ts, 5, 1)) + +unknownTree = stringTree; +>unknownTree : Symbol(unknownTree, Decl(annotations.ts, 12, 11)) +>stringTree : Symbol(stringTree, Decl(annotations.ts, 11, 11)) + +stringTree = unknownTree; // Error +>stringTree : Symbol(stringTree, Decl(annotations.ts, 11, 11)) +>unknownTree : Symbol(unknownTree, Decl(annotations.ts, 12, 11)) + +unknownStore = stringStore; // Error +>unknownStore : Symbol(unknownStore, Decl(annotations.ts, 14, 11)) +>stringStore : Symbol(stringStore, Decl(annotations.ts, 13, 11)) + +stringStore = unknownStore; // Error +>stringStore : Symbol(stringStore, Decl(annotations.ts, 13, 11)) +>unknownStore : Symbol(unknownStore, Decl(annotations.ts, 14, 11)) + +=== structuralMeasurement.ts === +export {}; + +interface GenericMethod { +>GenericMethod : Symbol(GenericMethod, Decl(structuralMeasurement.ts, 0, 10)) +>T : Symbol(T, Decl(structuralMeasurement.ts, 2, 24)) + + value: T; +>value : Symbol(GenericMethod.value, Decl(structuralMeasurement.ts, 2, 28)) +>T : Symbol(T, Decl(structuralMeasurement.ts, 2, 24)) + + next: (value: U) => GenericMethod; +>next : Symbol(GenericMethod.next, Decl(structuralMeasurement.ts, 3, 13)) +>U : Symbol(U, Decl(structuralMeasurement.ts, 4, 11)) +>value : Symbol(value, Decl(structuralMeasurement.ts, 4, 14)) +>U : Symbol(U, Decl(structuralMeasurement.ts, 4, 11)) +>GenericMethod : Symbol(GenericMethod, Decl(structuralMeasurement.ts, 0, 10)) +>T : Symbol(T, Decl(structuralMeasurement.ts, 2, 24)) +} +interface Projected { +>Projected : Symbol(Projected, Decl(structuralMeasurement.ts, 5, 1)) +>T : Symbol(T, Decl(structuralMeasurement.ts, 6, 20)) +>value : Symbol(value, Decl(structuralMeasurement.ts, 6, 31)) + + value: T["value"]; +>value : Symbol(Projected.value, Decl(structuralMeasurement.ts, 6, 51)) +>T : Symbol(T, Decl(structuralMeasurement.ts, 6, 20)) + + next: Projected; +>next : Symbol(Projected.next, Decl(structuralMeasurement.ts, 7, 22)) +>Projected : Symbol(Projected, Decl(structuralMeasurement.ts, 5, 1)) +>T : Symbol(T, Decl(structuralMeasurement.ts, 6, 20)) +} +interface Method { +>Method : Symbol(Method, Decl(structuralMeasurement.ts, 9, 1)) +>T : Symbol(T, Decl(structuralMeasurement.ts, 10, 17)) + + value: T; +>value : Symbol(Method.value, Decl(structuralMeasurement.ts, 10, 21)) +>T : Symbol(T, Decl(structuralMeasurement.ts, 10, 17)) + + accept(value: Method): void; +>accept : Symbol(Method.accept, Decl(structuralMeasurement.ts, 11, 13)) +>value : Symbol(value, Decl(structuralMeasurement.ts, 12, 11)) +>Method : Symbol(Method, Decl(structuralMeasurement.ts, 9, 1)) +>T : Symbol(T, Decl(structuralMeasurement.ts, 10, 17)) +} + +declare let strings: GenericMethod; +>strings : Symbol(strings, Decl(structuralMeasurement.ts, 15, 11)) +>GenericMethod : Symbol(GenericMethod, Decl(structuralMeasurement.ts, 0, 10)) + +declare let unknowns: GenericMethod; +>unknowns : Symbol(unknowns, Decl(structuralMeasurement.ts, 16, 11)) +>GenericMethod : Symbol(GenericMethod, Decl(structuralMeasurement.ts, 0, 10)) + +declare let stringMethod: Method; +>stringMethod : Symbol(stringMethod, Decl(structuralMeasurement.ts, 17, 11)) +>Method : Symbol(Method, Decl(structuralMeasurement.ts, 9, 1)) + +declare let unknownMethod: Method; +>unknownMethod : Symbol(unknownMethod, Decl(structuralMeasurement.ts, 18, 11)) +>Method : Symbol(Method, Decl(structuralMeasurement.ts, 9, 1)) + +declare let projected: Projected<{ value: string; extra: number }>; +>projected : Symbol(projected, Decl(structuralMeasurement.ts, 19, 11)) +>Projected : Symbol(Projected, Decl(structuralMeasurement.ts, 5, 1)) +>value : Symbol(value, Decl(structuralMeasurement.ts, 19, 34)) +>extra : Symbol(extra, Decl(structuralMeasurement.ts, 19, 49)) + +unknowns = strings; +>unknowns : Symbol(unknowns, Decl(structuralMeasurement.ts, 16, 11)) +>strings : Symbol(strings, Decl(structuralMeasurement.ts, 15, 11)) + +strings = unknowns; // Error +>strings : Symbol(strings, Decl(structuralMeasurement.ts, 15, 11)) +>unknowns : Symbol(unknowns, Decl(structuralMeasurement.ts, 16, 11)) + +unknownMethod = stringMethod; +>unknownMethod : Symbol(unknownMethod, Decl(structuralMeasurement.ts, 18, 11)) +>stringMethod : Symbol(stringMethod, Decl(structuralMeasurement.ts, 17, 11)) + +const widened: Projected<{ value: string }> = projected; +>widened : Symbol(widened, Decl(structuralMeasurement.ts, 24, 5)) +>Projected : Symbol(Projected, Decl(structuralMeasurement.ts, 5, 1)) +>value : Symbol(value, Decl(structuralMeasurement.ts, 24, 26)) +>projected : Symbol(projected, Decl(structuralMeasurement.ts, 19, 11)) + diff --git a/tsc/testdata/baselines/reference/compiler/recursiveVarianceFixedPoint.types b/tsc/testdata/baselines/reference/compiler/recursiveVarianceFixedPoint.types new file mode 100644 index 0000000000000..e26d435575c06 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/recursiveVarianceFixedPoint.types @@ -0,0 +1,344 @@ +//// [tests/cases/compiler/recursiveVarianceFixedPoint.ts] //// + +=== storeFirst.ts === +export {}; + +interface Store { + value: T; +>value : T + + listener: Listener; +>listener : Listener +} +type Listener = (batch: Store) => void; +>Listener : Listener +>batch : Store + +declare let strings: Store; +>strings : Store + +declare let unknowns: Store; +>unknowns : Store + +declare let stringListener: Listener; +>stringListener : Listener + +declare let unknownListener: Listener; +>unknownListener : Listener + +unknowns = strings; // Error +>unknowns = strings : Store +>unknowns : Store +>strings : Store + +unknownListener = stringListener; // Error +>unknownListener = stringListener : Listener +>unknownListener : Listener +>stringListener : Listener + +=== listenerFirst.ts === +export {}; + +type Listener = (batch: Store) => void; +>Listener : Listener +>batch : Store + +interface Store { + listener: Listener; +>listener : Listener + + value: T; +>value : T +} + +declare let strings: Store; +>strings : Store + +declare let unknowns: Store; +>unknowns : Store + +declare let stringListener: Listener; +>stringListener : Listener + +declare let unknownListener: Listener; +>unknownListener : Listener + +unknownListener = stringListener; // Error +>unknownListener = stringListener : Listener +>unknownListener : Listener +>stringListener : Listener + +unknowns = strings; // Error +>unknowns = strings : Store +>unknowns : Store +>strings : Store + +=== columnDefFirst.ts === +export {}; + +interface ColumnDef { + cell?: (column: Column) => void; +>cell : ((column: Column) => void) | undefined +>column : Column +} +interface Column { + accessorFn?: (row: Row) => Value; +>accessorFn : ((row: Row) => Value) | undefined +>row : Row + + columnDef: ColumnDef; +>columnDef : ColumnDef +} + +declare let stringColumn: ColumnDef<{ name: string }, string>; +>stringColumn : ColumnDef<{ name: string; }, string> +>name : string + +declare let unknownColumn: ColumnDef<{ name: string }, unknown>; +>unknownColumn : ColumnDef<{ name: string; }, unknown> +>name : string + +unknownColumn = stringColumn; // Error +>unknownColumn = stringColumn : ColumnDef<{ name: string; }, string> +>unknownColumn : ColumnDef<{ name: string; }, unknown> +>stringColumn : ColumnDef<{ name: string; }, string> + +stringColumn = unknownColumn; // Error +>stringColumn = unknownColumn : ColumnDef<{ name: string; }, unknown> +>stringColumn : ColumnDef<{ name: string; }, string> +>unknownColumn : ColumnDef<{ name: string; }, unknown> + +=== columnFirst.ts === +export {}; + +interface Column { + columnDef: ColumnDef; +>columnDef : ColumnDef + + accessorFn?: (row: Row) => Value; +>accessorFn : ((row: Row) => Value) | undefined +>row : Row +} +interface ColumnDef { + cell?: (column: Column) => void; +>cell : ((column: Column) => void) | undefined +>column : Column +} + +declare let stringColumn: ColumnDef<{ name: string }, string>; +>stringColumn : ColumnDef<{ name: string; }, string> +>name : string + +declare let unknownColumn: ColumnDef<{ name: string }, unknown>; +>unknownColumn : ColumnDef<{ name: string; }, unknown> +>name : string + +unknownColumn = stringColumn; // Error +>unknownColumn = stringColumn : ColumnDef<{ name: string; }, string> +>unknownColumn : ColumnDef<{ name: string; }, unknown> +>stringColumn : ColumnDef<{ name: string; }, string> + +stringColumn = unknownColumn; // Error +>stringColumn = unknownColumn : ColumnDef<{ name: string; }, unknown> +>stringColumn : ColumnDef<{ name: string; }, string> +>unknownColumn : ColumnDef<{ name: string; }, unknown> + +=== positiveRecursion.ts === +export {}; + +interface Tree { + readonly value: T; +>value : T + + readonly children: readonly Tree[]; +>children : readonly Tree[] + + readonly metadata: Map; +>metadata : Map +} +interface Phantom { + next: Phantom; +>next : Phantom +} + +declare let stringTree: Tree; +>stringTree : Tree + +declare let unknownTree: Tree; +>unknownTree : Tree + +declare let stringPhantom: Phantom; +>stringPhantom : Phantom + +declare let numberPhantom: Phantom; +>numberPhantom : Phantom + +unknownTree = stringTree; +>unknownTree = stringTree : Tree +>unknownTree : Tree +>stringTree : Tree + +stringTree = unknownTree; // Error +>stringTree = unknownTree : Tree +>stringTree : Tree +>unknownTree : Tree + +stringPhantom = numberPhantom; +>stringPhantom = numberPhantom : Phantom +>stringPhantom : Phantom +>numberPhantom : Phantom + +numberPhantom = stringPhantom; +>numberPhantom = stringPhantom : Phantom +>numberPhantom : Phantom +>stringPhantom : Phantom + +=== nestedComposition.ts === +export {}; + +interface Outer { + value: T; +>value : T + + next: Inner>; +>next : Inner> +} +interface Inner { + consume: (value: T) => void; +>consume : (value: T) => void +>value : T +} + +declare let strings: Outer; +>strings : Outer + +declare let unknowns: Outer; +>unknowns : Outer + +unknowns = strings; // Error +>unknowns = strings : Outer +>unknowns : Outer +>strings : Outer + +strings = unknowns; // Error +>strings = unknowns : Outer +>strings : Outer +>unknowns : Outer + +=== annotations.ts === +export {}; + +interface AnnotatedTree { + readonly value: T; +>value : T + + readonly children: AnnotatedTree[]; +>children : AnnotatedTree[] +} +interface AnnotatedStore { + value: T; +>value : T + + listener: (batch: AnnotatedStore) => void; +>listener : (batch: AnnotatedStore) => void +>batch : AnnotatedStore +} + +declare let stringTree: AnnotatedTree; +>stringTree : AnnotatedTree + +declare let unknownTree: AnnotatedTree; +>unknownTree : AnnotatedTree + +declare let stringStore: AnnotatedStore; +>stringStore : AnnotatedStore + +declare let unknownStore: AnnotatedStore; +>unknownStore : AnnotatedStore + +unknownTree = stringTree; +>unknownTree = stringTree : AnnotatedTree +>unknownTree : AnnotatedTree +>stringTree : AnnotatedTree + +stringTree = unknownTree; // Error +>stringTree = unknownTree : AnnotatedTree +>stringTree : AnnotatedTree +>unknownTree : AnnotatedTree + +unknownStore = stringStore; // Error +>unknownStore = stringStore : AnnotatedStore +>unknownStore : AnnotatedStore +>stringStore : AnnotatedStore + +stringStore = unknownStore; // Error +>stringStore = unknownStore : AnnotatedStore +>stringStore : AnnotatedStore +>unknownStore : AnnotatedStore + +=== structuralMeasurement.ts === +export {}; + +interface GenericMethod { + value: T; +>value : T + + next: (value: U) => GenericMethod; +>next : (value: U) => GenericMethod +>value : U +} +interface Projected { +>value : unknown + + value: T["value"]; +>value : T["value"] + + next: Projected; +>next : Projected +} +interface Method { + value: T; +>value : T + + accept(value: Method): void; +>accept : (value: Method) => void +>value : Method +} + +declare let strings: GenericMethod; +>strings : GenericMethod + +declare let unknowns: GenericMethod; +>unknowns : GenericMethod + +declare let stringMethod: Method; +>stringMethod : Method + +declare let unknownMethod: Method; +>unknownMethod : Method + +declare let projected: Projected<{ value: string; extra: number }>; +>projected : Projected<{ value: string; extra: number; }> +>value : string +>extra : number + +unknowns = strings; +>unknowns = strings : GenericMethod +>unknowns : GenericMethod +>strings : GenericMethod + +strings = unknowns; // Error +>strings = unknowns : GenericMethod +>strings : GenericMethod +>unknowns : GenericMethod + +unknownMethod = stringMethod; +>unknownMethod = stringMethod : Method +>unknownMethod : Method +>stringMethod : Method + +const widened: Projected<{ value: string }> = projected; +>widened : Projected<{ value: string; }> +>value : string +>projected : Projected<{ value: string; extra: number; }> + diff --git a/tsc/testdata/tests/cases/compiler/recursiveVarianceFixedPoint.ts b/tsc/testdata/tests/cases/compiler/recursiveVarianceFixedPoint.ts new file mode 100755 index 0000000000000..3a26019b2db52 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/recursiveVarianceFixedPoint.ts @@ -0,0 +1,159 @@ +// @strict: true +// @target: es2015 +// @noEmit: true + +// @filename: storeFirst.ts +export {}; + +interface Store { + value: T; + listener: Listener; +} +type Listener = (batch: Store) => void; + +declare let strings: Store; +declare let unknowns: Store; +declare let stringListener: Listener; +declare let unknownListener: Listener; + +unknowns = strings; // Error +unknownListener = stringListener; // Error + +// @filename: listenerFirst.ts +export {}; + +type Listener = (batch: Store) => void; +interface Store { + listener: Listener; + value: T; +} + +declare let strings: Store; +declare let unknowns: Store; +declare let stringListener: Listener; +declare let unknownListener: Listener; + +unknownListener = stringListener; // Error +unknowns = strings; // Error + +// @filename: columnDefFirst.ts +export {}; + +interface ColumnDef { + cell?: (column: Column) => void; +} +interface Column { + accessorFn?: (row: Row) => Value; + columnDef: ColumnDef; +} + +declare let stringColumn: ColumnDef<{ name: string }, string>; +declare let unknownColumn: ColumnDef<{ name: string }, unknown>; + +unknownColumn = stringColumn; // Error +stringColumn = unknownColumn; // Error + +// @filename: columnFirst.ts +export {}; + +interface Column { + columnDef: ColumnDef; + accessorFn?: (row: Row) => Value; +} +interface ColumnDef { + cell?: (column: Column) => void; +} + +declare let stringColumn: ColumnDef<{ name: string }, string>; +declare let unknownColumn: ColumnDef<{ name: string }, unknown>; + +unknownColumn = stringColumn; // Error +stringColumn = unknownColumn; // Error + +// @filename: positiveRecursion.ts +export {}; + +interface Tree { + readonly value: T; + readonly children: readonly Tree[]; + readonly metadata: Map; +} +interface Phantom { + next: Phantom; +} + +declare let stringTree: Tree; +declare let unknownTree: Tree; +declare let stringPhantom: Phantom; +declare let numberPhantom: Phantom; + +unknownTree = stringTree; +stringTree = unknownTree; // Error +stringPhantom = numberPhantom; +numberPhantom = stringPhantom; + +// @filename: nestedComposition.ts +export {}; + +interface Outer { + value: T; + next: Inner>; +} +interface Inner { + consume: (value: T) => void; +} + +declare let strings: Outer; +declare let unknowns: Outer; + +unknowns = strings; // Error +strings = unknowns; // Error + +// @filename: annotations.ts +export {}; + +interface AnnotatedTree { + readonly value: T; + readonly children: AnnotatedTree[]; +} +interface AnnotatedStore { + value: T; + listener: (batch: AnnotatedStore) => void; +} + +declare let stringTree: AnnotatedTree; +declare let unknownTree: AnnotatedTree; +declare let stringStore: AnnotatedStore; +declare let unknownStore: AnnotatedStore; + +unknownTree = stringTree; +stringTree = unknownTree; // Error +unknownStore = stringStore; // Error +stringStore = unknownStore; // Error + +// @filename: structuralMeasurement.ts +export {}; + +interface GenericMethod { + value: T; + next: (value: U) => GenericMethod; +} +interface Projected { + value: T["value"]; + next: Projected; +} +interface Method { + value: T; + accept(value: Method): void; +} + +declare let strings: GenericMethod; +declare let unknowns: GenericMethod; +declare let stringMethod: Method; +declare let unknownMethod: Method; +declare let projected: Projected<{ value: string; extra: number }>; + +unknowns = strings; +strings = unknowns; // Error +unknownMethod = stringMethod; +const widened: Projected<{ value: string }> = projected; From 48a716e6929505f8ed7c3cd5396eb7cf2892c5c5 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 18 Oct 2026 22:09:23 -0700 Subject: [PATCH 006/194] Report accessor pair errors from each accessor The errors for a getter and setter that disagree on abstractness or accessibility were reported on both names by whichever accessor was checked first, guarded by a flag on the getter. When that happened during a query rather than a full check, the flag was set without the errors being reported. Since the errors only depend on the modifiers, each accessor now reports the error on its own name with no state, which yields the same set of errors in any order. --- tsc/internal/checker/checker.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 0f6ad0deacdc3..1877bd0bea319 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -3041,17 +3041,16 @@ func (c *Checker) checkAccessorDeclaration(node *ast.Node) { symbol := c.getSymbolOfDeclaration(node) getter := ast.GetDeclarationOfKind(symbol, ast.KindGetAccessor) setter := ast.GetDeclarationOfKind(symbol, ast.KindSetAccessor) - if getter != nil && setter != nil && c.nodeLinks.Get(getter).flags&NodeCheckFlagsTypeChecked == 0 { - c.nodeLinks.Get(getter).flags |= NodeCheckFlagsTypeChecked + // Each accessor of the pair reports the errors on its own name, so that + // they do not depend on which of the two is checked first. + if getter != nil && setter != nil && (node == getter || node == setter) { getterFlags := getter.ModifierFlags() setterFlags := setter.ModifierFlags() if (getterFlags & ast.ModifierFlagsAbstract) != (setterFlags & ast.ModifierFlagsAbstract) { - c.error(getter.Name(), diagnostics.Accessors_must_both_be_abstract_or_non_abstract) - c.error(setter.Name(), diagnostics.Accessors_must_both_be_abstract_or_non_abstract) + c.error(node.Name(), diagnostics.Accessors_must_both_be_abstract_or_non_abstract) } if ((getterFlags&ast.ModifierFlagsProtected != 0) && setterFlags&(ast.ModifierFlagsProtected|ast.ModifierFlagsPrivate) == 0) || ((getterFlags&ast.ModifierFlagsPrivate != 0) && setterFlags&ast.ModifierFlagsPrivate == 0) { - c.error(getter.Name(), diagnostics.A_get_accessor_must_be_at_least_as_accessible_as_the_setter) - c.error(setter.Name(), diagnostics.A_get_accessor_must_be_at_least_as_accessible_as_the_setter) + c.error(node.Name(), diagnostics.A_get_accessor_must_be_at_least_as_accessible_as_the_setter) } } } From a8988f6599df2406e7bae90f710b2980e2d07d28 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 18 Oct 2026 22:13:09 -0700 Subject: [PATCH 007/194] Read type alias type parameters through their declared type The type parameters of a type alias are resolved along with its declared type, but some readers took them from the links without resolving the declared type first, relying on it having been resolved earlier. Reading them through an accessor that resolves the declared type makes the dependency explicit, so the result does not depend on what was resolved before. --- tsc/internal/checker/checker.go | 12 +++++++++--- tsc/internal/checker/relater.go | 4 ++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 1877bd0bea319..3abba48c309ba 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -1237,7 +1237,7 @@ func (c *Checker) getGlobalTypeAliasSymbol(name string, arity int, reportErrors } // Resolve the declared type of the symbol. This resolves type parameters for the type alias so that we can check arity. c.getDeclaredTypeOfSymbol(symbol) - if len(c.typeAliasLinks.Get(symbol).typeParameters) != arity { + if len(c.getTypeParametersOfTypeAlias(symbol)) != arity { if reportErrors { decl := core.Find(symbol.Declarations(), ast.IsTypeAliasDeclaration) c.error(decl, diagnostics.Global_type_0_must_have_1_type_parameter_s, ast.SymbolName(symbol), arity) @@ -1251,6 +1251,12 @@ func (c *Checker) GetTypeAliasTypeParameters(symbol *ast.Symbol) []*Type { if symbol.Flags()&ast.SymbolFlagsTypeAlias == 0 { panic("Attempted to fetch type alias parameters for non-type-alias symbol") } + return c.getTypeParametersOfTypeAlias(symbol) +} + +// getTypeParametersOfTypeAlias returns the type parameters of a type alias, +// which are resolved along with its declared type. +func (c *Checker) getTypeParametersOfTypeAlias(symbol *ast.Symbol) []*Type { c.getDeclaredTypeOfSymbol(symbol) return c.typeAliasLinks.Get(symbol).typeParameters } @@ -17633,7 +17639,7 @@ func (c *Checker) getTypeParametersForTypeReferenceOrImport(node *ast.Node) []*T func (c *Checker) getTypeParametersForTypeAndSymbol(t *Type, symbol *ast.Symbol) []*Type { if !c.isErrorType(t) { if symbol.Flags()&ast.SymbolFlagsTypeAlias != 0 { - if typeParameters := c.typeAliasLinks.Get(symbol).typeParameters; len(typeParameters) != 0 { + if typeParameters := c.getTypeParametersOfTypeAlias(symbol); len(typeParameters) != 0 { return typeParameters } } @@ -24383,7 +24389,7 @@ func (c *Checker) getTypeFromTypeAliasReference(node *ast.Node, symbol *ast.Symb return errorType } t := c.getDeclaredTypeOfSymbol(symbol) - typeParameters := c.typeAliasLinks.Get(symbol).typeParameters + typeParameters := c.getTypeParametersOfTypeAlias(symbol) if len(typeParameters) != 0 { numTypeArguments := len(typeArguments) minTypeArgumentCount := c.getMinTypeArgumentCount(typeParameters) diff --git a/tsc/internal/checker/relater.go b/tsc/internal/checker/relater.go index 562ae0451cb43..7d45edce67b45 100644 --- a/tsc/internal/checker/relater.go +++ b/tsc/internal/checker/relater.go @@ -1326,7 +1326,7 @@ func (c *Checker) getVariances(t *Type) []VarianceFlags { } func (c *Checker) getAliasVariances(symbol *ast.Symbol) []VarianceFlags { - return c.getVariancesWorker(symbol, c.typeAliasLinks.Get(symbol).typeParameters) + return c.getVariancesWorker(symbol, c.getTypeParametersOfTypeAlias(symbol)) } // Return an array containing the variance of each type parameter. The variance is effectively @@ -1454,7 +1454,7 @@ func (c *Checker) createMarkerType(symbol *ast.Symbol, source *Type, target *Typ } var result *Type if symbol.Flags()&ast.SymbolFlagsTypeAlias != 0 { - result = c.getTypeAliasInstantiation(symbol, c.instantiateTypes(c.typeAliasLinks.Get(symbol).typeParameters, mapper), nil) + result = c.getTypeAliasInstantiation(symbol, c.instantiateTypes(c.getTypeParametersOfTypeAlias(symbol), mapper), nil) } else { result = c.createTypeReference(t, c.instantiateTypes(t.AsInterfaceType().TypeParameters(), mapper)) } From 1267abfc04baeeecf70aa55bd38cbe7416623468 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 18 Oct 2026 22:16:35 -0700 Subject: [PATCH 008/194] Check assertion operands once, with their normal type checkAssertion runs in several check modes, such as when a call is first checked without its context sensitive arguments, and each run overwrote the operand type kept for the deferred comparability check. That check used whichever was stored last, so its result depended on the order in which the assertion was checked. The deferred check now uses the cached normal type of the operand. The assertion itself only needs the operand type for `as const`, and the operand of a non-const assertion is contextually typed by the asserted type alone, so in any check mode the assertion computes the cached type the deferred check will read, with inference for an enclosing call hidden from the operand. This is the result the deferred check would produce on its own, and checks each operand once rather than again with fresh flow analysis in the deferred check. --- tsc/internal/checker/checker.go | 31 +++++++++++++++---- tsc/internal/checker/types.go | 6 ---- ...AssertionCallNoHang(checkorder=default).js | 24 ++++++++++++++ ...ssertionCallNoHang(checkorder=isolated).js | 24 ++++++++++++++ ...AssertionCallNoHang(checkorder=reverse).js | 24 ++++++++++++++ ...ertionCallNoHang(checkorder=typesfirst).js | 24 ++++++++++++++ ...sertionOperandInLoopAssertionCallNoHang.ts | 15 +++++++++ 7 files changed, 136 insertions(+), 12 deletions(-) create mode 100644 tsc/testdata/baselines/reference/compiler/assertionOperandInLoopAssertionCallNoHang(checkorder=default).js create mode 100644 tsc/testdata/baselines/reference/compiler/assertionOperandInLoopAssertionCallNoHang(checkorder=isolated).js create mode 100644 tsc/testdata/baselines/reference/compiler/assertionOperandInLoopAssertionCallNoHang(checkorder=reverse).js create mode 100644 tsc/testdata/baselines/reference/compiler/assertionOperandInLoopAssertionCallNoHang(checkorder=typesfirst).js create mode 100644 tsc/testdata/tests/cases/compiler/assertionOperandInLoopAssertionCallNoHang.ts diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 3abba48c309ba..71c049d0bc6bc 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -659,6 +659,7 @@ type Checker struct { memberLayoutCache map[CacheHashKey]*MemberLayout markerTypes collections.Set[*Type] resolvingExplicitTypeOfSymbol collections.Set[*ast.Symbol] + resolvingAssertionOperands collections.Set[*ast.Node] constructorOrFunctionChecked collections.Set[*ast.Symbol] undefinedSymbol *ast.Symbol argumentsSymbol *ast.Symbol @@ -712,7 +713,6 @@ type Checker struct { symbolNodeLinks nodeLinkStore[SymbolNodeLinks] typeNodeLinks nodeLinkStore[TypeNodeLinks] enumMemberLinks core.LinkStore[*ast.Node, EnumMemberLinks] - assertionLinks core.LinkStore[*ast.Node, AssertionLinks] arrayLiteralLinks core.LinkStore[*ast.Node, ArrayLiteralLinks] switchStatementLinks core.LinkStore[*ast.Node, SwitchStatementLinks] jsxElementLinks core.LinkStore[*ast.Node, JsxElementLinks] @@ -12554,26 +12554,45 @@ func (c *Checker) checkAssertion(node *ast.Node, checkMode CheckMode) *Type { } } typeNode := node.Type() - exprType := c.checkExpressionEx(node.Expression(), checkMode) + isConst := isConstTypeReference(typeNode) + var exprType *Type + if isConst { + exprType = c.checkExpressionEx(node.Expression(), checkMode) + } else if c.resolvingAssertionOperands.AddIfAbsent(node) { + // Only the deferred check uses the operand type, and it uses the + // cached one, so compute that here rather than checking twice. The + // operand is contextually typed by the asserted type alone; hiding + // any inference in progress for an enclosing call keeps the cached + // type the same as when the deferred check computes it. Computing + // the cached type sets aside any flow analysis in progress, so the + // assertion is re-entered when the operand's flow type depends on + // a call containing it within a loop; the enclosing computation + // then provides the cached type. + c.pushInferenceContext(node.Expression(), nil) + c.checkExpressionCached(node.Expression()) + c.popInferenceContext() + c.resolvingAssertionOperands.Delete(node) + } // Always check the type node so its identifiers are resolved. resolveName knows not // to resolve (or report an error for) the `const` in a `const` assertion, so this is // safe even for `x as const` and keeps diagnostics stable regardless of traversal order. c.checkSourceElement(typeNode) - if isConstTypeReference(typeNode) { + if isConst { if !c.isValidConstAssertionArgument(node.Expression()) { c.error(node.Expression(), diagnostics.A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_or_object_literals) } return c.getRegularTypeOfLiteralType(exprType) } - links := c.assertionLinks.Get(node) - links.exprType = exprType c.checkNodeDeferred(node) return c.getTypeFromTypeNode(typeNode) } func (c *Checker) checkAssertionDeferred(node *ast.Node) { typeNode := node.Type() - exprType := c.getRegularTypeOfObjectLiteral(c.getBaseTypeOfLiteralType(c.assertionLinks.Get(node).exprType)) + // The operand is checked in whatever mode the assertion was, so the + // deferred check uses its type in normal mode, which does not depend on + // which of those checks happened last. + exprType := c.getRegularTypeOfObjectLiteral(c.getBaseTypeOfLiteralType(c.checkExpressionCached(node.Expression()))) targetType := c.getTypeFromTypeNode(typeNode) if !c.isErrorType(targetType) { widenedType := c.getWidenedType(exprType) diff --git a/tsc/internal/checker/types.go b/tsc/internal/checker/types.go index 273dfa20290e7..00dbc471b2cef 100644 --- a/tsc/internal/checker/types.go +++ b/tsc/internal/checker/types.go @@ -471,12 +471,6 @@ type EnumMemberLinks struct { value evaluator.Result // Constant value of enum member } -// Links for assertion expressions - -type AssertionLinks struct { - exprType *Type // Assertion expression type -} - // SourceFile links type SourceFileLinks struct { diff --git a/tsc/testdata/baselines/reference/compiler/assertionOperandInLoopAssertionCallNoHang(checkorder=default).js b/tsc/testdata/baselines/reference/compiler/assertionOperandInLoopAssertionCallNoHang(checkorder=default).js new file mode 100644 index 0000000000000..9375a099f5c6f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/assertionOperandInLoopAssertionCallNoHang(checkorder=default).js @@ -0,0 +1,24 @@ +//// [tests/cases/compiler/assertionOperandInLoopAssertionCallNoHang.ts] //// + +//// [assertionOperandInLoopAssertionCallNoHang.ts] +declare function assertEqual(actual: unknown, expected: T): asserts actual; +declare class C {} +declare function on(cb: (e: undefined) => void): void; +declare const data: []; + +on(e => { + assertEqual(e, false); + for (;;) { + assertEqual(e as C, data); + } +}); + + +//// [assertionOperandInLoopAssertionCallNoHang.js] +"use strict"; +on(e => { + assertEqual(e, false); + for (;;) { + assertEqual(e, data); + } +}); diff --git a/tsc/testdata/baselines/reference/compiler/assertionOperandInLoopAssertionCallNoHang(checkorder=isolated).js b/tsc/testdata/baselines/reference/compiler/assertionOperandInLoopAssertionCallNoHang(checkorder=isolated).js new file mode 100644 index 0000000000000..9375a099f5c6f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/assertionOperandInLoopAssertionCallNoHang(checkorder=isolated).js @@ -0,0 +1,24 @@ +//// [tests/cases/compiler/assertionOperandInLoopAssertionCallNoHang.ts] //// + +//// [assertionOperandInLoopAssertionCallNoHang.ts] +declare function assertEqual(actual: unknown, expected: T): asserts actual; +declare class C {} +declare function on(cb: (e: undefined) => void): void; +declare const data: []; + +on(e => { + assertEqual(e, false); + for (;;) { + assertEqual(e as C, data); + } +}); + + +//// [assertionOperandInLoopAssertionCallNoHang.js] +"use strict"; +on(e => { + assertEqual(e, false); + for (;;) { + assertEqual(e, data); + } +}); diff --git a/tsc/testdata/baselines/reference/compiler/assertionOperandInLoopAssertionCallNoHang(checkorder=reverse).js b/tsc/testdata/baselines/reference/compiler/assertionOperandInLoopAssertionCallNoHang(checkorder=reverse).js new file mode 100644 index 0000000000000..9375a099f5c6f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/assertionOperandInLoopAssertionCallNoHang(checkorder=reverse).js @@ -0,0 +1,24 @@ +//// [tests/cases/compiler/assertionOperandInLoopAssertionCallNoHang.ts] //// + +//// [assertionOperandInLoopAssertionCallNoHang.ts] +declare function assertEqual(actual: unknown, expected: T): asserts actual; +declare class C {} +declare function on(cb: (e: undefined) => void): void; +declare const data: []; + +on(e => { + assertEqual(e, false); + for (;;) { + assertEqual(e as C, data); + } +}); + + +//// [assertionOperandInLoopAssertionCallNoHang.js] +"use strict"; +on(e => { + assertEqual(e, false); + for (;;) { + assertEqual(e, data); + } +}); diff --git a/tsc/testdata/baselines/reference/compiler/assertionOperandInLoopAssertionCallNoHang(checkorder=typesfirst).js b/tsc/testdata/baselines/reference/compiler/assertionOperandInLoopAssertionCallNoHang(checkorder=typesfirst).js new file mode 100644 index 0000000000000..9375a099f5c6f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/assertionOperandInLoopAssertionCallNoHang(checkorder=typesfirst).js @@ -0,0 +1,24 @@ +//// [tests/cases/compiler/assertionOperandInLoopAssertionCallNoHang.ts] //// + +//// [assertionOperandInLoopAssertionCallNoHang.ts] +declare function assertEqual(actual: unknown, expected: T): asserts actual; +declare class C {} +declare function on(cb: (e: undefined) => void): void; +declare const data: []; + +on(e => { + assertEqual(e, false); + for (;;) { + assertEqual(e as C, data); + } +}); + + +//// [assertionOperandInLoopAssertionCallNoHang.js] +"use strict"; +on(e => { + assertEqual(e, false); + for (;;) { + assertEqual(e, data); + } +}); diff --git a/tsc/testdata/tests/cases/compiler/assertionOperandInLoopAssertionCallNoHang.ts b/tsc/testdata/tests/cases/compiler/assertionOperandInLoopAssertionCallNoHang.ts new file mode 100644 index 0000000000000..c1ac25d7c9aa3 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/assertionOperandInLoopAssertionCallNoHang.ts @@ -0,0 +1,15 @@ +// @strict: true +// @noTypesAndSymbols: true +// @checkOrder: default, reverse, isolated, typesfirst + +declare function assertEqual(actual: unknown, expected: T): asserts actual; +declare class C {} +declare function on(cb: (e: undefined) => void): void; +declare const data: []; + +on(e => { + assertEqual(e, false); + for (;;) { + assertEqual(e as C, data); + } +}); From 3f0bee38be1676f5f193595d1c1531de9d43c4c2 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 18 Oct 2026 22:21:13 -0700 Subject: [PATCH 009/194] Remove unused isConstructorDeclaredProperty link Nothing reads or writes it. --- tsc/internal/checker/types.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tsc/internal/checker/types.go b/tsc/internal/checker/types.go index 00dbc471b2cef..01af2cb5d0c42 100644 --- a/tsc/internal/checker/types.go +++ b/tsc/internal/checker/types.go @@ -298,10 +298,9 @@ type ExportTypeLinks struct { // Links for type aliases type TypeAliasLinks struct { - declaredType *Type - typeParameters []*Type // Type parameters of type alias (undefined if non-generic) - instantiations map[CacheHashKey]*Type // Instantiations of generic type alias (undefined if non-generic) - isConstructorDeclaredProperty bool + declaredType *Type + typeParameters []*Type // Type parameters of type alias (undefined if non-generic) + instantiations map[CacheHashKey]*Type // Instantiations of generic type alias (undefined if non-generic) } // Links for declared types (type parameters, class types, interface types, enums) From ee7c1ef670e97733845146d047dc910b3890a32d Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 19 Oct 2026 04:44:54 -0700 Subject: [PATCH 010/194] Derive binding pattern parent types without peeking at caches The type of a destructured parameter's binding elements depended on whether the parameter's type happened to be cached already. For example, in non-strict mode (({ [a()?.d]: c = "" }) => {})(); reported TS2537 when 'c' was queried before the IIFE call resolved the parameter (its declared type is the undefined widening type), but not otherwise. Conversely, in f7({ a: {} }); function f7({ a: { x = 0, y = 0 } } = { a: {} }) {} calling f7 first made 'x' and 'y' errors of type any. Make the choice depend only on the declaration. Parameters of context-sensitive functions take their type from contextual assignment, so ask for the parameter's type. Everything else uses the type derived from the declaration, as it did when nothing was cached. Asking for the parameter's type unconditionally instead introduces circularities in patterns whose initializers reference sibling elements. --- tsc/internal/checker/checker.go | 4 +- ...ializers(checkorder=typesfirst).errors.txt | 75 ------------------- ...lInitializers(checkorder=typesfirst).types | 4 +- 3 files changed, 4 insertions(+), 79 deletions(-) delete mode 100644 tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=typesfirst).errors.txt diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 71c049d0bc6bc..cea7a1559dd76 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -18179,8 +18179,8 @@ func (c *Checker) getTypeForBindingElementParent(node *ast.Node, checkMode Check if checkMode == CheckModeNormal { // We can use a cached resolved type if no optionality was included in that type. if symbol := c.getSymbolOfDeclaration(node); symbol != nil { - if resolvedType := c.valueSymbolLinks.Get(symbol).resolvedType; resolvedType != nil && !(c.strictNullChecks && isOptionalDeclaration(node)) { - return resolvedType + if !(c.strictNullChecks && isOptionalDeclaration(node)) && node.Kind == ast.KindParameter && c.isContextSensitiveFunctionOrObjectLiteralMethod(node.Parent) { + return c.getTypeOfSymbol(symbol) } } } diff --git a/tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=typesfirst).errors.txt deleted file mode 100644 index ee3b06edc611c..0000000000000 --- a/tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=typesfirst).errors.txt +++ /dev/null @@ -1,75 +0,0 @@ -destructuringWithLiteralInitializers.ts(37,20): error TS2339: Property 'x' does not exist on type '{}'. -destructuringWithLiteralInitializers.ts(37,27): error TS2339: Property 'y' does not exist on type '{}'. - - -==== destructuringWithLiteralInitializers.ts (2 errors) ==== - // (arg: { x: any, y: any }) => void - function f1({ x, y }) { } - f1({ x: 1, y: 1 }); - - // (arg: { x: any, y?: number }) => void - function f2({ x, y = 0 }) { } - f2({ x: 1 }); - f2({ x: 1, y: 1 }); - - // (arg: { x?: number, y?: number }) => void - function f3({ x = 0, y = 0 }) { } - f3({}); - f3({ x: 1 }); - f3({ y: 1 }); - f3({ x: 1, y: 1 }); - - // (arg?: { x: number, y: number }) => void - function f4({ x, y } = { x: 0, y: 0 }) { } - f4(); - f4({ x: 1, y: 1 }); - - // (arg?: { x: number, y?: number }) => void - function f5({ x, y = 0 } = { x: 0 }) { } - f5(); - f5({ x: 1 }); - f5({ x: 1, y: 1 }); - - // (arg?: { x?: number, y?: number }) => void - function f6({ x = 0, y = 0 } = {}) { } - f6(); - f6({}); - f6({ x: 1 }); - f6({ y: 1 }); - f6({ x: 1, y: 1 }); - - // (arg?: { a: { x?: number, y?: number } }) => void - function f7({ a: { x = 0, y = 0 } } = { a: {} }) { } - ~ -!!! error TS2339: Property 'x' does not exist on type '{}'. - ~ -!!! error TS2339: Property 'y' does not exist on type '{}'. - f7(); - f7({ a: {} }); - f7({ a: { x: 1 } }); - f7({ a: { y: 1 } }); - f7({ a: { x: 1, y: 1 } }); - - // (arg: [any, any]) => void - function g1([x, y]) { } - g1([1, 1]); - - // (arg: [number, number]) => void - function g2([x = 0, y = 0]) { } - g2([1, 1]); - - // (arg?: [number, number]) => void - function g3([x, y] = [0, 0]) { } - g3(); - g3([1, 1]); - - // (arg?: [number, number]) => void - function g4([x, y = 0] = [0]) { } - g4(); - g4([1, 1]); - - // (arg?: [number, number]) => void - function g5([x = 0, y = 0] = []) { } - g5(); - g5([1, 1]); - \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=typesfirst).types index 45f5edceff50e..d46ab82876d40 100644 --- a/tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=typesfirst).types +++ b/tsc/testdata/baselines/reference/conformance/destructuringWithLiteralInitializers(checkorder=typesfirst).types @@ -174,9 +174,9 @@ f6({ x: 1, y: 1 }); function f7({ a: { x = 0, y = 0 } } = { a: {} }) { } >f7 : ({ a: { x, y } }?: { a: {}; }) => void >a : any ->x : any +>x : number >0 : 0 ->y : any +>y : number >0 : 0 >{ a: {} } : { a: {}; } >a : {} From 7c881c9be8813a08c8fe7008c69c40d16d5e9dd8 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 19 Oct 2026 04:53:14 -0700 Subject: [PATCH 011/194] Prefer contextually assigned parameter types on first query Asking for the type of a context-sensitive function's parameter can resolve the enclosing call, which assigns the parameter its contextual type from the inference in progress. The first query nevertheless returned the type it computed itself from the final signature, while every later query returned the assigned type. In declare function fun(g: (x: T) => T, h: (y: T) => T, x: T): T; fun((Math.random() < 0.5 ? (x => x) : (x => undefined)), x => x, 10); the last 'x' was number when the call was checked first, but any when 'x' was queried first and its result was cached. Return the assigned type whenever one exists, so that the first query agrees with the rest, as the original comment intended. --- tsc/internal/checker/checker.go | 5 ++++- ...eInference(checkorder=typesfirst).errors.txt | 17 +---------------- ...epeatedly2(checkorder=typesfirst).errors.txt | 4 ---- ...ngDeferred(checkorder=typesfirst).errors.txt | 6 +++++- ...heckingDeferred(checkorder=typesfirst).types | 6 +++--- 5 files changed, 13 insertions(+), 25 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index cea7a1559dd76..b88ee14995e31 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -17012,7 +17012,10 @@ func (c *Checker) getTypeOfVariableOrParameterOrProperty(symbol *ast.Symbol) *Ty // to preserve this type. In fact, we need to _prefer_ that type, but it won't // be assigned until contextual typing is complete, so we need to defer in // cases where contextual typing may take place. - if links.resolvedType == nil && !c.isParameterOfContextSensitiveSignature(symbol) { + if assigned := links.resolvedType; assigned != nil { + return assigned + } + if !c.isParameterOfContextSensitiveSignature(symbol) { links.resolvedType = t } return t diff --git a/tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=typesfirst).errors.txt index 9ccfe991abcd1..9a04ca00910e5 100644 --- a/tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=typesfirst).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/fallbackToBindingPatternForTypeInference(checkorder=typesfirst).errors.txt @@ -1,60 +1,45 @@ fallbackToBindingPatternForTypeInference.ts(2,7): error TS2345: Argument of type '({ a }: { a: any; }) => any' is not assignable to parameter of type '(x: unknown) => string'. Types of parameters '__0' and 'x' are incompatible. Type 'unknown' is not assignable to type '{ a: any; }'. -fallbackToBindingPatternForTypeInference.ts(2,9): error TS2339: Property 'a' does not exist on type 'unknown'. fallbackToBindingPatternForTypeInference.ts(3,7): error TS2345: Argument of type '([b, c]: [any, any]) => string' is not assignable to parameter of type '(x: unknown) => string'. Types of parameters '__0' and 'x' are incompatible. Type 'unknown' is not assignable to type '[any, any]'. -fallbackToBindingPatternForTypeInference.ts(3,8): error TS2488: Type 'unknown' must have a '[Symbol.iterator]()' method that returns an iterator. fallbackToBindingPatternForTypeInference.ts(4,7): error TS2345: Argument of type '({ d: [e, f] }: { d: [any, any]; }) => string' is not assignable to parameter of type '(x: unknown) => string'. Types of parameters '__0' and 'x' are incompatible. Type 'unknown' is not assignable to type '{ d: [any, any]; }'. -fallbackToBindingPatternForTypeInference.ts(4,9): error TS2339: Property 'd' does not exist on type 'unknown'. fallbackToBindingPatternForTypeInference.ts(5,7): error TS2345: Argument of type '([{ g }, { h }]: [{ g: any; }, { h: any; }]) => string' is not assignable to parameter of type '(x: unknown) => string'. Types of parameters '__0' and 'x' are incompatible. Type 'unknown' is not assignable to type '[{ g: any; }, { h: any; }]'. -fallbackToBindingPatternForTypeInference.ts(5,8): error TS2488: Type 'unknown' must have a '[Symbol.iterator]()' method that returns an iterator. fallbackToBindingPatternForTypeInference.ts(6,7): error TS2345: Argument of type '({ a, b }: { a: any; b?: number | undefined; }) => any' is not assignable to parameter of type '(x: unknown) => string'. Types of parameters '__0' and 'x' are incompatible. Type 'unknown' is not assignable to type '{ a: any; b?: number | undefined; }'. -fallbackToBindingPatternForTypeInference.ts(6,9): error TS2339: Property 'a' does not exist on type 'unknown'. -==== fallbackToBindingPatternForTypeInference.ts (10 errors) ==== +==== fallbackToBindingPatternForTypeInference.ts (5 errors) ==== declare function trans(f: (x: T) => string): number; trans(({a}) => a); ~~~~~~~~~~ !!! error TS2345: Argument of type '({ a }: { a: any; }) => any' is not assignable to parameter of type '(x: unknown) => string'. !!! error TS2345: Types of parameters '__0' and 'x' are incompatible. !!! error TS2345: Type 'unknown' is not assignable to type '{ a: any; }'. - ~ -!!! error TS2339: Property 'a' does not exist on type 'unknown'. trans(([b,c]) => 'foo'); ~~~~~~~~~~~~~~~~ !!! error TS2345: Argument of type '([b, c]: [any, any]) => string' is not assignable to parameter of type '(x: unknown) => string'. !!! error TS2345: Types of parameters '__0' and 'x' are incompatible. !!! error TS2345: Type 'unknown' is not assignable to type '[any, any]'. - ~~~~~ -!!! error TS2488: Type 'unknown' must have a '[Symbol.iterator]()' method that returns an iterator. trans(({d: [e,f]}) => 'foo'); ~~~~~~~~~~~~~~~~~~~~~ !!! error TS2345: Argument of type '({ d: [e, f] }: { d: [any, any]; }) => string' is not assignable to parameter of type '(x: unknown) => string'. !!! error TS2345: Types of parameters '__0' and 'x' are incompatible. !!! error TS2345: Type 'unknown' is not assignable to type '{ d: [any, any]; }'. - ~ -!!! error TS2339: Property 'd' does not exist on type 'unknown'. trans(([{g},{h}]) => 'foo'); ~~~~~~~~~~~~~~~~~~~~ !!! error TS2345: Argument of type '([{ g }, { h }]: [{ g: any; }, { h: any; }]) => string' is not assignable to parameter of type '(x: unknown) => string'. !!! error TS2345: Types of parameters '__0' and 'x' are incompatible. !!! error TS2345: Type 'unknown' is not assignable to type '[{ g: any; }, { h: any; }]'. - ~~~~~~~~~ -!!! error TS2488: Type 'unknown' must have a '[Symbol.iterator]()' method that returns an iterator. trans(({a, b = 10}) => a); ~~~~~~~~~~~~~~~~~~ !!! error TS2345: Argument of type '({ a, b }: { a: any; b?: number | undefined; }) => any' is not assignable to parameter of type '(x: unknown) => string'. !!! error TS2345: Types of parameters '__0' and 'x' are incompatible. !!! error TS2345: Type 'unknown' is not assignable to type '{ a: any; b?: number | undefined; }'. - ~ -!!! error TS2339: Property 'a' does not exist on type 'unknown'. \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=typesfirst).errors.txt index 491ad1a2935f6..29a93731f366b 100644 --- a/tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=typesfirst).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/fixingTypeParametersRepeatedly2(checkorder=typesfirst).errors.txt @@ -1,11 +1,7 @@ -error TS-1: Pre-emit (3) and post-emit (2) diagnostic counts do not match! This can indicate that a semantic _error_ was added by the emit resolver - such an error may not be reflected on the command line or in the editor, but may be captured in a baseline here! fixingTypeParametersRepeatedly2.ts(11,32): error TS2741: Property 'toBase' is missing in type 'Base' but required in type 'Derived'. fixingTypeParametersRepeatedly2.ts(17,5): error TS2403: Subsequent variable declarations must have the same type. Variable 'result' must be of type 'Derived', but here has type 'Base'. -!!! error TS-1: Pre-emit (3) and post-emit (2) diagnostic counts do not match! This can indicate that a semantic _error_ was added by the emit resolver - such an error may not be reflected on the command line or in the editor, but may be captured in a baseline here! -!!! related TS-1: The excess diagnostics are: -!!! related TS2339 fixingTypeParametersRepeatedly2.ts:17:34: Property 'toBase' does not exist on type 'Base'. ==== fixingTypeParametersRepeatedly2.ts (2 errors) ==== interface Base { baseProp; diff --git a/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=typesfirst).errors.txt index e93dbcc6cad6b..47be7df4a2a28 100644 --- a/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=typesfirst).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=typesfirst).errors.txt @@ -15,10 +15,11 @@ overloadresolutionWithConstraintCheckingDeferred.ts(18,27): error TS2769: No ove Argument of type '(x: D) => G' is not assignable to parameter of type '(x: B) => any'. Types of parameters 'x' and 'x' are incompatible. Property 'q' is missing in type 'B' but required in type 'D'. +overloadresolutionWithConstraintCheckingDeferred.ts(19,14): error TS2741: Property 'x' is missing in type 'D' but required in type 'A'. overloadresolutionWithConstraintCheckingDeferred.ts(19,32): error TS2741: Property 'x' is missing in type 'D' but required in type 'A'. -==== overloadresolutionWithConstraintCheckingDeferred.ts (6 errors) ==== +==== overloadresolutionWithConstraintCheckingDeferred.ts (7 errors) ==== interface A { x } interface B { x; y } interface C { z } @@ -68,6 +69,9 @@ overloadresolutionWithConstraintCheckingDeferred.ts(19,32): error TS2741: Proper !!! related TS2728 overloadresolutionWithConstraintCheckingDeferred.ts:4:15: 'q' is declared here. !!! related TS2771 overloadresolutionWithConstraintCheckingDeferred.ts:12:18: The last overload is declared here. var y: G = new G(x); // error that D does not satisfy constraint, y is of type G, entire call to foo is an error + ~~~~~~~~ +!!! error TS2741: Property 'x' is missing in type 'D' but required in type 'A'. +!!! related TS2728 overloadresolutionWithConstraintCheckingDeferred.ts:1:15: 'x' is declared here. ~ !!! error TS2741: Property 'x' is missing in type 'D' but required in type 'A'. !!! related TS2728 overloadresolutionWithConstraintCheckingDeferred.ts:1:15: 'x' is declared here. diff --git a/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=typesfirst).types index 7eb08e3ac8acb..df9ec39e7e837 100644 --- a/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=typesfirst).types +++ b/tsc/testdata/baselines/reference/compiler/overloadresolutionWithConstraintCheckingDeferred(checkorder=typesfirst).types @@ -44,7 +44,7 @@ var result: number = foo(x => new G(x)); // x has type D, new G(x) fails, so fir >x : D >new G(x) : G >G : typeof G ->x : any +>x : D var result2: number = foo(x => new G(x)); // x has type D, new G(x) fails, so first overload is picked. >result2 : number @@ -55,7 +55,7 @@ var result2: number = foo(x => new G(x)); // x has type D, new G(x) fa >new G(x) : G >G : typeof G >x : D ->x : any +>x : D var result3: string = foo(x => { // x has type D >result3 : string @@ -72,7 +72,7 @@ var result3: string = foo(x => { // x has type D >x : D return y; ->y : G +>y : G }); From c72b75a987368e90425d41d9ef77735764cdd128 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 19 Oct 2026 05:08:55 -0700 Subject: [PATCH 012/194] Contextually check function expressions after member cycles When resolving a function expression's members reaches the function again through its enclosing call, the contextual check sees an empty signature list and gives up, yet it left the node marked as context checked. Whichever query got there first therefore decided whether the function's parameters were ever contextually typed, and diagnostics such as implicit any errors could be lost depending on check order. Leave the node unchecked in that case so a later request performs the check, and have the deferred function check request it, so that the check is performed at least once whichever query reached it first. --- tsc/internal/checker/checker.go | 7 +++++++ ...scriptClassExpression(checkorder=typesfirst).errors.txt | 5 ++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index b88ee14995e31..1d0086c3fba18 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -10410,6 +10410,10 @@ func (c *Checker) contextuallyCheckFunctionExpressionOrObjectLiteralMethod(node links.flags |= NodeCheckFlagsContextChecked signature := core.FirstOrNil(c.getSignaturesOfType(c.getTypeOfSymbol(c.getSymbolOfDeclaration(node)), SignatureKindCall)) if signature == nil { + // The members of the function's type are being resolved, which + // can contextually check the function through its enclosing call. + // Leave the check to whoever asks once they are resolved. + links.flags &^= NodeCheckFlagsContextChecked return } if c.isContextSensitive(node) { @@ -10455,6 +10459,9 @@ func (c *Checker) contextuallyCheckFunctionExpressionOrObjectLiteralMethod(node } func (c *Checker) checkFunctionExpressionOrObjectLiteralMethodDeferred(node *ast.Node) { + // Account for the contextual check of the function, which may have been + // performed by a query rather than by resolving the enclosing call. + c.contextuallyCheckFunctionExpressionOrObjectLiteralMethod(node, CheckModeNormal) functionFlags := ast.GetFunctionFlags(node) returnType := c.getReturnTypeFromAnnotation(node) c.checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnType) diff --git a/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression(checkorder=typesfirst).errors.txt index a15bd4d38db0d..fa22beceb33e2 100644 --- a/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression(checkorder=typesfirst).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression(checkorder=typesfirst).errors.txt @@ -1,12 +1,15 @@ weird.js(1,1): error TS2552: Cannot find name 'someFunction'. Did you mean 'Function'? +weird.js(1,23): error TS7006: Parameter 'BaseClass' implicitly has an 'any' type. weird.js(9,17): error TS7006: Parameter 'error' implicitly has an 'any' type. -==== weird.js (2 errors) ==== +==== weird.js (3 errors) ==== someFunction(function(BaseClass) { ~~~~~~~~~~~~ !!! error TS2552: Cannot find name 'someFunction'. Did you mean 'Function'? !!! related TS2728 lib.es5.d.ts:--:--: 'Function' is declared here. + ~~~~~~~~~ +!!! error TS7006: Parameter 'BaseClass' implicitly has an 'any' type. 'use strict'; const DEFAULT_MESSAGE = "nop!"; class Hello extends BaseClass { From 69fe4618f1e8f66f008cfb73d319af355fd95410 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 19 Oct 2026 05:15:56 -0700 Subject: [PATCH 013/194] Resolve enclosing calls before the calls in their arguments Generic calls nested in the arguments of other generic calls, or in context sensitive functions passed to them, depend on the enclosing call for their contextual type and parameter types, and the enclosing call infers from them in turn. When the inner call was queried first, it was already marked as resolving by the time its contextual type resolved the enclosing call, so the enclosing inference saw a placeholder and both calls cached results that a check in source order never produces. Computing the contextual type of a call nested in an argument of an enclosing call before resolving it resolves the enclosing call first, as source order does. Other contexts are not resolved ahead of time, since computing them may evaluate expressions that checking does not, such as the target of a destructuring assignment. --- tsc/internal/checker/checker.go | 58 +++++++++++++++++++ ...Callback(checkorder=typesfirst).errors.txt | 24 -------- ...tternCallback(checkorder=typesfirst).types | 18 +++--- ...ceNotTooBroad(checkorder=typesfirst).types | 16 ++--- 4 files changed, 75 insertions(+), 41 deletions(-) delete mode 100644 tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=typesfirst).errors.txt diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 1d0086c3fba18..434c1bae1b2c6 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -8624,6 +8624,50 @@ func (c *Checker) isSymbolOrSymbolForCall(node *ast.Node) bool { return globalESSymbol == c.resolveName(left, "Symbol", ast.SymbolFlagsValue, nil /*nameNotFoundMessage*/, false /*isUse*/, false) } +// isContextuallyTypedByEnclosingCall reports whether the contextual type of +// an expression may come from an argument of an enclosing call. Other +// contexts are not resolved ahead of the expression, since computing them +// may evaluate expressions that checking only evaluates otherwise, such as +// the target of a destructuring assignment. +func isContextuallyTypedByEnclosingCall(node *ast.Node) bool { + for { + parent := node.Parent + switch parent.Kind { + case ast.KindCallExpression, ast.KindNewExpression: + return node != parent.Expression() + case ast.KindParenthesizedExpression, ast.KindSpreadElement, ast.KindArrayLiteralExpression, + ast.KindObjectLiteralExpression, ast.KindPropertyAssignment, ast.KindAwaitExpression: + node = parent + continue + case ast.KindConditionalExpression: + if node == parent.AsConditionalExpression().Condition { + return false + } + case ast.KindBinaryExpression: + switch parent.AsBinaryExpression().OperatorToken.Kind { + case ast.KindBarBarToken, ast.KindAmpersandAmpersandToken, ast.KindQuestionQuestionToken, ast.KindCommaToken: + if node != parent.AsBinaryExpression().Right { + return false + } + default: + return false + } + case ast.KindArrowFunction: + if node != parent.Body() { + return false + } + case ast.KindReturnStatement: + parent = ast.GetContainingFunction(parent) + if parent == nil || !ast.IsFunctionExpressionOrArrowFunction(parent) { + return false + } + default: + return false + } + node = parent + } +} + /** * Resolve a signature of a given call-like expression. * @param node a call-like expression to try resolve a signature for @@ -8641,6 +8685,20 @@ func (c *Checker) getResolvedSignature(node *ast.Node, candidatesOutArray *[]*Si if cached != nil && cached != c.resolvingSignature && candidatesOutArray == nil { return cached } + if cached == nil { + // Resolve an enclosing call providing the contextual type of this one + // first, as checking in source order would. The enclosing call may also + // type parameters this call references. Resolved from within this call + // instead, the enclosing call sees this one marked as resolving, and + // the result depends on which call was queried first. + if (ast.IsCallExpression(node) || ast.IsNewExpression(node)) && isContextuallyTypedByEnclosingCall(node) { + c.getContextualType(node, ContextFlagsNone) + } + cached = links.resolvedSignature + if cached != nil && cached != c.resolvingSignature && candidatesOutArray == nil { + return cached + } + } saveResolutionStart := c.resolutionStart if cached == nil { // If we haven't already done so, temporarily reset the resolution stack. This allows us to diff --git a/tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=typesfirst).errors.txt deleted file mode 100644 index 0976f43f81f01..0000000000000 --- a/tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=typesfirst).errors.txt +++ /dev/null @@ -1,24 +0,0 @@ -contextualReturnArrayPatternCallback.ts(13,19): error TS2322: Type 'unknown' is not assignable to type 'string'. - - -==== contextualReturnArrayPatternCallback.ts (1 errors) ==== - interface Matcher { - matcher(): { match(value: Input): boolean; value?: Value }; - } - type Pattern = Input | Matcher | { [Key in keyof Input]?: Pattern }; - type ArrayElement = Input extends readonly (infer Value)[] ? Value : unknown; - declare function array>>(value: Value): Matcher; - declare function when unknown>(callback: Callback): Matcher; - declare function accept>(value: Value): void; - - accept({ - list: array({ - prop: when(value => { - const text: string = value; - ~~~~ -!!! error TS2322: Type 'unknown' is not assignable to type 'string'. - return true; - }), - }), - }); - \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=typesfirst).types index 68eb717e1e135..8ae0e4c69acc3 100644 --- a/tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=typesfirst).types +++ b/tsc/testdata/baselines/reference/compiler/contextualReturnArrayPatternCallback(checkorder=typesfirst).types @@ -32,24 +32,24 @@ declare function accept>(val accept({ >accept({ list: array({ prop: when(value => { const text: string = value; return true; }), }),}) : void >accept : >(value: Value) => void ->{ list: array({ prop: when(value => { const text: string = value; return true; }), }),} : { list: Matcher<{ prop: string; }[], { prop: Matcher; }>; } +>{ list: array({ prop: when(value => { const text: string = value; return true; }), }),} : { list: Matcher<{ prop: string; }[], { prop: Matcher; }>; } list: array({ ->list : Matcher<{ prop: string; }[], { prop: Matcher; }> ->array({ prop: when(value => { const text: string = value; return true; }), }) : Matcher<{ prop: string; }[], { prop: Matcher; }> +>list : Matcher<{ prop: string; }[], { prop: Matcher; }> +>array({ prop: when(value => { const text: string = value; return true; }), }) : Matcher<{ prop: string; }[], { prop: Matcher; }> >array : >>(value: Value) => Matcher ->{ prop: when(value => { const text: string = value; return true; }), } : { prop: Matcher; } +>{ prop: when(value => { const text: string = value; return true; }), } : { prop: Matcher; } prop: when(value => { ->prop : Matcher ->when(value => { const text: string = value; return true; }) : Matcher +>prop : Matcher +>when(value => { const text: string = value; return true; }) : Matcher >when : unknown>(callback: Callback) => Matcher ->value => { const text: string = value; return true; } : (value: unknown) => boolean ->value : unknown +>value => { const text: string = value; return true; } : (value: string) => boolean +>value : string const text: string = value; >text : string ->value : unknown +>value : string return true; >true : true diff --git a/tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad(checkorder=typesfirst).types index 1f07d04ed8463..94962df020556 100644 --- a/tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad(checkorder=typesfirst).types +++ b/tsc/testdata/baselines/reference/compiler/returnTypeInferenceNotTooBroad(checkorder=typesfirst).types @@ -50,18 +50,18 @@ export const yun = unwrap(y); // $ExpectType { kind: "a"; a: 3; } export const yone = unwrap(sepsis({ low: 1, sign: { kind: 'a', a: 3 }})); ->yone : { kind: string; a: number; } ->unwrap(sepsis({ low: 1, sign: { kind: 'a', a: 3 }})) : { kind: string; a: number; } +>yone : { kind: "a"; a: 3; } +>unwrap(sepsis({ low: 1, sign: { kind: 'a', a: 3 }})) : { kind: "a"; a: 3; } >unwrap : (w: Wrapper) => T ->sepsis({ low: 1, sign: { kind: 'a', a: 3 }}) : Wrapper<{ kind: string; a: number; }> +>sepsis({ low: 1, sign: { kind: 'a', a: 3 }}) : Wrapper<{ kind: "a"; a: 3; }> >sepsis : (opts: Opts) => Wrapper ->{ low: 1, sign: { kind: 'a', a: 3 }} : { low: number; sign: { kind: string; a: number; }; } +>{ low: 1, sign: { kind: 'a', a: 3 }} : { low: number; sign: { kind: "a"; a: 3; }; } >low : number >1 : 1 ->sign : { kind: string; a: number; } ->{ kind: 'a', a: 3 } : { kind: string; a: number; } ->kind : string +>sign : { kind: "a"; a: 3; } +>{ kind: 'a', a: 3 } : { kind: "a"; a: 3; } +>kind : "a" >'a' : "a" ->a : number +>a : 3 >3 : 3 From 459f20e4699563a79cd41cc5ef4896f6e0994fcb Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 19 Oct 2026 05:18:04 -0700 Subject: [PATCH 014/194] Do not cache index signature symbols looked up by the API Asking for the symbol of a property access that hits an index signature stored the index symbol as the access's resolved symbol. Checking a delete expression reads that link to decide whether the operand must be optional, so a prior symbol query turned `delete a.x` on an index signature into an error that a plain check does not report. The type of the index symbol at such an access, which hovers show, is found by comparing it to the symbol the access resolved to, so that comparison now looks the index symbol up again rather than reading it from links. --- tsc/internal/checker/checker.go | 18 ++++++++++++++++-- ...eckorder=typesfirst,strict=true).errors.txt | 8 +------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 434c1bae1b2c6..59005bc76820d 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -16994,7 +16994,7 @@ func (c *Checker) GetTypeOfSymbolAtLocation(symbol *ast.Symbol, location *ast.No } else { t = c.getTypeOfExpression(location) } - if c.getExportSymbolOfValueSymbolIfExported(c.symbolNodeLinks.Get(location).resolvedSymbol) == symbol { + if c.getExportSymbolOfValueSymbolIfExported(c.resolvedSymbolAtLocation(location, symbol)) == symbol { return c.removeOptionalTypeMarker(t) } } @@ -17014,6 +17014,18 @@ func (c *Checker) GetTypeOfSymbolAtLocation(symbol *ast.Symbol, location *ast.No return c.getNonMissingTypeOfSymbol(symbol) } +// resolvedSymbolAtLocation returns the symbol that the checked expression at +// location resolved to. Index symbols are not cached in links (see +// getSymbolOfNameOrPropertyAccessExpression), so an access that resolved to +// none is matched against the index signature it would use. +func (c *Checker) resolvedSymbolAtLocation(location *ast.Node, symbol *ast.Symbol) *ast.Symbol { + resolved := c.symbolNodeLinks.Get(location).resolvedSymbol + if resolved == nil && symbol.CheckFlags()&ast.CheckFlagsIndexSymbol != 0 && ast.IsPropertyAccessExpression(location) && !ast.IsPrivateIdentifier(location.Name()) { + resolved = c.getApplicableIndexSymbol(c.checkExpressionCached(location.Expression()), c.getLiteralTypeFromPropertyName(location.Name())) + } + return resolved +} + func (c *Checker) getTypeOfSymbol(symbol *ast.Symbol) *Type { if symbol.CheckFlags()&ast.CheckFlagsDeferredType != 0 { return c.getTypeOfSymbolWithDeferredType(symbol) @@ -32846,7 +32858,9 @@ func (c *Checker) getSymbolOfNameOrPropertyAccessExpression(name *ast.Node) *ast if ast.IsPropertyAccessExpression(name) { c.checkPropertyAccessExpression(name, CheckModeNormal, false /*writeOnly*/) if links.resolvedSymbol == nil && !ast.IsPrivateIdentifier(name.Name()) { - links.resolvedSymbol = c.getApplicableIndexSymbol( + // Not cached in links, where checking would observe it as the + // property the access resolved to. + return c.getApplicableIndexSymbol( c.checkExpressionCached(name.Expression()), c.getLiteralTypeFromPropertyName(name.Name()), ) diff --git a/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=true).errors.txt b/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=true).errors.txt index d3c1fd53cc93f..f3abcf0386f5b 100644 --- a/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=true).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/deleteExpressionMustBeOptional(checkorder=typesfirst,strict=true).errors.txt @@ -1,11 +1,9 @@ deleteExpressionMustBeOptional.ts(25,8): error TS2790: The operand of a 'delete' operator must be optional. deleteExpressionMustBeOptional.ts(27,8): error TS2790: The operand of a 'delete' operator must be optional. deleteExpressionMustBeOptional.ts(34,10): error TS2339: Property 'j' does not exist on type 'Foo'. -deleteExpressionMustBeOptional.ts(36,8): error TS2790: The operand of a 'delete' operator must be optional. -deleteExpressionMustBeOptional.ts(37,8): error TS2790: The operand of a 'delete' operator must be optional. -==== deleteExpressionMustBeOptional.ts (5 errors) ==== +==== deleteExpressionMustBeOptional.ts (3 errors) ==== interface Foo { a: number b: number | undefined @@ -48,11 +46,7 @@ deleteExpressionMustBeOptional.ts(37,8): error TS2790: The operand of a 'delete' !!! error TS2339: Property 'j' does not exist on type 'Foo'. delete a.a - ~~~ -!!! error TS2790: The operand of a 'delete' operator must be optional. delete a.b - ~~~ -!!! error TS2790: The operand of a 'delete' operator must be optional. delete b.a delete b.b From 2e29eed6129f6adef2f4bfc2a3ce59d0e5688d23 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 19 Oct 2026 05:22:54 -0700 Subject: [PATCH 015/194] Complete contextual signatures before anyone reads them A context-sensitive function's signature takes the type parameters of a generic contextual signature, and its parameters their types, when the function is contextually checked. Anything reading the signature before then saw it incomplete and cached what it derived from it. Type aliases in the body read the type parameters as outer type parameters, so querying such an alias first resolved its conditional types eagerly. In declare function f(fun: (t: T) => void): void f(function self(t) { const s = self; type P = Parameters; }); P was [t: unknown] when the call was checked first, but [t: T] when P was asked for first, since s then had the uncontextual signature. Split out assigning the contextual parameter types, which completes the signature, from the rest of the contextual check, and have every way to obtain the signature request it: the type of the function's symbol, before anything resolves its members, and the signature of its declaration. The rest of the check, inferring the return type and checking the signature, remains for checking the function itself. Contextual typing can reach the enclosing call while the signature is being created, so keep the signature created there rather than replace the one that was contextually typed. This also makes it unnecessary to leave a function unchecked when its members are found being resolved. --- tsc/internal/checker/checker.go | 72 +++++++++++++------ tsc/internal/checker/types.go | 1 + ...ypeParameters(checkorder=typesfirst).types | 14 ++-- 3 files changed, 59 insertions(+), 28 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 59005bc76820d..325a184cd6b25 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -10457,8 +10457,32 @@ func (c *Checker) checkFunctionExpressionOrObjectLiteralMethod(node *ast.Node, c } func (c *Checker) contextuallyCheckFunctionExpressionOrObjectLiteralMethod(node *ast.Node, checkMode CheckMode) { + c.assignContextualParameterTypesOfFunction(node, checkMode) + links := c.nodeLinks.Get(node) + if links.flags&NodeCheckFlagsContextChecked == 0 || links.flags&NodeCheckFlagsSignatureContextChecked != 0 { + return + } + links.flags |= NodeCheckFlagsSignatureContextChecked + signature := c.getSignatureFromDeclarationUncontextual(node) + contextualSignature := c.getContextualSignature(node) + if contextualSignature != nil && c.getReturnTypeFromAnnotation(node) == nil && signature.resolvedReturnType == nil { + // resolvedReturnType is cached indefinitely, so the return type here has to be computed without CheckModeSkipContextSensitive; + // otherwise anyFunctionType could leak as part of the computed (and cached) return type. + returnType := c.getReturnTypeFromBody(node, checkMode&^CheckModeSkipContextSensitive) + if signature.resolvedReturnType == nil { + signature.resolvedReturnType = returnType + } + } + c.checkSignatureDeclaration(node) +} + +// assignContextualParameterTypesOfFunction assigns the parameters of a +// function expression or object literal method their contextual types, and +// its signature the type parameters of a generic contextual signature. The +// signature of the function is not complete until then, so +// getSignatureFromDeclaration requests this before returning it. +func (c *Checker) assignContextualParameterTypesOfFunction(node *ast.Node, checkMode CheckMode) { links := c.nodeLinks.Get(node) - // Check if function expression is contextually typed and assign parameter types if so. if links.flags&NodeCheckFlagsContextChecked == 0 { contextualSignature := c.getContextualSignature(node) // If a type check is started at a function expression that is an argument of a function call, obtaining the @@ -10466,14 +10490,7 @@ func (c *Checker) contextuallyCheckFunctionExpressionOrObjectLiteralMethod(node // already assigned contextual types. if links.flags&NodeCheckFlagsContextChecked == 0 { links.flags |= NodeCheckFlagsContextChecked - signature := core.FirstOrNil(c.getSignaturesOfType(c.getTypeOfSymbol(c.getSymbolOfDeclaration(node)), SignatureKindCall)) - if signature == nil { - // The members of the function's type are being resolved, which - // can contextually check the function through its enclosing call. - // Leave the check to whoever asks once they are resolved. - links.flags &^= NodeCheckFlagsContextChecked - return - } + signature := c.getSignatureFromDeclarationUncontextual(node) if c.isContextSensitive(node) { if contextualSignature != nil { inferenceContext := c.getInferenceContext(node) @@ -10503,15 +10520,6 @@ func (c *Checker) contextuallyCheckFunctionExpressionOrObjectLiteralMethod(node c.inferFromAnnotatedParametersAndReturn(signature, contextualSignature, inferenceContext) } } - if contextualSignature != nil && c.getReturnTypeFromAnnotation(node) == nil && signature.resolvedReturnType == nil { - // resolvedReturnType is cached indefinitely, so the return type here has to be computed without CheckModeSkipContextSensitive; - // otherwise anyFunctionType could leak as part of the computed (and cached) return type. - returnType := c.getReturnTypeFromBody(node, checkMode&^CheckModeSkipContextSensitive) - if signature.resolvedReturnType == nil { - signature.resolvedReturnType = returnType - } - } - c.checkSignatureDeclaration(node) } } } @@ -17446,6 +17454,12 @@ func (c *Checker) getTypeOfFuncClassEnumModule(symbol *ast.Symbol) *Type { if links.resolvedType == nil { links.resolvedType = c.getTypeOfFuncClassEnumModuleWorker(symbol) } + if declaration := symbol.ValueDeclaration(); declaration != nil && c.isContextSensitiveFunctionOrObjectLiteralMethod(declaration) { + // Complete the signature before anything resolves the members of the + // type: doing so may check the enclosing call, which needs the + // members of the type. + c.assignContextualParameterTypesOfFunction(declaration, CheckModeNormal) + } return links.resolvedType } @@ -20584,6 +20598,17 @@ func (c *Checker) getSignaturesOfSymbol(symbol *ast.Symbol) []*Signature { } func (c *Checker) getSignatureFromDeclaration(declaration *ast.Node) *Signature { + signature := c.getSignatureFromDeclarationUncontextual(declaration) + if c.isContextSensitiveFunctionOrObjectLiteralMethod(declaration) { + c.assignContextualParameterTypesOfFunction(declaration, CheckModeNormal) + } + return signature +} + +// getSignatureFromDeclarationUncontextual returns the signature of a +// declaration without the contextual typing that completes the signatures +// of context-sensitive functions. +func (c *Checker) getSignatureFromDeclarationUncontextual(declaration *ast.Node) *Signature { links := c.signatureLinks.Get(declaration) if links.resolvedSignature != nil { return links.resolvedSignature @@ -20655,6 +20680,12 @@ func (c *Checker) getSignatureFromDeclaration(declaration *ast.Node) *Signature if ast.IsConstructorTypeNode(declaration) && ast.HasSyntacticModifier(declaration, ast.ModifierFlagsAbstract) || ast.IsConstructorDeclaration(declaration) && ast.HasSyntacticModifier(declaration.Parent, ast.ModifierFlagsAbstract) { flags |= SignatureFlagsAbstract } + if links.resolvedSignature != nil { + // Computing the signature reached the enclosing call, which + // contextually typed the function with a signature of its own, as + // when the call is checked first. Keep that one. + return links.resolvedSignature + } links.resolvedSignature = c.newSignature(flags, declaration, typeParameters, thisParameter, parameters, nil /*resolvedReturnType*/, nil /*resolvedTypePredicate*/, minArgumentCount) return links.resolvedSignature } @@ -24673,9 +24704,8 @@ func (c *Checker) getOuterTypeParameters(node *ast.Node, includeThisTypes bool) ast.KindConditionalType: outerTypeParameters := c.getOuterTypeParameters(node, includeThisTypes) if (kind == ast.KindFunctionExpression || kind == ast.KindArrowFunction || ast.IsObjectLiteralMethod(node)) && c.isContextSensitive(node) { - signature := core.FirstOrNil(c.getSignaturesOfType(c.getTypeOfSymbol(c.getSymbolOfDeclaration(node)), SignatureKindCall)) - if signature != nil && len(signature.TypeParameters()) != 0 { - return append(outerTypeParameters, signature.TypeParameters()...) + if typeParameters := c.getSignatureFromDeclaration(node).TypeParameters(); len(typeParameters) != 0 { + return append(outerTypeParameters, typeParameters...) } } if kind == ast.KindMappedType { diff --git a/tsc/internal/checker/types.go b/tsc/internal/checker/types.go index 01af2cb5d0c42..5662ee129323f 100644 --- a/tsc/internal/checker/types.go +++ b/tsc/internal/checker/types.go @@ -415,6 +415,7 @@ const ( NodeCheckFlagsNone NodeCheckFlags = 0 NodeCheckFlagsTypeChecked NodeCheckFlags = 1 << 0 // Node has been type checked NodeCheckFlagsContextChecked NodeCheckFlags = 1 << 6 // Contextual types have been assigned + NodeCheckFlagsSignatureContextChecked NodeCheckFlags = 1 << 7 // Signature of a contextually typed function has been checked NodeCheckFlagsEnumValuesComputed NodeCheckFlags = 1 << 10 // Values for enum members have been computed, and any errors have been reported for them. NodeCheckFlagsAssignmentsMarked NodeCheckFlags = 1 << 17 // Parameter assignments have been marked NodeCheckFlagsContainsClassWithPrivateIdentifiers NodeCheckFlags = 1 << 20 // Marked on all block-scoped containers containing a class with private identifiers. diff --git a/tsc/testdata/baselines/reference/compiler/contextualOuterTypeParameters(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/contextualOuterTypeParameters(checkorder=typesfirst).types index 8ce78e0dad408..3be38bfec4e31 100644 --- a/tsc/testdata/baselines/reference/compiler/contextualOuterTypeParameters(checkorder=typesfirst).types +++ b/tsc/testdata/baselines/reference/compiler/contextualOuterTypeParameters(checkorder=typesfirst).types @@ -37,13 +37,13 @@ const fn1: (x: T) => void = t => { >t : T type isArray = (typeof t)[] extends string[] ? true : false; ->isArray : false +>isArray : T[] extends string[] ? true : false >t : T >true : true >false : false type IsObject = { x: typeof t } extends { x: string } ? true : false; ->IsObject : false +>IsObject : { x: typeof t; } extends { x: string; } ? true : false >x : T >t : T >x : string @@ -60,13 +60,13 @@ const fn2: (x: T) => void = function test(t) { >t : T type isArray = (typeof t)[] extends string[] ? true : false; ->isArray : false +>isArray : T[] extends string[] ? true : false >t : T >true : true >false : false type IsObject = { x: typeof t } extends { x: string } ? true : false; ->IsObject : false +>IsObject : { x: typeof t; } extends { x: string; } ? true : false >x : T >t : T >x : string @@ -86,13 +86,13 @@ const obj: { f: (x: T) => void } = { >t : T type isArray = (typeof t)[] extends string[] ? true : false; ->isArray : false +>isArray : T[] extends string[] ? true : false >t : T >true : true >false : false type IsObject = { x: typeof t } extends { x: string } ? true : false; ->IsObject : false +>IsObject : { x: typeof t; } extends { x: string; } ? true : false >x : T >t : T >x : string @@ -113,7 +113,7 @@ f(function self(t) { >self : (t: T) => void type P = Parameters; ->P : [t: T] +>P : [t: unknown] >s : (t: T) => void }); From 2550147c4602d7ba70ac6e5252bce4614dbc691e Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 19 Oct 2026 05:36:20 -0700 Subject: [PATCH 016/194] Do not cache instantiations of single signature types A single signature type produced by higher order inference is instantiated with the full mapper combined in, since its signature can reference type parameters other than the outer type parameters of its declaration. The instantiation cache was keyed only by the mapped outer type parameters, so two instantiations differing in another type parameter (here the this type) shared whichever result was computed first. Which property access was checked first therefore decided the type of both, and checking `outer.log` gave it the type of `inner.log` contrary to the test's expectation. --- tsc/internal/checker/checker.go | 29 +++++++++++-------- ...acheReuseAfterMappedTypeApplication1.types | 8 ++--- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 325a184cd6b25..ed85198b7c657 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -23253,6 +23253,22 @@ func (c *Checker) getObjectTypeInstantiation(t *Type, m *TypeMapper, alias *Type if newAlias == nil { newAlias = c.instantiateTypeAlias(t.alias, m) } + instantiate := func(newMapper *TypeMapper) *Type { + switch { + case target.objectFlags&ObjectFlagsReference != 0: + return c.createDeferredTypeReference(t.Target(), t.AsTypeReference().node, newMapper, newAlias) + case target.objectFlags&ObjectFlagsMapped != 0: + return c.instantiateMappedType(target, newMapper, newAlias) + default: + return c.instantiateAnonymousType(target, newMapper, newAlias) + } + } + if target.objectFlags&ObjectFlagsSingleSignatureType != 0 && m != nil { + // The signature may reference type parameters other than the outer + // type parameters of its declaration, so the instantiation is not + // determined by the type arguments and cannot be cached by them. + return instantiate(c.combineTypeMappers(newTypeMapper(typeParameters, typeArguments), m)) + } data := target.AsObjectType() key := getTypeInstantiationKey(typeArguments, newAlias, t.objectFlags&ObjectFlagsSingleSignatureType != 0) if data.instantiations == nil { @@ -23261,18 +23277,7 @@ func (c *Checker) getObjectTypeInstantiation(t *Type, m *TypeMapper, alias *Type } result := data.instantiations[key] if result == nil { - newMapper := newTypeMapper(typeParameters, typeArguments) - if target.objectFlags&ObjectFlagsSingleSignatureType != 0 && m != nil { - newMapper = c.combineTypeMappers(newMapper, m) - } - switch { - case target.objectFlags&ObjectFlagsReference != 0: - result = c.createDeferredTypeReference(t.Target(), t.AsTypeReference().node, newMapper, newAlias) - case target.objectFlags&ObjectFlagsMapped != 0: - result = c.instantiateMappedType(target, newMapper, newAlias) - default: - result = c.instantiateAnonymousType(target, newMapper, newAlias) - } + result = instantiate(newTypeMapper(typeParameters, typeArguments)) data.instantiations[key] = result if result.flags&TypeFlagsObjectFlagsType != 0 && result.objectFlags&ObjectFlagsCouldContainTypeVariablesComputed == 0 { // if `result` is one of the object types we tried to make (it may not be, due to how `instantiateMappedType` works), we can carry forward the type variable containment check from the input type arguments diff --git a/tsc/testdata/baselines/reference/compiler/genericCallInferenceUsingThisTypeNoInvalidCacheReuseAfterMappedTypeApplication1.types b/tsc/testdata/baselines/reference/compiler/genericCallInferenceUsingThisTypeNoInvalidCacheReuseAfterMappedTypeApplication1.types index c6a517dc1a0c3..63ccf34626aea 100644 --- a/tsc/testdata/baselines/reference/compiler/genericCallInferenceUsingThisTypeNoInvalidCacheReuseAfterMappedTypeApplication1.types +++ b/tsc/testdata/baselines/reference/compiler/genericCallInferenceUsingThisTypeNoInvalidCacheReuseAfterMappedTypeApplication1.types @@ -92,10 +92,10 @@ export const a = inner.log(100); // Effect<100, never, never> >100 : 100 export const b = outer.log(100); // Effect<100, never, XXX> ->b : Effect<100, never, never> ->outer.log(100) : Effect<100, never, never> ->outer.log : (n: N) => Effect +>b : Effect<100, never, XXX> +>outer.log(100) : Effect<100, never, XXX> +>outer.log : (n: N) => Effect >outer : ProxyMap ->log : (n: N) => Effect +>log : (n: N) => Effect >100 : 100 From d6500208c64aaaa895faa3d0396f29c56481c19d Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 19 Oct 2026 09:25:26 -0700 Subject: [PATCH 017/194] Report unresolved names after resolution completes Explaining why a name failed to resolve looks up other symbols, for example to find a spelling suggestion, and that can resolve aliases. When the failed name was the target of an alias, the suggestion lookup re-entered the alias being resolved, or skipped it, depending on which aliases were already in progress. In declarationEmitUnknownImport that decided whether two "Circular definition of import alias" errors were reported: they appeared when the import was checked first, and not when the export specifier was resolved first. Defer the explanation until no resolution is in progress, so it only observes finished results. The circularity errors that were artifacts of the suggestion lookup are no longer reported. --- tsc/internal/checker/checker.go | 11 +++++++++++ ...arationEmitUnknownImport(target=es2015).errors.txt | 10 ++-------- ...rationEmitUnknownImport2(target=es2015).errors.txt | 10 ++-------- ...FlakyDiagnosticsSpellingSuggestionOrder.errors.txt | 4 ++-- .../noFlakyDiagnosticsSpellingSuggestionOrder.types | 2 +- 5 files changed, 18 insertions(+), 19 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index ed85198b7c657..7c03be4f438c0 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -1647,6 +1647,17 @@ func (c *Checker) checkAndReportErrorForMissingPrefix(errorLocation *ast.Node, n } func (c *Checker) onFailedToResolveSymbol(errorLocation *ast.Node, name string, meaning ast.SymbolFlags, nameNotFoundMessage *diagnostics.Message) { + // Explaining the failure looks up other symbols, for example to suggest a + // spelling, which can resolve aliases. Doing that in the middle of the + // resolution that failed would make the explanation, and any circularity + // errors it causes, depend on what else happened to be in progress. Defer + // it until no resolution is in progress, so it only observes results. + c.addDeferredDiagnostic(func() { + c.reportFailedToResolveSymbol(errorLocation, name, meaning, nameNotFoundMessage) + }) +} + +func (c *Checker) reportFailedToResolveSymbol(errorLocation *ast.Node, name string, meaning ast.SymbolFlags, nameNotFoundMessage *diagnostics.Message) { // The `const` in a `const` assertion (`x as const`) is a syntactic marker, not a real // type reference, and must never be resolved or reported as an unresolvable name. if isConstTypeReferenceName(errorLocation) { diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitUnknownImport(target=es2015).errors.txt b/tsc/testdata/baselines/reference/compiler/declarationEmitUnknownImport(target=es2015).errors.txt index 1826289e03769..512f22fa8a9b6 100644 --- a/tsc/testdata/baselines/reference/compiler/declarationEmitUnknownImport(target=es2015).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitUnknownImport(target=es2015).errors.txt @@ -1,17 +1,11 @@ -declarationEmitUnknownImport.ts(1,1): error TS2303: Circular definition of import alias 'Foo'. declarationEmitUnknownImport.ts(1,14): error TS2304: Cannot find name 'SomeNonExistingName'. declarationEmitUnknownImport.ts(1,14): error TS2503: Cannot find namespace 'SomeNonExistingName'. -declarationEmitUnknownImport.ts(2,9): error TS2303: Circular definition of import alias 'Foo'. -==== declarationEmitUnknownImport.ts (4 errors) ==== +==== declarationEmitUnknownImport.ts (2 errors) ==== import Foo = SomeNonExistingName - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2303: Circular definition of import alias 'Foo'. ~~~~~~~~~~~~~~~~~~~ !!! error TS2304: Cannot find name 'SomeNonExistingName'. ~~~~~~~~~~~~~~~~~~~ !!! error TS2503: Cannot find namespace 'SomeNonExistingName'. - export {Foo} - ~~~ -!!! error TS2303: Circular definition of import alias 'Foo'. \ No newline at end of file + export {Foo} \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitUnknownImport2(target=es2015).errors.txt b/tsc/testdata/baselines/reference/compiler/declarationEmitUnknownImport2(target=es2015).errors.txt index f52b6fd9af9fc..07239f7d2748f 100644 --- a/tsc/testdata/baselines/reference/compiler/declarationEmitUnknownImport2(target=es2015).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitUnknownImport2(target=es2015).errors.txt @@ -1,15 +1,11 @@ -declarationEmitUnknownImport2.ts(1,1): error TS2303: Circular definition of import alias 'Foo'. declarationEmitUnknownImport2.ts(1,12): error TS1005: '=' expected. declarationEmitUnknownImport2.ts(1,12): error TS2304: Cannot find name 'From'. declarationEmitUnknownImport2.ts(1,12): error TS2503: Cannot find namespace 'From'. declarationEmitUnknownImport2.ts(1,17): error TS1005: ';' expected. -declarationEmitUnknownImport2.ts(2,1): error TS2303: Circular definition of import alias 'Foo'. -==== declarationEmitUnknownImport2.ts (6 errors) ==== +==== declarationEmitUnknownImport2.ts (4 errors) ==== import Foo From './Foo'; // Syntax error - ~~~~~~~~~~~~~~~ -!!! error TS2303: Circular definition of import alias 'Foo'. ~~~~ !!! error TS1005: '=' expected. ~~~~ @@ -18,6 +14,4 @@ declarationEmitUnknownImport2.ts(2,1): error TS2303: Circular definition of impo !!! error TS2503: Cannot find namespace 'From'. ~~~~~~~ !!! error TS1005: ';' expected. - export default Foo - ~~~~~~~~~~~~~~~~~~ -!!! error TS2303: Circular definition of import alias 'Foo'. \ No newline at end of file + export default Foo \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsSpellingSuggestionOrder.errors.txt b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsSpellingSuggestionOrder.errors.txt index d8667784e78ea..a0a32ab10d645 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsSpellingSuggestionOrder.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsSpellingSuggestionOrder.errors.txt @@ -1,6 +1,6 @@ /main.ts(17,11): error TS2304: Cannot find name 'zz'. /main.ts(18,7): error TS2322: Type '{ pb: 0; readonly mb: 1; v: 0; }' is not assignable to type 'never'. -/main.ts(19,7): error TS2322: Type '{ v: 0; }' is not assignable to type 'never'. +/main.ts(19,7): error TS2322: Type '{ pa: 0; readonly ma: 1; v: 0; }' is not assignable to type 'never'. ==== /main.ts (3 errors) ==== @@ -28,7 +28,7 @@ !!! error TS2322: Type '{ pb: 0; readonly mb: 1; v: 0; }' is not assignable to type 'never'. const obsB: never = expand(); ~~~~ -!!! error TS2322: Type '{ v: 0; }' is not assignable to type 'never'. +!!! error TS2322: Type '{ pa: 0; readonly ma: 1; v: 0; }' is not assignable to type 'never'. ==== /ambient.d.ts (0 errors) ==== declare module "ma" { diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsSpellingSuggestionOrder.types b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsSpellingSuggestionOrder.types index 0c8a7c9521634..68af529e6dd8b 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsSpellingSuggestionOrder.types +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsSpellingSuggestionOrder.types @@ -35,7 +35,7 @@ const obsA: never = expand(); const obsB: never = expand(); >obsB : never ->expand() : { v: 0; } +>expand() : { pa: 0; readonly ma: 1; v: 0; } >expand : () => { [K in keyof X]: X[K]; } >oxb : O From d54124701a411988f1e5ae28c1dcaba9c7b54f33 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 18 Oct 2026 20:58:18 -0700 Subject: [PATCH 018/194] Apply the flow analysis depth limit per reference When one reference hit the flow analysis depth limit, flow analysis was disabled for every later reference in the same function or module body. The type of a reference then depended on whether another reference in the body had been analyzed before it. Each reference now gives up only when its own analysis hits the limit, so its type is the one it would get if it were analyzed first. --- tsc/internal/checker/checker.go | 9 +- tsc/internal/checker/flow.go | 7 +- .../compiler/largeControlFlowGraph.types | 4000 ++++++++--------- 3 files changed, 2003 insertions(+), 2013 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 7c03be4f438c0..4b7bfc0bc2338 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -844,7 +844,6 @@ type Checker struct { flowLoopStack []FlowLoopInfo sharedFlows []SharedFlow antecedentTypes []*Type - flowAnalysisDisabled bool flowInvocationCount int flowTypeCache map[*ast.Node]*Type lastFlowNode *ast.FlowNode @@ -3868,13 +3867,7 @@ func (c *Checker) checkBlock(node *ast.Node) { if node.Kind == ast.KindBlock { c.checkGrammarStatementInAmbientContext(node) } - if ast.IsFunctionOrModuleBlock(node) { - saveFlowAnalysisDisabled := c.flowAnalysisDisabled - c.checkSourceElements(node.Statements()) - c.flowAnalysisDisabled = saveFlowAnalysisDisabled - } else { - c.checkSourceElements(node.Statements()) - } + c.checkSourceElements(node.Statements()) if node.Locals().Len() != 0 { c.registerForUnusedIdentifiersCheck(node) } diff --git a/tsc/internal/checker/flow.go b/tsc/internal/checker/flow.go index 05daef984819d..ee3e2287f0661 100644 --- a/tsc/internal/checker/flow.go +++ b/tsc/internal/checker/flow.go @@ -79,9 +79,6 @@ func (c *Checker) getFlowTypeOfReference(reference *ast.Node, declaredType *Type } func (c *Checker) getFlowTypeOfReferenceEx(reference *ast.Node, declaredType *Type, initialType *Type, flowContainer *ast.Node, flowNode *ast.FlowNode) *Type { - if c.flowAnalysisDisabled { - return c.errorType - } if flowNode == nil { flowNode = getFlowNodeOfNode(reference) if flowNode == nil { @@ -117,11 +114,11 @@ func (c *Checker) getFlowTypeOfReferenceEx(reference *ast.Node, declaredType *Ty func (c *Checker) getTypeAtFlowNode(f *FlowState, flow *ast.FlowNode) FlowType { if f.depth == 2000 { // We have made 2000 recursive invocations. To avoid overflowing the call stack we report an error - // and disable further control flow analysis in the containing function or module body. + // and give up on this reference. Each reference hits the limit on its own, so its type does not depend + // on which other references were analyzed first. if tr := c.tracer; tr != nil { tr.Instant(tracing.PhaseCheckTypes, "getTypeAtFlowNode_DepthLimit", map[string]any{"depth": f.depth}) } - c.flowAnalysisDisabled = true c.reportFlowControlError(f.reference) return FlowType{t: c.errorType} } diff --git a/tsc/testdata/baselines/reference/compiler/largeControlFlowGraph.types b/tsc/testdata/baselines/reference/compiler/largeControlFlowGraph.types index 3880df26550f7..9ed5668ae6c80 100644 --- a/tsc/testdata/baselines/reference/compiler/largeControlFlowGraph.types +++ b/tsc/testdata/baselines/reference/compiler/largeControlFlowGraph.types @@ -10,14000 +10,14000 @@ const data = []; data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 data[0] = 0; >data[0] = 0 : 0 >data[0] : any ->data : any +>data : any[] >0 : 0 >0 : 0 From 2e6b26a625f7285cbddf328a137f4e7071802a4a Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 19 Oct 2026 09:35:28 -0700 Subject: [PATCH 019/194] Track computed property name cycles on the resolution stack A computed property name stored a placeholder type while its expression was checked, and returned the placeholder when re-entered. That kept the cycle off the resolution stack, so the computations in between did not fail, and the placeholder `{}` escaped into messages when checking entered through the property name, while `any` did when it entered through the variable it references. In blockScopedBindingUsedBeforeDef, the error read "Type '{}' cannot be used as an index type" or "Type 'any' ..." depending on what was checked first. Resolve computed property names on the resolution stack, failing with the error type on re-entry like other circular resolutions. --- tsc/internal/checker/checker.go | 14 ++++++++++++-- .../blockScopedBindingUsedBeforeDef.errors.txt | 12 ++++++------ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 4b7bfc0bc2338..879ed55a931a2 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -65,6 +65,7 @@ const ( TypeSystemPropertyNameWriteType TypeSystemPropertyNameInitializerIsUndefined TypeSystemPropertyNameAliasTarget + TypeSystemPropertyNameComputedPropertyName ) type TypeResolution struct { @@ -19400,6 +19401,8 @@ func (c *Checker) typeResolutionHasProperty(r *TypeResolution) bool { return c.valueSymbolLinks.Get(r.target.(*ast.Symbol)).getWriteType() != nil case TypeSystemPropertyNameAliasTarget: return c.aliasSymbolLinks.Get(r.target.(*ast.Symbol)).aliasTarget != nil + case TypeSystemPropertyNameComputedPropertyName: + return c.typeNodeLinks.Get(r.target.(*ast.Node)).resolvedType != nil } panic("Unhandled case in typeResolutionHasProperty") } @@ -27781,12 +27784,19 @@ func isInvalidComputedPropertyName(node *ast.Node) bool { func (c *Checker) checkComputedPropertyName(node *ast.Node) *Type { links := c.typeNodeLinks.Get(node) if links.resolvedType == nil { - links.resolvedType = c.circularConstraintType if isInvalidComputedPropertyName(node) { links.resolvedType = c.errorType return links.resolvedType } - links.resolvedType = c.checkExpression(node.Expression()) + if !c.pushTypeResolution(node, TypeSystemPropertyNameComputedPropertyName) { + return c.errorType + } + t := c.checkExpression(node.Expression()) + c.popTypeResolution() + if links.resolvedType != nil { + return links.resolvedType + } + links.resolvedType = t // This will allow types number, string, symbol or any. It will also allow enums, the unknown // type, and any union of these types (like string | number). if links.resolvedType.flags&TypeFlagsNullable != 0 || diff --git a/tsc/testdata/baselines/reference/compiler/blockScopedBindingUsedBeforeDef.errors.txt b/tsc/testdata/baselines/reference/compiler/blockScopedBindingUsedBeforeDef.errors.txt index 1be1808a2e8cc..4eb1fec342c35 100644 --- a/tsc/testdata/baselines/reference/compiler/blockScopedBindingUsedBeforeDef.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/blockScopedBindingUsedBeforeDef.errors.txt @@ -1,9 +1,9 @@ blockScopedBindingUsedBeforeDef.ts(2,12): error TS2448: Block-scoped variable 'a' used before its declaration. -blockScopedBindingUsedBeforeDef.ts(2,12): error TS2538: Type '{}' cannot be used as an index type. +blockScopedBindingUsedBeforeDef.ts(2,12): error TS2538: Type 'any' cannot be used as an index type. blockScopedBindingUsedBeforeDef.ts(5,12): error TS2448: Block-scoped variable 'a' used before its declaration. -blockScopedBindingUsedBeforeDef.ts(5,12): error TS2538: Type '{}' cannot be used as an index type. +blockScopedBindingUsedBeforeDef.ts(5,12): error TS2538: Type 'any' cannot be used as an index type. blockScopedBindingUsedBeforeDef.ts(8,7): error TS2448: Block-scoped variable 'b' used before its declaration. -blockScopedBindingUsedBeforeDef.ts(8,7): error TS2538: Type '{}' cannot be used as an index type. +blockScopedBindingUsedBeforeDef.ts(8,7): error TS2538: Type 'any' cannot be used as an index type. ==== blockScopedBindingUsedBeforeDef.ts (6 errors) ==== @@ -13,7 +13,7 @@ blockScopedBindingUsedBeforeDef.ts(8,7): error TS2538: Type '{}' cannot be used !!! error TS2448: Block-scoped variable 'a' used before its declaration. !!! related TS2728 blockScopedBindingUsedBeforeDef.ts:2:16: 'a' is declared here. ~ -!!! error TS2538: Type '{}' cannot be used as an index type. +!!! error TS2538: Type 'any' cannot be used as an index type. // 2: for (let {[a]: a} = { }; false; ) continue; @@ -21,7 +21,7 @@ blockScopedBindingUsedBeforeDef.ts(8,7): error TS2538: Type '{}' cannot be used !!! error TS2448: Block-scoped variable 'a' used before its declaration. !!! related TS2728 blockScopedBindingUsedBeforeDef.ts:5:16: 'a' is declared here. ~ -!!! error TS2538: Type '{}' cannot be used as an index type. +!!! error TS2538: Type 'any' cannot be used as an index type. // 3: let {[b]: b} = { }; @@ -29,4 +29,4 @@ blockScopedBindingUsedBeforeDef.ts(8,7): error TS2538: Type '{}' cannot be used !!! error TS2448: Block-scoped variable 'b' used before its declaration. !!! related TS2728 blockScopedBindingUsedBeforeDef.ts:8:11: 'b' is declared here. ~ -!!! error TS2538: Type '{}' cannot be used as an index type. \ No newline at end of file +!!! error TS2538: Type 'any' cannot be used as an index type. \ No newline at end of file From a623842d94780b5c9c28bdba421d10446256ae50 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 19 Oct 2026 09:08:32 -0700 Subject: [PATCH 020/194] Don't reuse incomplete shared flow types after their loop exits MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Shared flow node results are cached for the duration of one flow analysis, including incomplete results computed under a loop back edge. Those incomplete results reflect the partial types of the loop being analyzed; once that loop's back edge has been exited and the loop label has a complete type, they are stale. Reusing them made a reference's type depend on which reference was analyzed first: in exhaustiveSwitchCheckCircularity, querying the reference inside the loop before the switch expression produced `never` instead of "bbb". Remember which flow loop was innermost when a shared result was computed, and only reuse an incomplete result while that loop is still being analyzed. │ before.txt │ after.txt │ │ sec/op │ sec/op vs base │ Compiler 2.270 ± 7% 2.240 ± 5% ~ (p=0.782 n=15) │ before.txt │ after.txt │ │ peak-RSS-bytes │ peak-RSS-bytes vs base │ Compiler 365.9Mi ± 3% 364.4Mi ± 6% ~ (p=0.683 n=15) --- tsc/internal/checker/checker.go | 2 ++ tsc/internal/checker/flow.go | 27 ++++++++++++++++--- ...ckCircularity(checkorder=typesfirst).types | 2 +- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 879ed55a931a2..457c836ba3462 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -261,6 +261,7 @@ type FlowLoopKey struct { type FlowLoopInfo struct { key FlowLoopKey types []*Type + id uint64 } // InferenceFlags @@ -844,6 +845,7 @@ type Checker struct { flowLoopCache map[FlowLoopKey]*Type flowLoopStack []FlowLoopInfo sharedFlows []SharedFlow + flowLoopFrameCount uint64 antecedentTypes []*Type flowInvocationCount int flowTypeCache map[*ast.Node]*Type diff --git a/tsc/internal/checker/flow.go b/tsc/internal/checker/flow.go index ee3e2287f0661..7ee926e0f48d5 100644 --- a/tsc/internal/checker/flow.go +++ b/tsc/internal/checker/flow.go @@ -35,6 +35,9 @@ func (c *Checker) newFlowType(t *Type, incomplete bool) FlowType { type SharedFlow struct { flow *ast.FlowNode flowType FlowType + // loopFrame is the flow loop stack frame that was on top when flowType was + // computed, or zero when the stack was empty. + loopFrame uint64 } type FlowState struct { @@ -131,9 +134,13 @@ func (c *Checker) getTypeAtFlowNode(f *FlowState, flow *ast.FlowNode) FlowType { // the same getFlowTypeOfReference invocation. A node is considered shared when it is the // antecedent of more than one node. for i := f.sharedFlowStart; i < len(c.sharedFlows); i++ { - if c.sharedFlows[i].flow == flow { + // An incomplete type computed under a loop back edge that has since been + // exited reflects that loop's partial types, so it is no longer valid. + // Reusing it would make the result depend on which reference was + // analyzed first. + if s := &c.sharedFlows[i]; s.flow == flow && (!s.flowType.incomplete || c.isFlowLoopFrameActive(s.loopFrame)) { f.depth-- - return c.sharedFlows[i].flowType + return s.flowType } } sharedFlow = flow @@ -195,7 +202,7 @@ func (c *Checker) getTypeAtFlowNode(f *FlowState, flow *ast.FlowNode) FlowType { } if sharedFlow != nil { // Record visited node and the associated type in the cache. - c.sharedFlows = append(c.sharedFlows, SharedFlow{flow: sharedFlow, flowType: t}) + c.sharedFlows = append(c.sharedFlows, SharedFlow{flow: sharedFlow, flowType: t, loopFrame: c.currentFlowLoopFrame()}) } f.depth-- return t @@ -1319,6 +1326,17 @@ func (c *Checker) getUnionOrEvolvingArrayType(f *FlowState, types []*Type, subty return result } +func (c *Checker) currentFlowLoopFrame() uint64 { + if len(c.flowLoopStack) == 0 { + return 0 + } + return c.flowLoopStack[len(c.flowLoopStack)-1].id +} + +func (c *Checker) isFlowLoopFrameActive(id uint64) bool { + return id == 0 || slices.ContainsFunc(c.flowLoopStack, func(info FlowLoopInfo) bool { return info.id == id }) +} + func (c *Checker) getTypeAtFlowLoopLabel(f *FlowState, flow *ast.FlowNode) FlowType { if f.refKey.IsZero() { f.refKey = c.getFlowReferenceKey(f) @@ -1361,7 +1379,8 @@ func (c *Checker) getTypeAtFlowLoopLabel(f *FlowState, flow *ast.FlowNode) FlowT } else { // All but the first antecedent are the looping control flow paths that lead // back to the loop junction. We track these on the flow loop stack. - c.flowLoopStack = append(c.flowLoopStack, FlowLoopInfo{key: key, types: antecedentTypes}) + c.flowLoopFrameCount++ + c.flowLoopStack = append(c.flowLoopStack, FlowLoopInfo{key: key, types: antecedentTypes, id: c.flowLoopFrameCount}) saveFlowTypeCache := c.flowTypeCache c.flowTypeCache = nil flowType = c.getTypeAtFlowNode(f, list.Flow) diff --git a/tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=typesfirst).types index 651cd4a45a647..a7b44f6811ab9 100644 --- a/tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=typesfirst).types +++ b/tsc/testdata/baselines/reference/compiler/exhaustiveSwitchCheckCircularity(checkorder=typesfirst).types @@ -36,7 +36,7 @@ function f() { else if (isNever(foo)) { // Error expected >isNever(foo) : boolean >isNever : (n: never) => boolean ->foo : never +>foo : "bbb" break; } From bafc12701c027072e6abb9748d814929b300dd52 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 21 Oct 2026 09:32:37 -0700 Subject: [PATCH 021/194] Locate call resolution at the call Resolving a call's signature can be requested while checking one of its arguments, through contextual typing, as well as while checking the call itself. Errors that resolution reports at the current node, such as an instantiation depth error, were located at whichever node asked first, so checking an argument ahead of its call moved the error onto the argument. Locating resolution at the call makes the error independent of which was checked first. --- tsc/internal/checker/checker.go | 11 +++++++++++ ...TupleTypeNoCrash(checkorder=typesfirst).errors.txt | 7 ++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 457c836ba3462..947e07b5bfc2c 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -8683,6 +8683,17 @@ func isContextuallyTypedByEnclosingCall(node *ast.Node) bool { * @return a signature of the call-like expression or undefined if one can't be found */ func (c *Checker) getResolvedSignature(node *ast.Node, candidatesOutArray *[]*Signature, checkMode CheckMode) *Signature { + // Resolution is located at the call however it was requested, such as + // from contextually typing an argument, so that errors it reports at the + // current node do not depend on which was checked first. + saveCurrentNode := c.currentNode + c.currentNode = node + result := c.resolveSignatureOfCall(node, candidatesOutArray, checkMode) + c.currentNode = saveCurrentNode + return result +} + +func (c *Checker) resolveSignatureOfCall(node *ast.Node, candidatesOutArray *[]*Signature, checkMode CheckMode) *Signature { links := c.signatureLinks.Get(node) // If getResolvedSignature has already been called, we will have cached the resolvedSignature. // However, it is possible that either candidatesOutArray was not passed in the first time, diff --git a/tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=typesfirst).errors.txt index e78f397fc931f..8d568d19a5373 100644 --- a/tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=typesfirst).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=typesfirst).errors.txt @@ -1,8 +1,7 @@ -error TS2589: Type instantiation is excessively deep and possibly infinite. +circularInlineMappedGenericTupleTypeNoCrash.ts(11,12): error TS2589: Type instantiation is excessively deep and possibly infinite. -!!! error TS2589: Type instantiation is excessively deep and possibly infinite. -==== circularInlineMappedGenericTupleTypeNoCrash.ts (0 errors) ==== +==== circularInlineMappedGenericTupleTypeNoCrash.ts (1 errors) ==== class Foo { public readonly elements: { [P in keyof Elements]: { bar: Elements[P] } }; @@ -14,6 +13,8 @@ error TS2589: Type instantiation is excessively deep and possibly infinite. public add(): Foo<[...Elements, "abc"]> { return new Foo<[...Elements, "abc"]>(...this.elements, { bar: "abc" }); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. } } \ No newline at end of file From 1888ab0c74e6f6db65db78375b04ce7ab602fbbc Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 20 Oct 2026 15:26:08 -0700 Subject: [PATCH 022/194] Order deeply nested types by generation instead of type id isDeeplyNestedType only counts occurrences of a recursion identity that are newer than the previous one, so that nested type arguments, which were created before the types containing them, are not mistaken for expanding recursion. Type ids stand in for "newer", but they follow the order in which types happened to be created, so whether a comparison gives up as deeply nested depended on what had been checked before. A type's generation is one more than that of the types it was built from, which captures the same ordering wherever it follows from how the types are built, and nothing else. With it, both assignments in relationDeeplyNestedCheckOrder report their errors regardless of which is checked first. --- tsc/internal/checker/relater.go | 96 ++++++++++++++++++- tsc/internal/checker/types.go | 1 + .../relationDeeplyNestedCheckOrder.errors.txt | 31 ++++++ 3 files changed, 123 insertions(+), 5 deletions(-) create mode 100644 tsc/testdata/baselines/reference/compiler/relationDeeplyNestedCheckOrder.errors.txt diff --git a/tsc/internal/checker/relater.go b/tsc/internal/checker/relater.go index 7d45edce67b45..c47629ee54ef1 100644 --- a/tsc/internal/checker/relater.go +++ b/tsc/internal/checker/relater.go @@ -10,6 +10,7 @@ import ( "github.com/microsoft/TypeScript/tsc/internal/binder" "github.com/microsoft/TypeScript/tsc/internal/collections" "github.com/microsoft/TypeScript/tsc/internal/core" + "github.com/microsoft/TypeScript/tsc/internal/debug" "github.com/microsoft/TypeScript/tsc/internal/diagnostics" "github.com/microsoft/TypeScript/tsc/internal/jsnum" "github.com/microsoft/TypeScript/tsc/internal/stringutil" @@ -776,18 +777,20 @@ func (c *Checker) isDeeplyNestedType(t *Type, stack []*Type, maxDepth int) bool } else { identity := getRecursionIdentityFromTarget(target) count := 0 - lastTypeId := TypeId(0) + lastGeneration := 0 for _, t := range stack { if hasMatchingRecursionIdentity(t, identity) { - // We only count occurrences with a higher type id than the previous occurrence, since higher - // type ids are an indicator of newer instantiations caused by recursion. - if t.id >= lastTypeId { + // We only count occurrences of a generation at least that of the previous occurrence, since + // newer instantiations caused by recursion are built from the previous ones, whereas nested + // type arguments are older than the types they are arguments of. + generation := c.typeGeneration(t) + if generation >= lastGeneration { count++ if count >= maxDepth { return true } } - lastTypeId = t.id + lastGeneration = generation } } } @@ -795,6 +798,89 @@ func (c *Checker) isDeeplyNestedType(t *Type, stack []*Type, maxDepth int) bool return false } +const ( + maxTypeGeneration = 1<<16 - 3 + typeGenerationInProgress = 1<<16 - 1 +) + +// typeGeneration returns one more than the highest generation of the types t +// was instantiated from, or zero if it was not instantiated from any. A type is +// created after the types it is instantiated from, so this orders types by +// creation where the order follows from their structure, and unlike type ids +// does not depend on the order in which unrelated types were created. +func (c *Checker) typeGeneration(t *Type) int { + debug.Assert(t.generation != typeGenerationInProgress, "types are only built from existing types") + if t.generation != 0 { + return int(t.generation) - 1 + } + t.generation = typeGenerationInProgress + generation := 0 + switch { + case t.flags&TypeFlagsObject != 0: + if t.objectFlags&ObjectFlagsReference != 0 && t.AsTypeReference().node == nil { + generation = c.typesGeneration(t.AsTypeReference().resolvedTypeArguments) + } else if m := t.AsObjectType().mapper; m != nil { + generation = c.mapperGeneration(m) + } else if t.symbol != nil && t.symbol.Flags()&ast.SymbolFlagsObjectLiteral != 0 { + // Object literals are built from the types of their properties, + // except for those resolved lazily, such as accessors. + for prop := range t.AsStructuredType().members.Values() { + if prop.Flags()&ast.SymbolFlagsTransient == 0 || prop.CheckFlags()&(ast.CheckFlagsInstantiated|ast.CheckFlagsMapped|ast.CheckFlagsReverseMapped|ast.CheckFlagsDeferredType) != 0 { + continue + } + if propType := c.valueSymbolLinks.Get(prop).resolvedType; propType != nil { + generation = max(generation, c.typeGeneration(propType)+1) + } + } + } + case t.flags&TypeFlagsConditional != 0: + if m := t.AsConditionalType().mapper; m != nil { + generation = c.mapperGeneration(m) + } + case t.flags&TypeFlagsIndexedAccess != 0: + d := t.AsIndexedAccessType() + generation = max(c.typeGeneration(d.objectType), c.typeGeneration(d.indexType)) + 1 + case t.flags&TypeFlagsUnionOrIntersection != 0, t.flags&TypeFlagsTemplateLiteral != 0: + generation = c.typesGeneration(t.Types()) + case t.flags&TypeFlagsIndex != 0, t.flags&TypeFlagsStringMapping != 0: + generation = c.typeGeneration(t.Target()) + 1 + case t.flags&TypeFlagsSubstitution != 0: + d := t.AsSubstitutionType() + generation = max(c.typeGeneration(d.baseType), c.typeGeneration(d.constraint)) + 1 + } + generation = min(generation, maxTypeGeneration) + t.generation = uint16(generation + 1) + return generation +} + +func (c *Checker) typesGeneration(types []*Type) int { + generation := -1 + for _, t := range types { + generation = max(generation, c.typeGeneration(t)) + } + return generation + 1 +} + +// mapperGeneration returns one more than the highest generation of the types +// that m maps to, as far as they are known without computing them. +func (c *Checker) mapperGeneration(m *TypeMapper) int { + switch m.kind { + case TypeMapperKindSimple: + return c.typeGeneration(castTypeMapper[SimpleTypeMapper](m, TypeMapperKindSimple).target) + 1 + case TypeMapperKindArray: + return c.typesGeneration(castTypeMapper[ArrayTypeMapper](m, TypeMapperKindArray).targets) + case TypeMapperKindArrayToSingle: + return c.typeGeneration(castTypeMapper[ArrayToSingleTypeMapper](m, TypeMapperKindArrayToSingle).target) + 1 + case TypeMapperKindMerged: + d := castTypeMapper[MergedTypeMapper](m, TypeMapperKindMerged) + return max(c.mapperGeneration(d.m1), c.mapperGeneration(d.m2)) + case TypeMapperKindComposite: + d := castTypeMapper[CompositeTypeMapper](m, TypeMapperKindComposite) + return max(c.mapperGeneration(d.m1), c.mapperGeneration(d.m2)) + } + return 0 +} + func hasMatchingRecursionIdentity(t *Type, identity RecursionId) bool { target := getRecursionIdentityTarget(t) if target.flags&TypeFlagsIntersection != 0 { diff --git a/tsc/internal/checker/types.go b/tsc/internal/checker/types.go index 5662ee129323f..3adba7ced0a2c 100644 --- a/tsc/internal/checker/types.go +++ b/tsc/internal/checker/types.go @@ -782,6 +782,7 @@ type Type struct { objectFlags ObjectFlags id TypeId kind typeKind `customlint:"protected"` + generation uint16 // see Checker.typeGeneration; zero until computed symbol *ast.Symbol alias *TypeAlias checker *Checker diff --git a/tsc/testdata/baselines/reference/compiler/relationDeeplyNestedCheckOrder.errors.txt b/tsc/testdata/baselines/reference/compiler/relationDeeplyNestedCheckOrder.errors.txt new file mode 100644 index 0000000000000..aee81d03ee5ad --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/relationDeeplyNestedCheckOrder.errors.txt @@ -0,0 +1,31 @@ +relationDeeplyNestedCheckOrder.ts(12,1): error TS2322: Type 'A<{ a: string; }>' is not assignable to type 'A<{ a: "lit"; }>'. + The types of 'm1.a.m0.m1' are incompatible between these types. + Type 'string' is not assignable to type '"lit"'. +relationDeeplyNestedCheckOrder.ts(13,1): error TS2322: Type 'B<{ a: string; }>' is not assignable to type 'B<{ a: "lit"; }>'. + The types of 'm0.m1.a.m0.m1' are incompatible between these types. + Type 'string' is not assignable to type '"lit"'. + + +==== relationDeeplyNestedCheckOrder.ts (2 errors) ==== + // Relating 'B<{ a: string }>' to 'B<{ a: "lit" }>' eventually relates 'string' + // to '"lit"' through 'm0.m1.a.m0.m1'. Relating the 'A' instantiations first + // reaches the same comparison only after giving up on deeply nested types, + // which must not make relating the 'B' instantiations succeed afterwards. + + type A = { m0: (x: B) => void; m1: { [K in keyof T]: B } }; + type B = { m0: A }; + + declare let a1: A<{ a: string }>, a2: A<{ a: "lit" }>; + declare let b1: B<{ a: string }>, b2: B<{ a: "lit" }>; + + a2 = a1; + ~~ +!!! error TS2322: Type 'A<{ a: string; }>' is not assignable to type 'A<{ a: "lit"; }>'. +!!! error TS2322: The types of 'm1.a.m0.m1' are incompatible between these types. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. + b2 = b1; // Error + ~~ +!!! error TS2322: Type 'B<{ a: string; }>' is not assignable to type 'B<{ a: "lit"; }>'. +!!! error TS2322: The types of 'm0.m1.a.m0.m1' are incompatible between these types. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. + \ No newline at end of file From 4509521dd4989bac19ed996d561db876e8ab3bf5 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 20 Oct 2026 15:28:49 -0700 Subject: [PATCH 023/194] Reuse cached results for the broadest equivalent relation key Comparisons of types referencing constrained type parameters are considered related while the same comparison with unconstrained type parameters is in progress, since constraints only make more types related. The same goes for a completed comparison that was found to succeed, but its cached result was not consulted, so siblings that differ only in constraints were each compared from scratch. That only went unnoticed because completed comparisons stay in progress until the outermost one completes. Caching comparisons as soon as they are known to hold regardless of their context makes them leave that set early, and without this, relating structurally identical generic interfaces creates ten times the types. --- tsc/internal/checker/relater.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tsc/internal/checker/relater.go b/tsc/internal/checker/relater.go index c47629ee54ef1..6a5e3f6c2ef93 100644 --- a/tsc/internal/checker/relater.go +++ b/tsc/internal/checker/relater.go @@ -3238,6 +3238,12 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError if r.maybeKeysSet.Has(broadestEquivalentId) { return TernaryMaybe } + // What relates with unconstrained type parameters also relates with + // constrained ones. + if entry := r.relation.get(broadestEquivalentId); entry&RelationComparisonResultSucceeded != 0 { + r.c.reliabilityFlags |= entry & (RelationComparisonResultReportsUnmeasurable | RelationComparisonResultReportsUnreliable) + return TernaryTrue + } } if len(r.sourceStack) == 100 || len(r.targetStack) == 100 { // We stop relating if we reach 100 levels of nesting. This is a backstop to catch infinite recursion From d703f0ce86d65aa2b28290437585b3ce87e40deb Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 20 Oct 2026 15:55:42 -0700 Subject: [PATCH 024/194] Cache relation results only at the head of a recursion cycle MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A relation that succeeds while an outer comparison is still in progress has only been shown to hold under the outer comparison's assumption. Caching it globally made later lookups depend on which comparison happened to run first. The same was true for results cut short by depth limits measured against outer resolutions. Track the lowest resolution each result depends on and whether it was truncated. Results are cached globally only when the comparison that introduced their assumptions completes. Truncated results are cached only at their own head. Failures remain cached immediately, since assumptions only ever make a relation more likely to succeed. │ /tmp/bench-rx-H.txt │ /tmp/bench-rx-GC.txt │ │ sec/op │ sec/op vs base │ Compiler 2.135 ± 8% 2.145 ± 9% ~ (p=0.577 n=10) │ /tmp/bench-rx-H.txt │ /tmp/bench-rx-GC.txt │ │ peak-RSS-bytes │ peak-RSS-bytes vs base │ Compiler 366.5Mi ± 3% 367.5Mi ± 5% ~ (p=0.853 n=10) --- tsc/internal/checker/relater.go | 200 ++++++++++++++++++++++++-------- 1 file changed, 154 insertions(+), 46 deletions(-) diff --git a/tsc/internal/checker/relater.go b/tsc/internal/checker/relater.go index 6a5e3f6c2ef93..aa56a54b607f1 100644 --- a/tsc/internal/checker/relater.go +++ b/tsc/internal/checker/relater.go @@ -881,6 +881,21 @@ func (c *Checker) mapperGeneration(m *TypeMapper) int { return 0 } +// deeplyNestedStart returns the highest index in stack from which t is still +// deeply nested, or -1 if it is not deeply nested. Comparisons starting at or +// below that index would be truncated the same way. +func (c *Checker) deeplyNestedStart(t *Type, stack []*Type, maxDepth int) int { + if !c.isDeeplyNestedType(t, stack, maxDepth) { + return -1 + } + for k := len(stack) - maxDepth; k > 0; k-- { + if c.isDeeplyNestedType(t, stack[k:], maxDepth) { + return k + } + } + return 0 +} + func hasMatchingRecursionIdentity(t *Type, identity RecursionId) bool { target := getRecursionIdentityTarget(t) if target.flags&TypeFlagsIntersection != 0 { @@ -2668,22 +2683,48 @@ type ErrorChain struct { } type Relater struct { - c *Checker - relation *Relation - errorNode *ast.Node - errorChain *ErrorChain - relatedInfo []*ast.Diagnostic - maybeKeys []CacheHashKey - maybeKeysSet collections.Set[CacheHashKey] - sourceStack []*Type - targetStack []*Type - maybeCount int - sourceDepth int - targetDepth int + c *Checker + relation *Relation + errorNode *ast.Node + errorChain *ErrorChain + relatedInfo []*ast.Diagnostic + // maybeKeys are the comparisons in progress, followed by completed ones + // that hold assuming comparisons still in progress. maybeKeysSet indexes + // them by key. + maybeKeys []maybeKey + maybeKeysSet map[CacheHashKey]int + sourceStack []*Type + targetStack []*Type + // sourceDepths and targetDepths are the depths of the comparisons that + // pushed each entry of sourceStack and targetStack. + sourceDepths []int + targetDepths []int + // depth is the number of comparisons in progress. + depth int + // low is the lowest depth that the result of the innermost comparison in + // progress depends on, through assumptions or truncation. Results that + // depend on no comparison below their own are the same from scratch. + low int + // truncated is set if that result depends on a truncation that would not + // happen from scratch. + truncated bool expandingFlags ExpandingFlags - overflow bool - relationCount int - next *Relater + // expandingSourceDepth and expandingTargetDepth are the highest depths + // from which the expanding flags would still be set. + expandingSourceDepth int + expandingTargetDepth int + overflow bool + relationCount int + next *Relater +} + +type maybeKey struct { + key CacheHashKey + // low is the lowest depth that the comparison depends on, which is its + // own while it is in progress. + low int + result Ternary + truncated bool } func (c *Checker) getRelater() *Relater { @@ -2696,13 +2737,15 @@ func (c *Checker) getRelater() *Relater { } func (c *Checker) putRelater(r *Relater) { - r.maybeKeysSet.Clear() + clear(r.maybeKeysSet) *r = Relater{ c: c, maybeKeys: r.maybeKeys[:0], maybeKeysSet: r.maybeKeysSet, sourceStack: r.sourceStack[:0], targetStack: r.targetStack[:0], + sourceDepths: r.sourceDepths[:0], + targetDepths: r.targetDepths[:0], next: c.freeRelater, } c.freeRelater = r @@ -3227,16 +3270,16 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError return TernaryFalse } // If source and target are already being compared, consider them related with assumptions - if r.maybeKeysSet.Has(id) { - return TernaryMaybe + if i, ok := r.maybeKeysSet[id]; ok { + return r.assume(i) } // A constrained key indicates that we have type references that reference constrained // type parameters. For such keys we also check against the key we would have gotten if all type parameters // were unconstrained. if constrained { broadestEquivalentId, _ := getRelationKey(source, target, intersectionState, r.relation == r.c.identityRelation, true /*ignoreConstraints*/) - if r.maybeKeysSet.Has(broadestEquivalentId) { - return TernaryMaybe + if i, ok := r.maybeKeysSet[broadestEquivalentId]; ok { + return r.assume(i) } // What relates with unconstrained type parameters also relates with // constrained ones. @@ -3249,22 +3292,45 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError // We stop relating if we reach 100 levels of nesting. This is a backstop to catch infinite recursion // that wasn't caught by isDeeplyNestedType. It will also stop relating types that truly are over 100 // levels deep, but those are exceedingly rare. + depth := r.depth + if len(r.sourceStack) == 100 { + depth = min(depth, r.sourceDepths[0]) + } + if len(r.targetStack) == 100 { + depth = min(depth, r.targetDepths[0]) + } + r.truncate(depth) return TernaryMaybe } + depth := r.depth + r.depth++ maybeStart := len(r.maybeKeys) - r.maybeKeys = append(r.maybeKeys, id) - r.maybeKeysSet.Add(id) - saveExpandingFlags := r.expandingFlags + r.maybeKeys = append(r.maybeKeys, maybeKey{key: id, low: depth, result: TernaryMaybe}) + if r.maybeKeysSet == nil { + r.maybeKeysSet = make(map[CacheHashKey]int) + } + r.maybeKeysSet[id] = maybeStart + saveLow, saveTruncated := r.low, r.truncated + r.low, r.truncated = depth, false + saveExpandingFlags, saveExpandingSourceDepth, saveExpandingTargetDepth := r.expandingFlags, r.expandingSourceDepth, r.expandingTargetDepth if recursionFlags&RecursionFlagsSource != 0 { r.sourceStack = append(r.sourceStack, source) - if r.expandingFlags&ExpandingFlagsSource == 0 && r.c.isDeeplyNestedType(source, r.sourceStack, 3) { - r.expandingFlags |= ExpandingFlagsSource + r.sourceDepths = append(r.sourceDepths, depth) + if r.expandingFlags&ExpandingFlagsSource == 0 { + if k := r.c.deeplyNestedStart(source, r.sourceStack, 3); k >= 0 { + r.expandingFlags |= ExpandingFlagsSource + r.expandingSourceDepth = r.sourceDepths[k] + } } } if recursionFlags&RecursionFlagsTarget != 0 { r.targetStack = append(r.targetStack, target) - if r.expandingFlags&ExpandingFlagsTarget == 0 && r.c.isDeeplyNestedType(target, r.targetStack, 3) { - r.expandingFlags |= ExpandingFlagsTarget + r.targetDepths = append(r.targetDepths, depth) + if r.expandingFlags&ExpandingFlagsTarget == 0 { + if k := r.c.deeplyNestedStart(target, r.targetStack, 3); k >= 0 { + r.expandingFlags |= ExpandingFlagsTarget + r.expandingTargetDepth = r.targetDepths[k] + } } } saveReliabilityFlags := r.c.reliabilityFlags @@ -3274,6 +3340,7 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError if tr := r.c.tracer; tr != nil { tr.Instant(tracing.PhaseCheckTypes, "recursiveTypeRelatedTo_DepthLimit", map[string]any{"sourceId": source.id, "targetId": target.id, "depth": len(r.sourceStack), "targetDepth": len(r.targetStack)}) } + r.truncate(min(r.expandingSourceDepth, r.expandingTargetDepth)) result = TernaryMaybe } else { if tr := r.c.tracer; tr != nil { @@ -3285,39 +3352,78 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError r.c.reliabilityFlags |= saveReliabilityFlags if recursionFlags&RecursionFlagsSource != 0 { r.sourceStack = r.sourceStack[:len(r.sourceStack)-1] + r.sourceDepths = r.sourceDepths[:len(r.sourceDepths)-1] } if recursionFlags&RecursionFlagsTarget != 0 { r.targetStack = r.targetStack[:len(r.targetStack)-1] + r.targetDepths = r.targetDepths[:len(r.targetDepths)-1] } - r.expandingFlags = saveExpandingFlags - if result != TernaryFalse { - if result == TernaryTrue || (len(r.sourceStack) == 0 && len(r.targetStack) == 0) { - if result == TernaryTrue || result == TernaryMaybe { - // If result is definitely true, record all maybe keys as having succeeded. Also, record Ternary.Maybe - // results as having succeeded once we reach depth 0, but never record Ternary.Unknown results. - r.resetMaybeStack(maybeStart, propagatingVarianceFlags, true) - } else { - r.resetMaybeStack(maybeStart, propagatingVarianceFlags, false) - } - } - // Note: it's intentional that we don't reset in the else case; - // we leave them on the stack such that when we hit depth zero - // above, we can report all of them as successful. - } else { + r.expandingFlags, r.expandingSourceDepth, r.expandingTargetDepth = saveExpandingFlags, saveExpandingSourceDepth, saveExpandingTargetDepth + r.depth-- + low, truncated := r.low, r.truncated + r.low, r.truncated = saveLow, saveTruncated + switch { + case result == TernaryFalse: // A false result goes straight into global cache (when something is false under // assumptions it will also be false without assumptions) r.relation.set(id, RelationComparisonResultFailed|propagatingVarianceFlags) r.relationCount-- r.resetMaybeStack(maybeStart, propagatingVarianceFlags, false) + case low >= depth: + // The result depends on no comparison outside of this one, so it is the + // same from scratch. Comparisons that completed assuming this one hold + // as well, unless they relied on truncation, which may not happen from + // scratch. Ternary.Unknown results are never recorded. + switch { + case result == TernaryUnknown: + r.resetMaybeStack(maybeStart, propagatingVarianceFlags, false) + case truncated: + r.resetMaybeStack(maybeStart, propagatingVarianceFlags, false) + r.relation.set(id, RelationComparisonResultSucceeded|propagatingVarianceFlags) + r.relationCount-- + default: + r.resetMaybeStack(maybeStart, propagatingVarianceFlags, true) + } + default: + // The result holds while the comparisons it depends on are in progress, + // so it is kept until the outermost of them completes. Until then, the + // same comparison elsewhere in this one relates the same way. + for i := maybeStart; i < len(r.maybeKeys); i++ { + m := &r.maybeKeys[i] + m.low = min(m.low, low) + m.truncated = m.truncated || truncated + if result == TernaryTrue { + m.result = TernaryTrue + } + } + r.low = min(r.low, low) + r.truncated = r.truncated || truncated } return result } +// assume relates a comparison in progress, or one that completed assuming one +// in progress, as it was related so far. +func (r *Relater) assume(i int) Ternary { + m := &r.maybeKeys[i] + r.low = min(r.low, m.low) + r.truncated = r.truncated || m.truncated + return m.result +} + +// truncate records that the comparison in progress was cut short in a way +// that depends on depth and the depths above it. +func (r *Relater) truncate(depth int) { + r.low = min(r.low, depth) + r.truncated = true +} + func (r *Relater) resetMaybeStack(maybeStart int, propagatingVarianceFlags RelationComparisonResult, markAllAsSucceeded bool) { for i := maybeStart; i < len(r.maybeKeys); i++ { - r.maybeKeysSet.Delete(r.maybeKeys[i]) + key := r.maybeKeys[i].key + delete(r.maybeKeysSet, key) if markAllAsSucceeded { - r.relation.set(r.maybeKeys[i], RelationComparisonResultSucceeded|propagatingVarianceFlags) + r.relation.set(key, RelationComparisonResultSucceeded|propagatingVarianceFlags) r.relationCount-- } } @@ -3687,7 +3793,8 @@ func (r *Relater) structuredTypeRelatedToWorker(source *Type, target *Type, repo case target.flags&TypeFlagsConditional != 0: // If we reach 10 levels of nesting for the same conditional type, assume it is an infinitely expanding recursive // conditional type and bail out with a Ternary.Maybe result. - if r.c.isDeeplyNestedType(target, r.targetStack, 10) { + if k := r.c.deeplyNestedStart(target, r.targetStack, 10); k >= 0 { + r.truncate(r.targetDepths[k]) return TernaryMaybe } c := target.AsConditionalType() @@ -3868,7 +3975,8 @@ func (r *Relater) structuredTypeRelatedToWorker(source *Type, target *Type, repo case source.flags&TypeFlagsConditional != 0: // If we reach 10 levels of nesting for the same conditional type, assume it is an infinitely expanding recursive // conditional type and bail out with a Ternary.Maybe result. - if r.c.isDeeplyNestedType(source, r.sourceStack, 10) { + if k := r.c.deeplyNestedStart(source, r.sourceStack, 10); k >= 0 { + r.truncate(r.sourceDepths[k]) return TernaryMaybe } if target.flags&TypeFlagsConditional != 0 { From 8f235790344a69e28d65210ef414542190effb30 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 20 Oct 2026 16:23:08 -0700 Subject: [PATCH 025/194] Report completed cyclic comparisons as related A comparison that only relates by assuming comparisons in progress within it is cached as related once it completes, since nothing it assumed is in progress anymore. But the comparison itself still reported that it might be related, so callers that reject results depending on assumptions accepted it when it was read from the cache, and rejected it when it was computed. --- tsc/internal/checker/relater.go | 5 +++++ .../reference/compiler/relationMaybeCheckOrder.errors.txt | 5 +---- .../reference/compiler/relationMaybeCheckOrder.types | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/tsc/internal/checker/relater.go b/tsc/internal/checker/relater.go index aa56a54b607f1..81f50460d9875 100644 --- a/tsc/internal/checker/relater.go +++ b/tsc/internal/checker/relater.go @@ -3384,6 +3384,11 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError default: r.resetMaybeStack(maybeStart, propagatingVarianceFlags, true) } + // The result no longer depends on any comparison in progress, so it + // is reported as related, the same as when it is read from the cache. + if result == TernaryMaybe { + result = TernaryTrue + } default: // The result holds while the comparisons it depends on are in progress, // so it is kept until the outermost of them completes. Until then, the diff --git a/tsc/testdata/baselines/reference/compiler/relationMaybeCheckOrder.errors.txt b/tsc/testdata/baselines/reference/compiler/relationMaybeCheckOrder.errors.txt index 88dee4e5a8f7e..959e47bf00a94 100644 --- a/tsc/testdata/baselines/reference/compiler/relationMaybeCheckOrder.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/relationMaybeCheckOrder.errors.txt @@ -1,8 +1,7 @@ relationMaybeCheckOrder.ts(8,32): error TS2322: Type 'B' is not assignable to type 'string | number | symbol'. -relationMaybeCheckOrder.ts(18,11): error TS2322: Type '2' is not assignable to type '1'. -==== relationMaybeCheckOrder.ts (2 errors) ==== +==== relationMaybeCheckOrder.ts (1 errors) ==== // Relating to 'keyof M' rejects keys that relate only by assuming a // comparison still in progress. Relating 'A' to 'B' assumes only itself // along 'next', so it completes on its own and must be accepted whether @@ -23,8 +22,6 @@ relationMaybeCheckOrder.ts(18,11): error TS2322: Type '2' is not assignable to t function g(x: unknown): 2; function g(x: unknown) { return 1 as any; } const r: 1 = g(a); - ~ -!!! error TS2322: Type '2' is not assignable to type '1'. } const w: 1 = h(a); diff --git a/tsc/testdata/baselines/reference/compiler/relationMaybeCheckOrder.types b/tsc/testdata/baselines/reference/compiler/relationMaybeCheckOrder.types index ecbee15a795d4..79fb5d6072b67 100644 --- a/tsc/testdata/baselines/reference/compiler/relationMaybeCheckOrder.types +++ b/tsc/testdata/baselines/reference/compiler/relationMaybeCheckOrder.types @@ -47,7 +47,7 @@ function f() { const r: 1 = g(a); >r : 1 ->g(a) : 2 +>g(a) : 1 >g : { (x: keyof M): 1; (x: unknown): 2; } >a : A } From df3a51bb722fb55e1bb07f0c2db4badb418d841f Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 20 Oct 2026 17:45:48 -0700 Subject: [PATCH 026/194] Order derived type parameters by their origin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Type parameters that share a symbol (tuple elements, clones made for signature and mapped type instantiation, distributive and restrictive copies) all fell through CompareTypes to the type id tie-break. Type ids reflect creation order, so union ordering and everything derived from it depended on which code happened to run first. These ties were nearly all of the id fallbacks seen across the test suite. Order them by how they were derived instead: the kind of copy, then the original and the instantiation it was made for. Do the same for fresh and regular literal types. What remains on the id fallback is mostly object literal types re-created by repeated checks of one expression, which need stable ids to order. │ before.txt │ after.txt │ │ sec/op │ sec/op vs base │ Compiler 2.070 ± 2% 2.045 ± 3% ~ (p=0.670 n=10) │ before.txt │ after.txt │ │ peak-RSS-bytes │ peak-RSS-bytes vs base │ Compiler 354.0Mi ± 4% 366.7Mi ± 4% ~ (p=0.075 n=10) --- tsc/internal/checker/checker.go | 4 ++ tsc/internal/checker/types.go | 1 + tsc/internal/checker/utilities.go | 101 ++++++++++++++++++++++++++++++ 3 files changed, 106 insertions(+) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 947e07b5bfc2c..39385e13c4118 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -25480,6 +25480,7 @@ func (c *Checker) getRestrictiveTypeParameter(t *Type) *Type { } result := c.newTypeParameter(t.symbol) result.AsTypeParameter().constraint = c.noConstraintType + result.AsTypeParameter().origin = t c.cachedTypes[key] = result return result } @@ -25774,6 +25775,9 @@ func (c *Checker) createTupleTargetType(elementInfos []TupleElementInfo, readonl d.thisType = c.newTypeParameter(nil) d.thisType.AsTypeParameter().isThisType = true d.thisType.AsTypeParameter().constraint = t + for _, tp := range typeParameters { + tp.AsTypeParameter().origin = t + } d.allTypeParameters = append(typeParameters, d.thisType) d.instantiations = make(map[CacheHashKey]*Type) d.instantiations[getTypeListKey(d.TypeParameters())] = t diff --git a/tsc/internal/checker/types.go b/tsc/internal/checker/types.go index 3adba7ced0a2c..4d35cfad57a1e 100644 --- a/tsc/internal/checker/types.go +++ b/tsc/internal/checker/types.go @@ -1503,6 +1503,7 @@ type TypeParameter struct { isDistributed bool resolvedDefaultType *Type distributedType *Type + origin *Type // The type parameter a restrictive type parameter was made from, or the tuple target of a tuple element type parameter } func (t *TypeParameter) IsThisType() bool { return t.isThisType } diff --git a/tsc/internal/checker/utilities.go b/tsc/internal/checker/utilities.go index c4cc97fa29a1b..139a1978ff426 100644 --- a/tsc/internal/checker/utilities.go +++ b/tsc/internal/checker/utilities.go @@ -580,6 +580,9 @@ func CompareTypes(t1, t2 *Type) int { if c := t1.checker.compareSymbols(t1.symbol, t2.symbol); c != 0 { return c } + if c := compareTypeParameterOrigins(t1, t2); c != 0 { + return c + } case t1.flags&TypeFlagsIndex != 0: if c := CompareTypes(t1.AsIndexType().target, t2.AsIndexType().target); c != 0 { return c @@ -620,6 +623,12 @@ func CompareTypes(t1, t2 *Type) int { return c } } + // Fresh literal types follow their regular counterparts. + if t1.flags&TypeFlagsFreshable != 0 { + if f1, f2 := isFreshLiteralType(t1), isFreshLiteralType(t2); f1 != f2 { + return core.IfElse(f1, 1, -1) + } + } // Fall back to type IDs. This results in type creation order for built-in types. return int(t1.id) - int(t2.id) } @@ -704,6 +713,98 @@ func compareElementLabels(n1, n2 *ast.Node) int { return strings.Compare(n1.Name().Text(), n2.Name().Text()) } +type typeParameterOrigin int + +const ( + typeParameterOriginDeclared typeParameterOrigin = iota + typeParameterOriginThis + typeParameterOriginDistributed + typeParameterOriginRestrictive + typeParameterOriginTupleElement + typeParameterOriginClone +) + +func getTypeParameterOrigin(tp *TypeParameter) typeParameterOrigin { + switch { + case tp.isThisType: + return typeParameterOriginThis + case tp.isDistributed: + return typeParameterOriginDistributed + case tp.origin != nil && tp.origin.flags&TypeFlagsTypeParameter != 0: + return typeParameterOriginRestrictive + case tp.origin != nil: + return typeParameterOriginTupleElement + case tp.target != nil: + return typeParameterOriginClone + } + return typeParameterOriginDeclared +} + +// Type parameters that share a symbol are copies derived from a common original. +// Order them by how they were derived rather than by creation order. +func compareTypeParameterOrigins(t1, t2 *Type) int { + p1 := t1.AsTypeParameter() + p2 := t2.AsTypeParameter() + o1 := getTypeParameterOrigin(p1) + o2 := getTypeParameterOrigin(p2) + if o1 != o2 { + return int(o1) - int(o2) + } + switch o1 { + case typeParameterOriginThis: + // Tuple this types have no symbol; their constraint is the tuple target, + // initialized at creation. + if t1.symbol == nil { + return CompareTypes(p1.constraint, p2.constraint) + } + case typeParameterOriginDistributed: + return CompareTypes(p1.distributedType, p2.distributedType) + case typeParameterOriginRestrictive: + return CompareTypes(p1.origin, p2.origin) + case typeParameterOriginTupleElement: + if c := CompareTypes(p1.origin, p2.origin); c != 0 { + return c + } + return slices.Index(p1.origin.AsTupleType().allTypeParameters, t1) - slices.Index(p2.origin.AsTupleType().allTypeParameters, t2) + case typeParameterOriginClone: + if c := CompareTypes(p1.target, p2.target); c != 0 { + return c + } + return compareTypeMappers(getCloneOuterMapper(t1), getCloneOuterMapper(t2)) + } + return 0 +} + +// A cloned type parameter's mapper maps its target to the clone itself, +// optionally followed by the instantiation the clone was made for. Return only +// the latter so comparisons don't recurse into the clone. +func getCloneOuterMapper(t *Type) *TypeMapper { + m := t.AsTypeParameter().mapper + if m == nil { + return nil + } + if m.Kind() == TypeMapperKindComposite { + cm := castTypeMapper[CompositeTypeMapper](m, TypeMapperKindComposite) + if mapperTargetsType(cm.m1, t) { + return cm.m2 + } + } + if mapperTargetsType(m, t) { + return nil + } + return m +} + +func mapperTargetsType(m *TypeMapper, t *Type) bool { + switch m.Kind() { + case TypeMapperKindSimple: + return castTypeMapper[SimpleTypeMapper](m, TypeMapperKindSimple).target == t + case TypeMapperKindArray: + return slices.Contains(castTypeMapper[ArrayTypeMapper](m, TypeMapperKindArray).targets, t) + } + return false +} + func compareTypeLists(s1, s2 []*Type) int { if len(s1) != len(s2) { return len(s1) - len(s2) From 024c8fdc80e74c79c6388acdbd223643ce204c5c Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 20 Oct 2026 18:15:41 -0700 Subject: [PATCH 027/194] Order object literal types by their members MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Object literal types created from the same expression, or derived from one by spreading, share a symbol and have no mapper or target, so CompareTypes fell through to the type id. Which of two such types was created first depends on check order, so union order (and thus printed types) depended on it too. Their members are fixed at creation, so comparing member symbols, optionality, and member types orders them by content instead. The baseline changes are unions whose constituents now appear in that content order. │ before.txt │ after.txt │ │ sec/op │ sec/op vs base │ Compiler 2.045 ± 3% 2.075 ± 2% ~ (p=0.304 n=10) │ before.txt │ after.txt │ │ peak-RSS-bytes │ peak-RSS-bytes vs base │ Compiler 366.7Mi ± 4% 365.5Mi ± 5% ~ (p=0.796 n=10) --- tsc/internal/checker/utilities.go | 43 +++++++++++++++++++ .../compiler/nestedSpreadsAndWidening.types | 10 ++--- ...icitAnyUnionNormalizedObjectLiteral1.types | 4 +- .../objectInstantiationFromUnionSpread.types | 36 ++++++++-------- .../compiler/spreadUnionPropOverride.types | 8 ++-- .../reference/conformance/spreadUnion.types | 2 +- 6 files changed, 73 insertions(+), 30 deletions(-) diff --git a/tsc/internal/checker/utilities.go b/tsc/internal/checker/utilities.go index 139a1978ff426..ce450397e1ce1 100644 --- a/tsc/internal/checker/utilities.go +++ b/tsc/internal/checker/utilities.go @@ -525,6 +525,11 @@ func CompareTypes(t1, t2 *Type) int { if c := compareTypeMappers(m1, m2); c != 0 { return c } + if hasObjectLiteralMembers(t1) && hasObjectLiteralMembers(t2) { + if c := compareObjectLiteralMembers(t1, t2); c != 0 { + return c + } + } } case t1.flags&TypeFlagsUnion != 0: // Unions are ordered by origin and then constituent type lists. @@ -713,6 +718,44 @@ func compareElementLabels(n1, n2 *ast.Node) int { return strings.Compare(n1.Name().Text(), n2.Name().Text()) } +// Object literal types, and types derived from them, are given their members +// at creation rather than resolving them from their symbol. +func hasObjectLiteralMembers(t *Type) bool { + d := t.AsObjectType() + return d.target == nil && d.mapper == nil && t.symbol != nil && t.symbol.Flags()&ast.SymbolFlagsObjectLiteral != 0 +} + +func compareObjectLiteralMembers(t1, t2 *Type) int { + c := t1.checker + p1 := t1.AsStructuredType().properties + p2 := t2.AsStructuredType().properties + if n := len(p1) - len(p2); n != 0 { + return n + } + for i, s1 := range p1 { + s2 := p2[i] + if r := c.compareSymbols(s1, s2); r != 0 { + return r + } + if r := int(s1.Flags()&ast.SymbolFlagsOptional) - int(s2.Flags()&ast.SymbolFlagsOptional); r != 0 { + return r + } + if r := CompareTypes(c.peekTypeOfObjectLiteralMember(s1), c.peekTypeOfObjectLiteralMember(s2)); r != 0 { + return r + } + } + return 0 +} + +// The type of a member of an object literal type is set when the member is +// created. +func (c *Checker) peekTypeOfObjectLiteralMember(s *ast.Symbol) *Type { + if links := c.valueSymbolLinks.TryGet(s); links != nil { + return links.resolvedType + } + return nil +} + type typeParameterOrigin int const ( diff --git a/tsc/testdata/baselines/reference/compiler/nestedSpreadsAndWidening.types b/tsc/testdata/baselines/reference/compiler/nestedSpreadsAndWidening.types index 811f7fa0ac83f..7ede76595d8bc 100644 --- a/tsc/testdata/baselines/reference/compiler/nestedSpreadsAndWidening.types +++ b/tsc/testdata/baselines/reference/compiler/nestedSpreadsAndWidening.types @@ -120,19 +120,19 @@ declare const step: Action; read({ >read({ ...step, settings: { ...step.settings, input: { ...step.settings.input, k: ['5'] } },}) : void >read : (arg: T) => void ->{ ...step, settings: { ...step.settings, input: { ...step.settings.input, k: ['5'] } },} : { type: "1"; settings: { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; }; } | { type: "2"; settings: { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; }; } | { type: "3"; settings: { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | any | any; } | any | any +>{ ...step, settings: { ...step.settings, input: { ...step.settings.input, k: ['5'] } },} : { type: "1"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "2"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "3"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | any | any; } | any | any ...step, >step : Action settings: { ...step.settings, input: { ...step.settings.input, k: ['5'] } }, ->settings : { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } ->{ ...step.settings, input: { ...step.settings.input, k: ['5'] } } : { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } +>settings : { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } +>{ ...step.settings, input: { ...step.settings.input, k: ['5'] } } : { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } >step.settings : ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S1) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S10) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S11) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S2) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S3) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S4) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S5) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S6) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S7) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S8) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S9) >step : Action >settings : ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S1) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S10) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S11) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S2) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S3) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S4) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S5) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S6) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S7) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S8) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S9) ->input : { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } ->{ ...step.settings.input, k: ['5'] } : { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } +>input : { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } +>{ ...step.settings.input, k: ['5'] } : { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } >step.settings.input : { a: number; } | { b: number; } | { c: number; } | { d: number; } | { e: number; } | { f: number; } | { g: number; } | { h: number; } | { i: number; } | { j: number; } | { k?: string[]; } | ({ a: number; } & { b: number; }) | ({ a: number; } & { c: number; }) | ({ a: number; } & { d: number; }) | ({ a: number; } & { e: number; }) | ({ a: number; } & { f: number; }) | ({ a: number; } & { g: number; }) | ({ a: number; } & { h: number; }) | ({ a: number; } & { i: number; }) | ({ a: number; } & { j: number; }) | ({ a: number; } & { k?: string[]; }) | ({ b: number; } & { a: number; }) | ({ b: number; } & { c: number; }) | ({ b: number; } & { d: number; }) | ({ b: number; } & { e: number; }) | ({ b: number; } & { f: number; }) | ({ b: number; } & { g: number; }) | ({ b: number; } & { h: number; }) | ({ b: number; } & { i: number; }) | ({ b: number; } & { j: number; }) | ({ b: number; } & { k?: string[]; }) | ({ c: number; } & { a: number; }) | ({ c: number; } & { b: number; }) | ({ c: number; } & { d: number; }) | ({ c: number; } & { e: number; }) | ({ c: number; } & { f: number; }) | ({ c: number; } & { g: number; }) | ({ c: number; } & { h: number; }) | ({ c: number; } & { i: number; }) | ({ c: number; } & { j: number; }) | ({ c: number; } & { k?: string[]; }) | ({ d: number; } & { a: number; }) | ({ d: number; } & { b: number; }) | ({ d: number; } & { c: number; }) | ({ d: number; } & { e: number; }) | ({ d: number; } & { f: number; }) | ({ d: number; } & { g: number; }) | ({ d: number; } & { h: number; }) | ({ d: number; } & { i: number; }) | ({ d: number; } & { j: number; }) | ({ d: number; } & { k?: string[]; }) | ({ e: number; } & { a: number; }) | ({ e: number; } & { b: number; }) | ({ e: number; } & { c: number; }) | ({ e: number; } & { d: number; }) | ({ e: number; } & { f: number; }) | ({ e: number; } & { g: number; }) | ({ e: number; } & { h: number; }) | ({ e: number; } & { i: number; }) | ({ e: number; } & { j: number; }) | ({ e: number; } & { k?: string[]; }) | ({ f: number; } & { a: number; }) | ({ f: number; } & { b: number; }) | ({ f: number; } & { c: number; }) | ({ f: number; } & { d: number; }) | ({ f: number; } & { e: number; }) | ({ f: number; } & { g: number; }) | ({ f: number; } & { h: number; }) | ({ f: number; } & { i: number; }) | ({ f: number; } & { j: number; }) | ({ f: number; } & { k?: string[]; }) | ({ g: number; } & { a: number; }) | ({ g: number; } & { b: number; }) | ({ g: number; } & { c: number; }) | ({ g: number; } & { d: number; }) | ({ g: number; } & { e: number; }) | ({ g: number; } & { f: number; }) | ({ g: number; } & { h: number; }) | ({ g: number; } & { i: number; }) | ({ g: number; } & { j: number; }) | ({ g: number; } & { k?: string[]; }) | ({ h: number; } & { a: number; }) | ({ h: number; } & { b: number; }) | ({ h: number; } & { c: number; }) | ({ h: number; } & { d: number; }) | ({ h: number; } & { e: number; }) | ({ h: number; } & { f: number; }) | ({ h: number; } & { g: number; }) | ({ h: number; } & { i: number; }) | ({ h: number; } & { j: number; }) | ({ h: number; } & { k?: string[]; }) | ({ i: number; } & { a: number; }) | ({ i: number; } & { b: number; }) | ({ i: number; } & { c: number; }) | ({ i: number; } & { d: number; }) | ({ i: number; } & { e: number; }) | ({ i: number; } & { f: number; }) | ({ i: number; } & { g: number; }) | ({ i: number; } & { h: number; }) | ({ i: number; } & { j: number; }) | ({ i: number; } & { k?: string[]; }) | ({ j: number; } & { a: number; }) | ({ j: number; } & { b: number; }) | ({ j: number; } & { c: number; }) | ({ j: number; } & { d: number; }) | ({ j: number; } & { e: number; }) | ({ j: number; } & { f: number; }) | ({ j: number; } & { g: number; }) | ({ j: number; } & { h: number; }) | ({ j: number; } & { i: number; }) | ({ j: number; } & { k?: string[]; }) | ({ k?: string[]; } & { a: number; }) | ({ k?: string[]; } & { b: number; }) | ({ k?: string[]; } & { c: number; }) | ({ k?: string[]; } & { d: number; }) | ({ k?: string[]; } & { e: number; }) | ({ k?: string[]; } & { f: number; }) | ({ k?: string[]; } & { g: number; }) | ({ k?: string[]; } & { h: number; }) | ({ k?: string[]; } & { i: number; }) | ({ k?: string[]; } & { j: number; }) >step.settings : ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S1) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S10) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S11) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S2) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S3) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S4) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S5) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S6) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S7) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S8) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S9) >step : Action diff --git a/tsc/testdata/baselines/reference/compiler/noImplicitAnyUnionNormalizedObjectLiteral1.types b/tsc/testdata/baselines/reference/compiler/noImplicitAnyUnionNormalizedObjectLiteral1.types index ecefa9258056c..c25988851e359 100644 --- a/tsc/testdata/baselines/reference/compiler/noImplicitAnyUnionNormalizedObjectLiteral1.types +++ b/tsc/testdata/baselines/reference/compiler/noImplicitAnyUnionNormalizedObjectLiteral1.types @@ -36,8 +36,8 @@ function doSthWithParams(params: unknown) { } const bar = { ->bar : { c?: undefined; p: any; s: any; } | { c: string; p: string; s: string; } ->{ p: null, s: null, ...doSthWithParams({ p: "hello", s: "world", }),} : { c?: undefined; p: null; s: null; } | { c: string; p: string; s: string; } +>bar : { c: string; p: string; s: string; } | { c?: undefined; p: any; s: any; } +>{ p: null, s: null, ...doSthWithParams({ p: "hello", s: "world", }),} : { c: string; p: string; s: string; } | { c?: undefined; p: null; s: null; } p: null, >p : null diff --git a/tsc/testdata/baselines/reference/compiler/objectInstantiationFromUnionSpread.types b/tsc/testdata/baselines/reference/compiler/objectInstantiationFromUnionSpread.types index 25ef32588b01c..5bc7169b9dc27 100644 --- a/tsc/testdata/baselines/reference/compiler/objectInstantiationFromUnionSpread.types +++ b/tsc/testdata/baselines/reference/compiler/objectInstantiationFromUnionSpread.types @@ -23,20 +23,20 @@ function f1(a: Item[]) { >a : Item[] a.map(item => ({ ...item })).filter(value => {}); ->a.map(item => ({ ...item })).filter(value => {}) : ({ isSuccess: false; } | { isSuccess: true; })[] ->a.map(item => ({ ...item })).filter : { (predicate: (value: { isSuccess: false; } | { isSuccess: true; }, index: number, array: ({ isSuccess: false; } | { isSuccess: true; })[]) => value is S, thisArg?: any): S[]; (predicate: (value: { isSuccess: false; } | { isSuccess: true; }, index: number, array: ({ isSuccess: false; } | { isSuccess: true; })[]) => unknown, thisArg?: any): ({ isSuccess: false; } | { isSuccess: true; })[]; } ->a.map(item => ({ ...item })) : ({ isSuccess: false; } | { isSuccess: true; })[] +>a.map(item => ({ ...item })).filter(value => {}) : ({ isSuccess: true; } | { isSuccess: false; })[] +>a.map(item => ({ ...item })).filter : { (predicate: (value: { isSuccess: true; } | { isSuccess: false; }, index: number, array: ({ isSuccess: true; } | { isSuccess: false; })[]) => value is S, thisArg?: any): S[]; (predicate: (value: { isSuccess: true; } | { isSuccess: false; }, index: number, array: ({ isSuccess: true; } | { isSuccess: false; })[]) => unknown, thisArg?: any): ({ isSuccess: true; } | { isSuccess: false; })[]; } +>a.map(item => ({ ...item })) : ({ isSuccess: true; } | { isSuccess: false; })[] >a.map : (callbackfn: (value: Item, index: number, array: Item[]) => U, thisArg?: any) => U[] >a : Item[] >map : (callbackfn: (value: Item, index: number, array: Item[]) => U, thisArg?: any) => U[] ->item => ({ ...item }) : (item: Item) => { isSuccess: false; } | { isSuccess: true; } +>item => ({ ...item }) : (item: Item) => { isSuccess: true; } | { isSuccess: false; } >item : Item ->({ ...item }) : { isSuccess: false; } | { isSuccess: true; } ->{ ...item } : { isSuccess: false; } | { isSuccess: true; } +>({ ...item }) : { isSuccess: true; } | { isSuccess: false; } +>{ ...item } : { isSuccess: true; } | { isSuccess: false; } >item : Item ->filter : { (predicate: (value: { isSuccess: false; } | { isSuccess: true; }, index: number, array: ({ isSuccess: false; } | { isSuccess: true; })[]) => value is S, thisArg?: any): S[]; (predicate: (value: { isSuccess: false; } | { isSuccess: true; }, index: number, array: ({ isSuccess: false; } | { isSuccess: true; })[]) => unknown, thisArg?: any): ({ isSuccess: false; } | { isSuccess: true; })[]; } ->value => {} : (value: { isSuccess: false; } | { isSuccess: true; }) => void ->value : { isSuccess: false; } | { isSuccess: true; } +>filter : { (predicate: (value: { isSuccess: true; } | { isSuccess: false; }, index: number, array: ({ isSuccess: true; } | { isSuccess: false; })[]) => value is S, thisArg?: any): S[]; (predicate: (value: { isSuccess: true; } | { isSuccess: false; }, index: number, array: ({ isSuccess: true; } | { isSuccess: false; })[]) => unknown, thisArg?: any): ({ isSuccess: true; } | { isSuccess: false; })[]; } +>value => {} : (value: { isSuccess: true; } | { isSuccess: false; }) => void +>value : { isSuccess: true; } | { isSuccess: false; } } function f2(a: Item[]) { @@ -44,19 +44,19 @@ function f2(a: Item[]) { >a : Item[] a.map(item => ({ ...item })).filter(value => {}); ->a.map(item => ({ ...item })).filter(value => {}) : ({ isSuccess: false; } | { isSuccess: true; })[] ->a.map(item => ({ ...item })).filter : { (predicate: (value: { isSuccess: false; } | { isSuccess: true; }, index: number, array: ({ isSuccess: false; } | { isSuccess: true; })[]) => value is S, thisArg?: any): S[]; (predicate: (value: { isSuccess: false; } | { isSuccess: true; }, index: number, array: ({ isSuccess: false; } | { isSuccess: true; })[]) => unknown, thisArg?: any): ({ isSuccess: false; } | { isSuccess: true; })[]; } ->a.map(item => ({ ...item })) : ({ isSuccess: false; } | { isSuccess: true; })[] +>a.map(item => ({ ...item })).filter(value => {}) : ({ isSuccess: true; } | { isSuccess: false; })[] +>a.map(item => ({ ...item })).filter : { (predicate: (value: { isSuccess: true; } | { isSuccess: false; }, index: number, array: ({ isSuccess: true; } | { isSuccess: false; })[]) => value is S, thisArg?: any): S[]; (predicate: (value: { isSuccess: true; } | { isSuccess: false; }, index: number, array: ({ isSuccess: true; } | { isSuccess: false; })[]) => unknown, thisArg?: any): ({ isSuccess: true; } | { isSuccess: false; })[]; } +>a.map(item => ({ ...item })) : ({ isSuccess: true; } | { isSuccess: false; })[] >a.map : (callbackfn: (value: Item, index: number, array: Item[]) => U, thisArg?: any) => U[] >a : Item[] >map : (callbackfn: (value: Item, index: number, array: Item[]) => U, thisArg?: any) => U[] ->item => ({ ...item }) : (item: Item) => { isSuccess: false; } | { isSuccess: true; } +>item => ({ ...item }) : (item: Item) => { isSuccess: true; } | { isSuccess: false; } >item : Item ->({ ...item }) : { isSuccess: false; } | { isSuccess: true; } ->{ ...item } : { isSuccess: false; } | { isSuccess: true; } +>({ ...item }) : { isSuccess: true; } | { isSuccess: false; } +>{ ...item } : { isSuccess: true; } | { isSuccess: false; } >item : Item ->filter : { (predicate: (value: { isSuccess: false; } | { isSuccess: true; }, index: number, array: ({ isSuccess: false; } | { isSuccess: true; })[]) => value is S, thisArg?: any): S[]; (predicate: (value: { isSuccess: false; } | { isSuccess: true; }, index: number, array: ({ isSuccess: false; } | { isSuccess: true; })[]) => unknown, thisArg?: any): ({ isSuccess: false; } | { isSuccess: true; })[]; } ->value => {} : (value: { isSuccess: false; } | { isSuccess: true; }) => void ->value : { isSuccess: false; } | { isSuccess: true; } +>filter : { (predicate: (value: { isSuccess: true; } | { isSuccess: false; }, index: number, array: ({ isSuccess: true; } | { isSuccess: false; })[]) => value is S, thisArg?: any): S[]; (predicate: (value: { isSuccess: true; } | { isSuccess: false; }, index: number, array: ({ isSuccess: true; } | { isSuccess: false; })[]) => unknown, thisArg?: any): ({ isSuccess: true; } | { isSuccess: false; })[]; } +>value => {} : (value: { isSuccess: true; } | { isSuccess: false; }) => void +>value : { isSuccess: true; } | { isSuccess: false; } } diff --git a/tsc/testdata/baselines/reference/compiler/spreadUnionPropOverride.types b/tsc/testdata/baselines/reference/compiler/spreadUnionPropOverride.types index 56d9011592664..4f5783ece7680 100644 --- a/tsc/testdata/baselines/reference/compiler/spreadUnionPropOverride.types +++ b/tsc/testdata/baselines/reference/compiler/spreadUnionPropOverride.types @@ -182,8 +182,8 @@ declare const abc: A | B | C; >abc : A | B | C const obj5 = { ->obj5 : { id: string; name: string; } | { name: string; age: number; id: string; } | { name: string; id: string; } ->{ id: "123", ...abc,} : { id: string; name: string; } | { name: string; age: number; id: string; } | { name: string; id: string; } +>obj5 : { id: string; name: string; } | { name: string; id: string; } | { name: string; age: number; id: string; } +>{ id: "123", ...abc,} : { id: string; name: string; } | { name: string; id: string; } | { name: string; age: number; id: string; } id: "123", >id : string @@ -195,8 +195,8 @@ const obj5 = { }; // OK - id is only in A const obj6 = { ->obj6 : { id: string; name: string; } | { name: string; age: number; } | { name: string; } ->{ name: "test", ...abc,} : { id: string; name: string; } | { name: string; age: number; } | { name: string; } +>obj6 : { name: string; } | { id: string; name: string; } | { name: string; age: number; } +>{ name: "test", ...abc,} : { name: string; } | { id: string; name: string; } | { name: string; age: number; } name: "test", >name : string diff --git a/tsc/testdata/baselines/reference/conformance/spreadUnion.types b/tsc/testdata/baselines/reference/conformance/spreadUnion.types index a19bbca939f5d..d74f767c4a624 100644 --- a/tsc/testdata/baselines/reference/conformance/spreadUnion.types +++ b/tsc/testdata/baselines/reference/conformance/spreadUnion.types @@ -38,7 +38,7 @@ var o5: { a: number } | { b: string } | { a: number, b: string }; var o5 = { ...union, ...union }; >o5 : { a: number; } | { b: string; } | { a: number; b: string; } ->{ ...union, ...union } : { a: number; } | { a: number; b: string; } | { a: number; b: string; } | { b: string; } +>{ ...union, ...union } : { a: number; } | { b: string; } | { a: number; b: string; } | { a: number; b: string; } >union : { a: number; } | { b: string; } >union : { a: number; } | { b: string; } From 7f6bc97ef2b9760fe4e7ceae051fbf1c35a88c49 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 20 Oct 2026 22:04:49 -0700 Subject: [PATCH 028/194] Print declared property types only when equivalent When an inferred property assignment's widened expression type is identical to the type being printed, the pseudo-type printer reuses the expression and prints the declared property's type instead. That type is widened without the context of its containing object literal, so it can differ from the expression's real widened type: sibling normalization is lost, and an empty array literal prints as undefined[] where the real type is any[]. Only treat the expression as equivalent when the declared property's type matches, so the printed type always agrees with the checker. --- tsc/internal/checker/pseudotypenodebuilder.go | 8 ++++++++ ...tsReferenceInObjectLiteral_Js(alwaysstrict=true).types | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/tsc/internal/checker/pseudotypenodebuilder.go b/tsc/internal/checker/pseudotypenodebuilder.go index 8f1e2bf1700e1..8233c3543f889 100644 --- a/tsc/internal/checker/pseudotypenodebuilder.go +++ b/tsc/internal/checker/pseudotypenodebuilder.go @@ -699,6 +699,14 @@ func (b *NodeBuilderImpl) pseudoTypeToType(t *pseudochecker.PseudoType) *Type { return b.ch.getReturnTypeOfSignature(b.ch.getSignatureFromDeclaration(node)) } ty := b.ch.getWidenedType(b.ch.getRegularTypeOfExpression(node)) + if ast.IsPropertyAssignment(node.Parent) { + // pseudoTypeToNode serializes the type of the property's symbol, which is + // not widened in the context of its containing object literal. + declared := b.ch.getWidenedLiteralType(b.ch.getTypeOfSymbol(b.ch.getSymbolOfDeclaration(node.Parent))) + if declared != ty { + return nil + } + } return ty case pseudochecker.PseudoTypeKindNoResult: return nil // TODO: extract type selection logic from `serializeTypeForDeclaration`, not needed for current usecases but needed if completeness becomes required diff --git a/tsc/testdata/baselines/reference/compiler/argumentsReferenceInObjectLiteral_Js(alwaysstrict=true).types b/tsc/testdata/baselines/reference/compiler/argumentsReferenceInObjectLiteral_Js(alwaysstrict=true).types index ede507ae296eb..c29b02354c562 100644 --- a/tsc/testdata/baselines/reference/compiler/argumentsReferenceInObjectLiteral_Js(alwaysstrict=true).types +++ b/tsc/testdata/baselines/reference/compiler/argumentsReferenceInObjectLiteral_Js(alwaysstrict=true).types @@ -2,8 +2,8 @@ === /a.js === const a = () => { ->a : () => { arguments: undefined[]; } ->() => { return { arguments: [], };} : () => { arguments: undefined[]; } +>a : () => { arguments: any[]; } +>() => { return { arguments: [], };} : () => { arguments: any[]; } return { >{ arguments: [], } : { arguments: undefined[]; } From ad9324c09bb4beeb57bf1d327a5377320a2f5a8c Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 20 Oct 2026 22:05:57 -0700 Subject: [PATCH 029/194] Intern object literal types by content MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Checking the same object literal again (inference passes, overload resolution, contextual re-checks) creates a new type each time, even when every member has the same type as before. These copies are indistinguishable except by type ID, so anything ordered by them depends on how often and in what order the literal was checked. Return the existing type when an object literal produces the same members, so its identity depends only on its content. The changed baselines print one level less of a recursive this type, and drop a union member that was a duplicate copy of another. │ before.txt │ after.txt │ │ sec/op │ sec/op vs base │ Compiler 2.050 ± 4% 2.070 ± 7% +0.98% (p=0.040 n=10) │ before.txt │ after.txt │ │ peak-RSS-bytes │ peak-RSS-bytes vs base │ Compiler 365.2Mi ± 6% 362.9Mi ± 6% ~ (p=0.481 n=10) --- tsc/internal/checker/checker.go | 64 +++++++++++++++++-- ...ithPrototypeNoErrorTruncationNoCrash.types | 8 +-- .../compiler/recursiveConditionalTypes.types | 4 +- ...e-with-multiple-files-and-complex-types.js | 3 +- 4 files changed, 67 insertions(+), 12 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 39385e13c4118..da78623c9f98b 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -677,6 +677,7 @@ type Checker struct { resolveNameForSymbolSuggestion func(location *ast.Node, name string, meaning ast.SymbolFlags, nameNotFoundMessage *diagnostics.Message, isUse bool, excludeGlobals bool) *ast.Symbol tupleTypes map[CacheHashKey]*Type unionTypes map[CacheHashKey]*Type + objectLiteralTypes map[CacheHashKey]*Type unionOfUnionTypes map[UnionOfUnionKey]*Type intersectionTypes map[CacheHashKey]*Type propertiesTypes map[PropertiesTypesKey]*Type @@ -1015,6 +1016,7 @@ func NewChecker(program Program, tracer *Tracer) (*Checker, *sync.Mutex) { c.resolveNameForSymbolSuggestion = c.createNameResolverForSuggestion().Resolve c.tupleTypes = make(map[CacheHashKey]*Type) c.unionTypes = make(map[CacheHashKey]*Type) + c.objectLiteralTypes = make(map[CacheHashKey]*Type) c.unionOfUnionTypes = make(map[UnionOfUnionKey]*Type) c.intersectionTypes = make(map[CacheHashKey]*Type) c.propertiesTypes = make(map[PropertiesTypesKey]*Type) @@ -13576,17 +13578,23 @@ func (c *Checker) checkObjectLiteral(node *ast.Node, checkMode CheckMode) *Type if hasComputedSymbolProperty { indexInfos = append(indexInfos, c.getObjectLiteralIndexInfo(isReadonly, propertiesArray[offset:], c.esSymbolType)) } - result := c.newAnonymousType(node.Symbol(), propertiesTable, nil, nil, indexInfos) - result.objectFlags |= objectFlags | ObjectFlagsObjectLiteral | ObjectFlagsContainsObjectOrArrayLiteral + flags := objectFlags | ObjectFlagsObjectLiteral | ObjectFlagsContainsObjectOrArrayLiteral if contextualType == nil && ast.IsInJSFile(node) && !ast.IsInJsonFile(node) { - result.objectFlags |= ObjectFlagsJSLiteral + flags |= ObjectFlagsJSLiteral } if patternWithComputedProperties { - result.objectFlags |= ObjectFlagsObjectLiteralPatternWithComputedProperties + flags |= ObjectFlagsObjectLiteralPatternWithComputedProperties + } + key := c.getObjectLiteralTypeKey(node, flags, propertiesTable, indexInfos) + if existing := c.objectLiteralTypes[key]; existing != nil { + return existing } + result := c.newAnonymousType(node.Symbol(), propertiesTable, nil, nil, indexInfos) + result.objectFlags |= flags if inDestructuringPattern { c.patternForType[result] = node } + c.objectLiteralTypes[key] = result return result } for _, memberDecl := range node.Properties() { @@ -18088,6 +18096,54 @@ func (b *keyBuilder) writeNode(node *ast.Node) { } } +// getObjectLiteralTypeKey identifies the content of an object literal type, so +// that checking the same object literal again with the same results yields the +// same type. +func (c *Checker) getObjectLiteralTypeKey(node *ast.Node, flags ObjectFlags, properties ast.SymbolTable, indexInfos []*IndexInfo) CacheHashKey { + var b keyBuilder + b.writeNode(node) + b.writeUint32(uint32(flags)) + names := slices.Sorted(properties.Keys()) + b.writeInt(len(names)) + for _, name := range names { + prop := properties.Get(name) + b.writeString(name) + b.writeByte(0) + b.writeUint32(uint32(prop.Flags())) + b.writeUint32(uint32(prop.CheckFlags())) + // Members created by this object literal have their types set at + // creation; other members (accessors) are the declared symbols. + links := c.valueSymbolLinks.TryGet(prop) + if links == nil || links.target == nil { + b.writeByte(2) + b.writeSymbol(prop) + continue + } + if nameType := links.getNameType(); nameType != nil { + b.writeByte(1) + b.writeType(nameType) + } else { + b.writeByte(0) + } + b.writeType(links.resolvedType) + } + b.writeInt(len(indexInfos)) + for _, info := range indexInfos { + b.writeType(info.keyType) + b.writeType(info.valueType) + if info.isReadonly { + b.writeByte(1) + } else { + b.writeByte(0) + } + b.writeInt(len(info.components)) + for _, n := range info.components { + b.writeNode(n) + } + } + return b.hash() +} + func getTypeListKey(types []*Type) CacheHashKey { var b keyBuilder b.writeTypes(types) diff --git a/tsc/testdata/baselines/reference/compiler/jsFunctionWithPrototypeNoErrorTruncationNoCrash.types b/tsc/testdata/baselines/reference/compiler/jsFunctionWithPrototypeNoErrorTruncationNoCrash.types index 4a0539f482866..de17cf44aec12 100644 --- a/tsc/testdata/baselines/reference/compiler/jsFunctionWithPrototypeNoErrorTruncationNoCrash.types +++ b/tsc/testdata/baselines/reference/compiler/jsFunctionWithPrototypeNoErrorTruncationNoCrash.types @@ -2,7 +2,7 @@ === index.js === function Color(obj) { ->Color : { (obj: any): void; prototype: { negate: () => { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; clearer: (ratio: any) => any; toJSON: () => any; }; } +>Color : { (obj: any): void; prototype: { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; } >obj : any this.example = true @@ -15,9 +15,9 @@ function Color(obj) { }; Color.prototype = { >Color.prototype = { negate: function () {return this;}, lighten: function (ratio) {return this;}, darken: function (ratio) {return this;}, saturate: function (ratio) {return this;}, desaturate: function (ratio) {return this;}, whiten: function (ratio) {return this;}, blacken: function (ratio) {return this;}, greyscale: function () {return this;}, clearer: function (ratio) {return this;}, toJSON: function () {return this.rgb();},} : { negate: () => { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; clearer: (ratio: any) => any; toJSON: () => any; } ->Color.prototype : { negate: () => { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; clearer: (ratio: any) => any; toJSON: () => any; } ->Color : { (obj: any): void; prototype: { negate: () => { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; clearer: (ratio: any) => any; toJSON: () => any; }; } ->prototype : { negate: () => { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; clearer: (ratio: any) => any; toJSON: () => any; } +>Color.prototype : { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; } +>Color : { (obj: any): void; prototype: { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; } +>prototype : { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; } >{ negate: function () {return this;}, lighten: function (ratio) {return this;}, darken: function (ratio) {return this;}, saturate: function (ratio) {return this;}, desaturate: function (ratio) {return this;}, whiten: function (ratio) {return this;}, blacken: function (ratio) {return this;}, greyscale: function () {return this;}, clearer: function (ratio) {return this;}, toJSON: function () {return this.rgb();},} : { negate: () => { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; clearer: (ratio: any) => any; toJSON: () => any; } negate: function () {return this;}, diff --git a/tsc/testdata/baselines/reference/compiler/recursiveConditionalTypes.types b/tsc/testdata/baselines/reference/compiler/recursiveConditionalTypes.types index 73d9df41e47d2..49e5284d2f967 100644 --- a/tsc/testdata/baselines/reference/compiler/recursiveConditionalTypes.types +++ b/tsc/testdata/baselines/reference/compiler/recursiveConditionalTypes.types @@ -223,7 +223,7 @@ unbox(b4); // { value: { value: typeof b4 }} >b4 : { value: { value: { value: typeof b4; }; }; } unbox({ value: { value: { get value() { return this; } }}}); // { readonly value: ... } ->unbox({ value: { value: { get value() { return this; } }}}) : { readonly value: { readonly value: any; }; } +>unbox({ value: { value: { get value() { return this; } }}}) : { readonly value: any; } >unbox : (box: RecBox) => T >{ value: { value: { get value() { return this; } }}} : { value: { value: { readonly value: { readonly value: any; }; }; }; } >value : { value: { readonly value: { readonly value: any; }; }; } @@ -231,7 +231,7 @@ unbox({ value: { value: { get value() { return this; } }}}); // { readonly valu >value : { readonly value: { readonly value: any; }; } >{ get value() { return this; } } : { readonly value: { readonly value: any; }; } >value : { readonly value: any; } ->this : { readonly value: any; } | RecBox<{ readonly value: { readonly value: any; }; }> +>this : RecBox<{ readonly value: any; }> // Inference from nested instantiations of same generic types diff --git a/tsc/testdata/baselines/reference/tsc/generateTrace/generateTrace-with-multiple-files-and-complex-types.js b/tsc/testdata/baselines/reference/tsc/generateTrace/generateTrace-with-multiple-files-and-complex-types.js index 21aa78f4efbca..cebed8022620f 100644 --- a/tsc/testdata/baselines/reference/tsc/generateTrace/generateTrace-with-multiple-files-and-complex-types.js +++ b/tsc/testdata/baselines/reference/tsc/generateTrace/generateTrace-with-multiple-files-and-complex-types.js @@ -228,7 +228,6 @@ declare const console: { log(msg: any): void; }; {"id":118,"symbolName":"Container","recursionId":83,"instantiatedType":91,"typeArguments":[112],"firstDeclaration":{"path":"/home/src/workspaces/project/types.ts","start":{"line":1,"character":1},"end":{"line":4,"character":2}},"flags":["Object"]}, {"id":119,"symbolName":"Nullable","recursionId":99,"unionTypes":[10,13,14],"aliasTypeArguments":[14],"firstDeclaration":{"path":"/home/src/workspaces/project/types.ts","start":{"line":5,"character":1},"end":{"line":5,"character":48}},"flags":["Union"],"display":"Nullable"}, {"id":120,"recursionId":100,"flags":["StringLiteral"],"display":"\"hello\""}, -{"id":121,"recursionId":101,"flags":["StringLiteral"],"display":"\"hello\""}, -{"id":122,"symbolName":"__object","recursionId":102,"firstDeclaration":{"path":"/home/src/workspaces/project/main.ts","start":{"line":2,"character":57},"end":{"line":2,"character":86}},"flags":["Object"],"display":"{ value: U; map: (fn: (x: number) => U) => Container; }"}] +{"id":121,"recursionId":101,"flags":["StringLiteral"],"display":"\"hello\""}] From 702aee897a76a8b8feebd6ccc2da9db19da5e1dd Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 20 Oct 2026 22:06:03 -0700 Subject: [PATCH 030/194] Intern spread types by inputs and content MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Spreading creates a fresh type and fresh property symbols on every call, so re-checking an object literal with a spread yields copies that differ only by ID. Spreads of different inputs also frequently produce identical members, e.g. when the right side overrides every property of the left, and unions of such results kept every copy. Memoize spread results by their inputs, memoize the property symbols a spread synthesizes by the properties they come from, and intern the resulting types by member identity. Unions of spread results now contain each distinct member once. │ before.txt │ after.txt │ │ sec/op │ sec/op vs base │ Compiler 2.070 ± 7% 2.080 ± 5% ~ (p=0.302 n=10) │ before.txt │ after.txt │ │ peak-RSS-bytes │ peak-RSS-bytes vs base │ Compiler 362.9Mi ± 6% 368.2Mi ± 5% ~ (p=0.063 n=10) --- tsc/internal/checker/checker.go | 97 ++++++++++++++++++- ...paceMembersResolutionOrderExportStar.types | 6 +- .../compiler/nestedSpreadsAndWidening.types | 10 +- ...akyDeclarationEmitSharedCheckerOrder.types | 6 +- ...sticsNamespaceMembersResolutionOrder.types | 6 +- ...embersResolutionOrderReexportedTypes.types | 6 +- .../reference/conformance/spreadUnion.types | 2 +- 7 files changed, 114 insertions(+), 19 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index da78623c9f98b..9369c5483ed1d 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -678,6 +678,9 @@ type Checker struct { tupleTypes map[CacheHashKey]*Type unionTypes map[CacheHashKey]*Type objectLiteralTypes map[CacheHashKey]*Type + spreadTypes map[CacheHashKey]*Type + spreadContentTypes map[CacheHashKey]*Type + spreadSymbols map[spreadSymbolKey]*ast.Symbol unionOfUnionTypes map[UnionOfUnionKey]*Type intersectionTypes map[CacheHashKey]*Type propertiesTypes map[PropertiesTypesKey]*Type @@ -1017,6 +1020,9 @@ func NewChecker(program Program, tracer *Tracer) (*Checker, *sync.Mutex) { c.tupleTypes = make(map[CacheHashKey]*Type) c.unionTypes = make(map[CacheHashKey]*Type) c.objectLiteralTypes = make(map[CacheHashKey]*Type) + c.spreadTypes = make(map[CacheHashKey]*Type) + c.spreadContentTypes = make(map[CacheHashKey]*Type) + c.spreadSymbols = make(map[spreadSymbolKey]*ast.Symbol) c.unionOfUnionTypes = make(map[UnionOfUnionKey]*Type) c.intersectionTypes = make(map[CacheHashKey]*Type) c.propertiesTypes = make(map[PropertiesTypesKey]*Type) @@ -13828,6 +13834,25 @@ func (c *Checker) getSpreadType(left *Type, right *Type, symbol *ast.Symbol, obj } return c.getIntersectionType([]*Type{left, right}) } + var b keyBuilder + b.writeType(left) + b.writeType(right) + if symbol != nil { + b.writeByte(1) + b.writeSymbol(symbol) + } else { + b.writeByte(0) + } + b.writeUint32(uint32(objectFlags)) + if readonly { + b.writeByte(1) + } else { + b.writeByte(0) + } + key := b.hash() + if existing := c.spreadTypes[key]; existing != nil { + return existing + } members := ast.NewSymbolTable() var skippedPrivateMembers collections.Set[string] var indexInfos []*IndexInfo @@ -13852,6 +13877,11 @@ func (c *Checker) getSpreadType(left *Type, right *Type, symbol *ast.Symbol, obj rightProp := members.Get(leftProp.Name()) rightType := c.getTypeOfSymbol(rightProp) if rightProp.Flags()&ast.SymbolFlagsOptional != 0 { + key := spreadSymbolKey{left: leftProp, right: rightProp} + if existing := c.spreadSymbols[key]; existing != nil { + members.Set(leftProp.Name(), existing) + continue + } declarations := core.Concatenate(leftProp.Declarations(), rightProp.Declarations()) flags := ast.SymbolFlagsProperty | (leftProp.Flags() & ast.SymbolFlagsOptional) result := c.newSymbol(flags, leftProp.Name()) @@ -13872,6 +13902,7 @@ func (c *Checker) getSpreadType(left *Type, right *Type, symbol *ast.Symbol, obj c.spreadLinks.Get(result).rightSpread = rightProp result.SetDeclarations(declarations) links.setNameType(c, c.valueSymbolLinks.Get(leftProp).getNameType()) + c.spreadSymbols[key] = result members.Set(leftProp.Name(), result) } } else { @@ -13881,8 +13912,18 @@ func (c *Checker) getSpreadType(left *Type, right *Type, symbol *ast.Symbol, obj spreadIndexInfos := core.SameMap(indexInfos, func(info *IndexInfo) *IndexInfo { return c.getIndexInfoWithReadonly(info, readonly) }) + flags := ObjectFlagsObjectLiteral | ObjectFlagsContainsObjectOrArrayLiteral | ObjectFlagsContainsSpread | objectFlags + // Different inputs can produce the same members, e.g. when the right side + // overrides every property of the left side. + contentKey := c.getSpreadTypeContentKey(symbol, flags, members, spreadIndexInfos) + if existing := c.spreadContentTypes[contentKey]; existing != nil { + c.spreadTypes[key] = existing + return existing + } spread := c.newAnonymousType(symbol, members, nil, nil, spreadIndexInfos) - spread.objectFlags |= ObjectFlagsObjectLiteral | ObjectFlagsContainsObjectOrArrayLiteral | ObjectFlagsContainsSpread | objectFlags + spread.objectFlags |= flags + c.spreadContentTypes[contentKey] = spread + c.spreadTypes[key] = spread return spread } @@ -13979,6 +14020,10 @@ func (c *Checker) getSpreadSymbol(prop *ast.Symbol, readonly bool) *ast.Symbol { if !isSetonlyAccessor && readonly == c.isReadonlySymbol(prop) { return prop } + key := spreadSymbolKey{right: prop, readonly: readonly} + if existing := c.spreadSymbols[key]; existing != nil { + return existing + } flags := ast.SymbolFlagsProperty | (prop.Flags() & ast.SymbolFlagsOptional) result := c.newSymbolEx(flags, prop.Name(), prop.CheckFlags()&ast.CheckFlagsLate|core.IfElse(readonly, ast.CheckFlagsReadonly, 0)) links := c.valueSymbolLinks.Get(result) @@ -13990,9 +14035,59 @@ func (c *Checker) getSpreadSymbol(prop *ast.Symbol, readonly bool) *ast.Symbol { result.SetDeclarations(prop.Declarations()) links.setNameType(c, c.valueSymbolLinks.Get(prop).getNameType()) c.mappedSymbolLinks.Get(result).syntheticOrigin = prop + c.spreadSymbols[key] = result return result } +// spreadSymbolKey identifies a property symbol synthesized by a spread: either +// a copy of right with the given readonly-ness, or the merge of an optional +// right property into left. +type spreadSymbolKey struct { + left *ast.Symbol + right *ast.Symbol + readonly bool +} + +// getSpreadTypeContentKey identifies the content of a spread type. Members are +// either input properties or synthesized symbols that are themselves memoized, +// so symbol identity determines member content. +func (c *Checker) getSpreadTypeContentKey(symbol *ast.Symbol, flags ObjectFlags, members ast.SymbolTable, indexInfos []*IndexInfo) CacheHashKey { + var b keyBuilder + if symbol != nil { + b.writeByte(1) + b.writeSymbol(symbol) + } else { + b.writeByte(0) + } + b.writeUint32(uint32(flags)) + names := slices.Sorted(members.Keys()) + b.writeInt(len(names)) + for _, name := range names { + b.writeSymbol(members.Get(name)) + } + b.writeInt(len(indexInfos)) + for _, info := range indexInfos { + b.writeType(info.keyType) + b.writeType(info.valueType) + if info.isReadonly { + b.writeByte(1) + } else { + b.writeByte(0) + } + if info.declaration != nil { + b.writeByte(1) + b.writeNode(info.declaration) + } else { + b.writeByte(0) + } + b.writeInt(len(info.components)) + for _, n := range info.components { + b.writeNode(n) + } + } + return b.hash() +} + func (c *Checker) isEmptyObjectTypeOrSpreadsIntoEmptyObject(t *Type) bool { return c.isEmptyObjectType(t) || t.flags&(TypeFlagsNull|TypeFlagsUndefined|TypeFlagsBooleanLike|TypeFlagsNumberLike|TypeFlagsBigIntLike|TypeFlagsStringLike|TypeFlagsEnumLike|TypeFlagsNonPrimitive|TypeFlagsIndex) != 0 } diff --git a/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.types b/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.types index 179ce8b0ee07e..0153880cec8d7 100644 --- a/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.types +++ b/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.types @@ -69,9 +69,9 @@ const M = /** @type {any} */ (null); const o = { v: { ...M } }; >o : { v: {}; } ->{ v: { ...M } } : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } ->v : { pb: { pa: {}; ma: 1; }; mb: 1; } ->{ ...M } : { pb: { pa: {}; ma: 1; }; mb: 1; } +>{ v: { ...M } } : { v: {}; } +>v : {} +>{ ...M } : {} >M : typeof import("./mb") module.exports = o; diff --git a/tsc/testdata/baselines/reference/compiler/nestedSpreadsAndWidening.types b/tsc/testdata/baselines/reference/compiler/nestedSpreadsAndWidening.types index 7ede76595d8bc..61e11538f1974 100644 --- a/tsc/testdata/baselines/reference/compiler/nestedSpreadsAndWidening.types +++ b/tsc/testdata/baselines/reference/compiler/nestedSpreadsAndWidening.types @@ -120,19 +120,19 @@ declare const step: Action; read({ >read({ ...step, settings: { ...step.settings, input: { ...step.settings.input, k: ['5'] } },}) : void >read : (arg: T) => void ->{ ...step, settings: { ...step.settings, input: { ...step.settings.input, k: ['5'] } },} : { type: "1"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "2"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "3"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | any | any; } | any | any +>{ ...step, settings: { ...step.settings, input: { ...step.settings.input, k: ['5'] } },} : { type: "1"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "2"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "3"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "4"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "5"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "6"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "7"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "8"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "9"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "10"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "11"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } ...step, >step : Action settings: { ...step.settings, input: { ...step.settings.input, k: ['5'] } }, ->settings : { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } ->{ ...step.settings, input: { ...step.settings.input, k: ['5'] } } : { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } | { input: { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } +>settings : { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } +>{ ...step.settings, input: { ...step.settings.input, k: ['5'] } } : { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; } >step.settings : ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S1) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S10) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S11) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S2) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S3) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S4) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S5) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S6) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S7) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S8) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S9) >step : Action >settings : ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S1) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S10) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S11) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S2) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S3) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S4) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S5) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S6) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S7) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S8) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S9) ->input : { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } ->{ ...step.settings.input, k: ['5'] } : { k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } +>input : { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } +>{ ...step.settings.input, k: ['5'] } : { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } >step.settings.input : { a: number; } | { b: number; } | { c: number; } | { d: number; } | { e: number; } | { f: number; } | { g: number; } | { h: number; } | { i: number; } | { j: number; } | { k?: string[]; } | ({ a: number; } & { b: number; }) | ({ a: number; } & { c: number; }) | ({ a: number; } & { d: number; }) | ({ a: number; } & { e: number; }) | ({ a: number; } & { f: number; }) | ({ a: number; } & { g: number; }) | ({ a: number; } & { h: number; }) | ({ a: number; } & { i: number; }) | ({ a: number; } & { j: number; }) | ({ a: number; } & { k?: string[]; }) | ({ b: number; } & { a: number; }) | ({ b: number; } & { c: number; }) | ({ b: number; } & { d: number; }) | ({ b: number; } & { e: number; }) | ({ b: number; } & { f: number; }) | ({ b: number; } & { g: number; }) | ({ b: number; } & { h: number; }) | ({ b: number; } & { i: number; }) | ({ b: number; } & { j: number; }) | ({ b: number; } & { k?: string[]; }) | ({ c: number; } & { a: number; }) | ({ c: number; } & { b: number; }) | ({ c: number; } & { d: number; }) | ({ c: number; } & { e: number; }) | ({ c: number; } & { f: number; }) | ({ c: number; } & { g: number; }) | ({ c: number; } & { h: number; }) | ({ c: number; } & { i: number; }) | ({ c: number; } & { j: number; }) | ({ c: number; } & { k?: string[]; }) | ({ d: number; } & { a: number; }) | ({ d: number; } & { b: number; }) | ({ d: number; } & { c: number; }) | ({ d: number; } & { e: number; }) | ({ d: number; } & { f: number; }) | ({ d: number; } & { g: number; }) | ({ d: number; } & { h: number; }) | ({ d: number; } & { i: number; }) | ({ d: number; } & { j: number; }) | ({ d: number; } & { k?: string[]; }) | ({ e: number; } & { a: number; }) | ({ e: number; } & { b: number; }) | ({ e: number; } & { c: number; }) | ({ e: number; } & { d: number; }) | ({ e: number; } & { f: number; }) | ({ e: number; } & { g: number; }) | ({ e: number; } & { h: number; }) | ({ e: number; } & { i: number; }) | ({ e: number; } & { j: number; }) | ({ e: number; } & { k?: string[]; }) | ({ f: number; } & { a: number; }) | ({ f: number; } & { b: number; }) | ({ f: number; } & { c: number; }) | ({ f: number; } & { d: number; }) | ({ f: number; } & { e: number; }) | ({ f: number; } & { g: number; }) | ({ f: number; } & { h: number; }) | ({ f: number; } & { i: number; }) | ({ f: number; } & { j: number; }) | ({ f: number; } & { k?: string[]; }) | ({ g: number; } & { a: number; }) | ({ g: number; } & { b: number; }) | ({ g: number; } & { c: number; }) | ({ g: number; } & { d: number; }) | ({ g: number; } & { e: number; }) | ({ g: number; } & { f: number; }) | ({ g: number; } & { h: number; }) | ({ g: number; } & { i: number; }) | ({ g: number; } & { j: number; }) | ({ g: number; } & { k?: string[]; }) | ({ h: number; } & { a: number; }) | ({ h: number; } & { b: number; }) | ({ h: number; } & { c: number; }) | ({ h: number; } & { d: number; }) | ({ h: number; } & { e: number; }) | ({ h: number; } & { f: number; }) | ({ h: number; } & { g: number; }) | ({ h: number; } & { i: number; }) | ({ h: number; } & { j: number; }) | ({ h: number; } & { k?: string[]; }) | ({ i: number; } & { a: number; }) | ({ i: number; } & { b: number; }) | ({ i: number; } & { c: number; }) | ({ i: number; } & { d: number; }) | ({ i: number; } & { e: number; }) | ({ i: number; } & { f: number; }) | ({ i: number; } & { g: number; }) | ({ i: number; } & { h: number; }) | ({ i: number; } & { j: number; }) | ({ i: number; } & { k?: string[]; }) | ({ j: number; } & { a: number; }) | ({ j: number; } & { b: number; }) | ({ j: number; } & { c: number; }) | ({ j: number; } & { d: number; }) | ({ j: number; } & { e: number; }) | ({ j: number; } & { f: number; }) | ({ j: number; } & { g: number; }) | ({ j: number; } & { h: number; }) | ({ j: number; } & { i: number; }) | ({ j: number; } & { k?: string[]; }) | ({ k?: string[]; } & { a: number; }) | ({ k?: string[]; } & { b: number; }) | ({ k?: string[]; } & { c: number; }) | ({ k?: string[]; } & { d: number; }) | ({ k?: string[]; } & { e: number; }) | ({ k?: string[]; } & { f: number; }) | ({ k?: string[]; } & { g: number; }) | ({ k?: string[]; } & { h: number; }) | ({ k?: string[]; } & { i: number; }) | ({ k?: string[]; } & { j: number; }) >step.settings : ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S1) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S10) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S11) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S2) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S3) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S4) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S5) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S6) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S7) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S8) | ((S1 | S10 | S11 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9) & S9) >step : Action diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.types b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.types index cde44436bf6e0..07b1f23ab8990 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.types +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.types @@ -26,9 +26,9 @@ const M = /** @type {any} */ (null); const o = { v: { ...M } }; >o : { v: {}; } ->{ v: { ...M } } : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } ->v : { pb: { pa: {}; ma: 1; }; mb: 1; } ->{ ...M } : { pb: { pa: {}; ma: 1; }; mb: 1; } +>{ v: { ...M } } : { v: {}; } +>v : {} +>{ ...M } : {} >M : typeof import("./mb") module.exports = o; diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.types b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.types index 7813095f076be..753e075741287 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.types +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.types @@ -89,9 +89,9 @@ const M = /** @type {any} */ (null); const o = { v: { ...M } }; >o : { v: {}; } ->{ v: { ...M } } : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->v : { pa: { pb: {}; mb: 1; }; ma: 1; } ->{ ...M } : { pa: { pb: {}; mb: 1; }; ma: 1; } +>{ v: { ...M } } : { v: {}; } +>v : {} +>{ ...M } : {} >M : typeof import("./ma") module.exports = o; diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.types b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.types index acecbd2516c82..53a815348e451 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.types +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.types @@ -89,9 +89,9 @@ const M = /** @type {any} */ (null); const o = { v: { ...M } }; >o : { v: {}; } ->{ v: { ...M } } : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->v : { pa: { pb: {}; mb: 1; }; ma: 1; } ->{ ...M } : { pa: { pb: {}; mb: 1; }; ma: 1; } +>{ v: { ...M } } : { v: {}; } +>v : {} +>{ ...M } : {} >M : typeof import("./ma") module.exports = o; diff --git a/tsc/testdata/baselines/reference/conformance/spreadUnion.types b/tsc/testdata/baselines/reference/conformance/spreadUnion.types index d74f767c4a624..50f6090277643 100644 --- a/tsc/testdata/baselines/reference/conformance/spreadUnion.types +++ b/tsc/testdata/baselines/reference/conformance/spreadUnion.types @@ -38,7 +38,7 @@ var o5: { a: number } | { b: string } | { a: number, b: string }; var o5 = { ...union, ...union }; >o5 : { a: number; } | { b: string; } | { a: number; b: string; } ->{ ...union, ...union } : { a: number; } | { b: string; } | { a: number; b: string; } | { a: number; b: string; } +>{ ...union, ...union } : { a: number; } | { b: string; } | { a: number; b: string; } >union : { a: number; } | { b: string; } >union : { a: number; } | { b: string; } From 61898b40bff33e221d3ab1c75059bc9562e30ced Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 20 Oct 2026 22:31:00 -0700 Subject: [PATCH 031/194] Order array literal types after their source references MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit An array literal type is a clone of a type reference that differs only by being marked as an array literal, so it compares equal to its source and to any reference with the same target and type arguments. Such ties fell back to type IDs, making their order depend on whether the literal or the reference was created first. Order array literal types after the references they were cloned from, as fresh literal types follow their regular counterparts. │ before.txt │ after.txt │ │ sec/op │ sec/op vs base │ Compiler 2.080 ± 5% 2.085 ± 2% ~ (p=0.692 n=10) │ before.txt │ after.txt │ │ peak-RSS-bytes │ peak-RSS-bytes vs base │ Compiler 368.2Mi ± 5% 365.9Mi ± 2% ~ (p=0.280 n=10) --- tsc/internal/checker/utilities.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tsc/internal/checker/utilities.go b/tsc/internal/checker/utilities.go index ce450397e1ce1..f95d607bad724 100644 --- a/tsc/internal/checker/utilities.go +++ b/tsc/internal/checker/utilities.go @@ -488,6 +488,10 @@ func CompareTypes(t1, t2 *Type) int { return c } } + // Array literal types follow the references they were cloned from. + if l1, l2 := t1.objectFlags&ObjectFlagsArrayLiteral != 0, t2.objectFlags&ObjectFlagsArrayLiteral != 0; l1 != l2 { + return core.IfElse(l1, 1, -1) + } } else if t1.objectFlags&ObjectFlagsReference != 0 { return -1 } else if t2.objectFlags&ObjectFlagsReference != 0 { From 7e1f32d061739c943082dc6dc208f34c0c670427 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 20 Oct 2026 23:28:04 -0700 Subject: [PATCH 032/194] Compare object literal members without symbol IDs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Object literal types are ordered by their members, but members were compared with compareSymbols, which falls back to symbol IDs. Each object literal type has its own member symbols, so members with the same declaration and name always compared unequal by ID before their types were considered, ordering the types by creation order. Compare members by declaration and name only, so their types decide. The changed baseline orders union members by their literal types rather than by when they were created. │ before.txt │ after.txt │ │ sec/op │ sec/op vs base │ Compiler 2.085 ± 2% 2.100 ± 1% ~ (p=0.335 n=10) │ before.txt │ after.txt │ │ peak-RSS-bytes │ peak-RSS-bytes vs base │ Compiler 365.9Mi ± 2% 365.9Mi ± 3% ~ (p=0.579 n=10) --- tsc/internal/checker/utilities.go | 20 ++++++++++++------- .../compiler/nestedSpreadsAndWidening.types | 2 +- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/tsc/internal/checker/utilities.go b/tsc/internal/checker/utilities.go index f95d607bad724..ec66a02918a47 100644 --- a/tsc/internal/checker/utilities.go +++ b/tsc/internal/checker/utilities.go @@ -372,6 +372,15 @@ func (c *Checker) compareSymbolsWorker(s1, s2 *ast.Symbol) int { if s2 == nil { return -1 } + if r := c.compareSymbolDeclarationsAndNames(s1, s2); r != 0 { + return r + } + // Fall back to symbol IDs. This is a last resort that should happen only when symbols have + // no declaration and duplicate names. + return cmp.Compare(ast.GetSymbolId(s1), ast.GetSymbolId(s2)) +} + +func (c *Checker) compareSymbolDeclarationsAndNames(s1, s2 *ast.Symbol) int { if len(s1.Declarations()) != 0 && len(s2.Declarations()) != 0 { if r := c.compareNodes(s1.Declarations()[0], s2.Declarations()[0]); r != 0 { return r @@ -381,12 +390,7 @@ func (c *Checker) compareSymbolsWorker(s1, s2 *ast.Symbol) int { } else if len(s2.Declarations()) != 0 { return 1 } - if r := strings.Compare(s1.Name(), s2.Name()); r != 0 { - return r - } - // Fall back to symbol IDs. This is a last resort that should happen only when symbols have - // no declaration and duplicate names. - return cmp.Compare(ast.GetSymbolId(s1), ast.GetSymbolId(s2)) + return strings.Compare(s1.Name(), s2.Name()) } func (c *Checker) compareNodes(n1, n2 *ast.Node) int { @@ -738,7 +742,9 @@ func compareObjectLiteralMembers(t1, t2 *Type) int { } for i, s1 := range p1 { s2 := p2[i] - if r := c.compareSymbols(s1, s2); r != 0 { + // Members are created per object literal type, so they are ordered by + // what they declare rather than by identity. + if r := c.compareSymbolDeclarationsAndNames(s1, s2); r != 0 { return r } if r := int(s1.Flags()&ast.SymbolFlagsOptional) - int(s2.Flags()&ast.SymbolFlagsOptional); r != 0 { diff --git a/tsc/testdata/baselines/reference/compiler/nestedSpreadsAndWidening.types b/tsc/testdata/baselines/reference/compiler/nestedSpreadsAndWidening.types index 61e11538f1974..939c5597d5f60 100644 --- a/tsc/testdata/baselines/reference/compiler/nestedSpreadsAndWidening.types +++ b/tsc/testdata/baselines/reference/compiler/nestedSpreadsAndWidening.types @@ -120,7 +120,7 @@ declare const step: Action; read({ >read({ ...step, settings: { ...step.settings, input: { ...step.settings.input, k: ['5'] } },}) : void >read : (arg: T) => void ->{ ...step, settings: { ...step.settings, input: { ...step.settings.input, k: ['5'] } },} : { type: "1"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "2"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "3"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "4"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "5"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "6"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "7"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "8"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "9"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "10"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "11"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } +>{ ...step, settings: { ...step.settings, input: { ...step.settings.input, k: ['5'] } },} : { type: "1"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "10"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "11"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "2"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "3"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "4"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "5"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "6"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "7"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "8"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } | { type: "9"; settings: { input: { k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; }; }; } ...step, >step : Action From ebb87af797b03f35838c8fed89231d0f4298a8fb Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 20 Oct 2026 23:28:10 -0700 Subject: [PATCH 033/194] Intern binding pattern types and order them by pattern MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The type implied by a binding pattern was rebuilt on every request, so repeated requests produced copies that differed only by ID, and types implied by different patterns were ordered by creation. Intern the implied types by content. A type associated with its pattern is keyed by that pattern too, and types with patterns are ordered by them. Implied object types have no symbol, so also order them by their members like other object literal types. │ before.txt │ after.txt │ │ sec/op │ sec/op vs base │ Compiler 2.100 ± 1% 2.090 ± 2% ~ (p=0.642 n=10) │ before.txt │ after.txt │ │ peak-RSS-bytes │ peak-RSS-bytes vs base │ Compiler 365.9Mi ± 3% 365.2Mi ± 11% ~ (p=0.280 n=10) --- tsc/internal/checker/checker.go | 33 +++++++++++++++++++ tsc/internal/checker/utilities.go | 17 +++++++++- ...indingElementPropertyName05.baseline.jsonc | 2 +- 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 9369c5483ed1d..c5c163aceb6bb 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -681,6 +681,7 @@ type Checker struct { spreadTypes map[CacheHashKey]*Type spreadContentTypes map[CacheHashKey]*Type spreadSymbols map[spreadSymbolKey]*ast.Symbol + bindingPatternTypes map[CacheHashKey]*Type unionOfUnionTypes map[UnionOfUnionKey]*Type intersectionTypes map[CacheHashKey]*Type propertiesTypes map[PropertiesTypesKey]*Type @@ -1023,6 +1024,7 @@ func NewChecker(program Program, tracer *Tracer) (*Checker, *sync.Mutex) { c.spreadTypes = make(map[CacheHashKey]*Type) c.spreadContentTypes = make(map[CacheHashKey]*Type) c.spreadSymbols = make(map[spreadSymbolKey]*ast.Symbol) + c.bindingPatternTypes = make(map[CacheHashKey]*Type) c.unionOfUnionTypes = make(map[UnionOfUnionKey]*Type) c.intersectionTypes = make(map[CacheHashKey]*Type) c.propertiesTypes = make(map[PropertiesTypesKey]*Type) @@ -18690,12 +18692,35 @@ func (c *Checker) getTypeFromObjectBindingPattern(pattern *ast.Node, includePatt if stringIndexInfo != nil { indexInfos = []*IndexInfo{stringIndexInfo} } + // The members are declared by the pattern's elements, so patterns + // implying the same members still need distinct types. + var b keyBuilder + b.writeNode(pattern) + if includePatternInType { + b.writeByte(1) + } else { + b.writeByte(0) + } + b.writeUint32(uint32(objectFlags)) + b.writeInt(len(indexInfos)) + names := slices.Sorted(members.Keys()) + for _, name := range names { + b.writeString(name) + b.writeByte(0) + b.writeUint32(uint32(members.Get(name).Flags())) + b.writeType(c.valueSymbolLinks.Get(members.Get(name)).resolvedType) + } + key := b.hash() + if existing := c.bindingPatternTypes[key]; existing != nil { + return existing + } result := c.newAnonymousType(nil, members, nil, nil, indexInfos) result.objectFlags |= objectFlags if includePatternInType { c.patternForType[result] = pattern result.objectFlags |= ObjectFlagsContainsObjectOrArrayLiteral } + c.bindingPatternTypes[key] = result return result } @@ -18739,9 +18764,17 @@ func (c *Checker) getTypeFromArrayBindingPattern(pattern *ast.Node, includePatte } result := c.createTupleTypeEx(elementTypes, elementInfos, false) if includePatternInType { + var b keyBuilder + b.writeNode(pattern) + b.writeType(result) + key := b.hash() + if existing := c.bindingPatternTypes[key]; existing != nil { + return existing + } result = c.cloneTypeReference(result) c.patternForType[result] = pattern result.objectFlags |= ObjectFlagsContainsObjectOrArrayLiteral + c.bindingPatternTypes[key] = result } return result } diff --git a/tsc/internal/checker/utilities.go b/tsc/internal/checker/utilities.go index ec66a02918a47..82d00bf85eba1 100644 --- a/tsc/internal/checker/utilities.go +++ b/tsc/internal/checker/utilities.go @@ -636,6 +636,14 @@ func CompareTypes(t1, t2 *Type) int { return c } } + // Types implied by binding patterns are ordered by their patterns. + if t1.flags&TypeFlagsObject != 0 { + p1 := t1.checker.patternForType[t1] + p2 := t2.checker.patternForType[t2] + if c := t1.checker.compareNodes(p1, p2); c != 0 { + return c + } + } // Fresh literal types follow their regular counterparts. if t1.flags&TypeFlagsFreshable != 0 { if f1, f2 := isFreshLiteralType(t1), isFreshLiteralType(t2); f1 != f2 { @@ -730,7 +738,14 @@ func compareElementLabels(n1, n2 *ast.Node) int { // at creation rather than resolving them from their symbol. func hasObjectLiteralMembers(t *Type) bool { d := t.AsObjectType() - return d.target == nil && d.mapper == nil && t.symbol != nil && t.symbol.Flags()&ast.SymbolFlagsObjectLiteral != 0 + if d.target != nil || d.mapper != nil { + return false + } + if t.symbol == nil { + // Types implied by binding patterns have no symbol. + return t.objectFlags&ObjectFlagsObjectLiteral != 0 + } + return t.symbol.Flags()&ast.SymbolFlagsObjectLiteral != 0 } func compareObjectLiteralMembers(t1, t2 *Type) int { diff --git a/tsc/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsObjectBindingElementPropertyName05.baseline.jsonc b/tsc/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsObjectBindingElementPropertyName05.baseline.jsonc index fc60af735d4e3..8eea46177cedb 100644 --- a/tsc/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsObjectBindingElementPropertyName05.baseline.jsonc +++ b/tsc/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsObjectBindingElementPropertyName05.baseline.jsonc @@ -5,6 +5,6 @@ // property2: string; // } // -// function f({ /*FIND ALL REFS*/property1: p }, { property1 }) { +// function f({ /*FIND ALL REFS*/[|property1|]: p }, { property1 }) { // let x = property1; // } \ No newline at end of file From 64beb78a27b2ca9da0611f4e4a83b7d8084402dc Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 20 Oct 2026 23:57:30 -0700 Subject: [PATCH 034/194] Order object literal copies by their creation flags MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fresh, regular, and widened copies of an object literal can have identical members, so CompareTypes fell through to type IDs and ordered them by creation. Which copy exists first depends on check order. The flags set when each copy is created distinguish them, so compare those before falling back to IDs. │ before.txt │ after.txt │ │ sec/op │ sec/op vs base │ Compiler 2.090 ± 2% 2.100 ± 2% ~ (p=0.189 n=10) │ before.txt │ after.txt │ │ peak-RSS-bytes │ peak-RSS-bytes vs base │ Compiler 365.2Mi ± 11% 364.8Mi ± 11% ~ (p=0.853 n=10) --- tsc/internal/checker/utilities.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tsc/internal/checker/utilities.go b/tsc/internal/checker/utilities.go index 82d00bf85eba1..469efc5e06d33 100644 --- a/tsc/internal/checker/utilities.go +++ b/tsc/internal/checker/utilities.go @@ -537,6 +537,11 @@ func CompareTypes(t1, t2 *Type) int { if c := compareObjectLiteralMembers(t1, t2); c != 0 { return c } + // Fresh, regular, and widened copies of the same literal differ only in + // the flags set when they were created. + if c := int(t1.objectFlags&objectLiteralCreationFlags) - int(t2.objectFlags&objectLiteralCreationFlags); c != 0 { + return c + } } } case t1.flags&TypeFlagsUnion != 0: @@ -736,6 +741,10 @@ func compareElementLabels(n1, n2 *ast.Node) int { // Object literal types, and types derived from them, are given their members // at creation rather than resolving them from their symbol. +const objectLiteralCreationFlags = ObjectFlagsObjectLiteral | ObjectFlagsFreshLiteral | ObjectFlagsJSLiteral | ObjectFlagsArrayLiteral | + ObjectFlagsContainsSpread | ObjectFlagsObjectLiteralPatternWithComputedProperties | ObjectFlagsNonInferrableType | + ObjectFlagsContainsWideningType | ObjectFlagsContainsObjectOrArrayLiteral + func hasObjectLiteralMembers(t *Type) bool { d := t.AsObjectType() if d.target != nil || d.mapper != nil { From c55be034ce1746057a8ee44e38501d4434a428b4 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 20 Oct 2026 23:57:30 -0700 Subject: [PATCH 035/194] Intern widened, regular, and padded object literal types MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Widening, regularizing, and padding an object literal each created a new type and new member symbols on every call. Repeated calls in different check orders produced distinct but identical types whose relative order depended on creation, and whose identity leaked into union deduplication. Memoize the copied member symbols by source property and type, and intern the resulting object types by content through the map already used for spread types, so the same inputs yield the same type no matter when or how often they are computed. │ before.txt │ after.txt │ │ sec/op │ sec/op vs base │ Compiler 2.100 ± 2% 2.100 ± 1% ~ (p=0.423 n=10) │ before.txt │ after.txt │ │ peak-RSS-bytes │ peak-RSS-bytes vs base │ Compiler 364.8Mi ± 11% 360.9Mi ± 7% ~ (p=1.000 n=10) --- tsc/internal/checker/checker.go | 103 +++++++++++++++++++++++++------- 1 file changed, 81 insertions(+), 22 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index c5c163aceb6bb..e5044d0d8cb57 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -679,8 +679,10 @@ type Checker struct { unionTypes map[CacheHashKey]*Type objectLiteralTypes map[CacheHashKey]*Type spreadTypes map[CacheHashKey]*Type - spreadContentTypes map[CacheHashKey]*Type + objectContentTypes map[CacheHashKey]*Type spreadSymbols map[spreadSymbolKey]*ast.Symbol + symbolsWithType map[symbolWithTypeKey]*ast.Symbol + paddedProperties map[symbolWithTypeKey]*ast.Symbol bindingPatternTypes map[CacheHashKey]*Type unionOfUnionTypes map[UnionOfUnionKey]*Type intersectionTypes map[CacheHashKey]*Type @@ -1022,8 +1024,10 @@ func NewChecker(program Program, tracer *Tracer) (*Checker, *sync.Mutex) { c.unionTypes = make(map[CacheHashKey]*Type) c.objectLiteralTypes = make(map[CacheHashKey]*Type) c.spreadTypes = make(map[CacheHashKey]*Type) - c.spreadContentTypes = make(map[CacheHashKey]*Type) + c.objectContentTypes = make(map[CacheHashKey]*Type) c.spreadSymbols = make(map[spreadSymbolKey]*ast.Symbol) + c.symbolsWithType = make(map[symbolWithTypeKey]*ast.Symbol) + c.paddedProperties = make(map[symbolWithTypeKey]*ast.Symbol) c.bindingPatternTypes = make(map[CacheHashKey]*Type) c.unionOfUnionTypes = make(map[UnionOfUnionKey]*Type) c.intersectionTypes = make(map[CacheHashKey]*Type) @@ -13917,14 +13921,14 @@ func (c *Checker) getSpreadType(left *Type, right *Type, symbol *ast.Symbol, obj flags := ObjectFlagsObjectLiteral | ObjectFlagsContainsObjectOrArrayLiteral | ObjectFlagsContainsSpread | objectFlags // Different inputs can produce the same members, e.g. when the right side // overrides every property of the left side. - contentKey := c.getSpreadTypeContentKey(symbol, flags, members, spreadIndexInfos) - if existing := c.spreadContentTypes[contentKey]; existing != nil { + contentKey := c.getObjectTypeContentKey(symbol, flags, members, spreadIndexInfos) + if existing := c.objectContentTypes[contentKey]; existing != nil { c.spreadTypes[key] = existing return existing } spread := c.newAnonymousType(symbol, members, nil, nil, spreadIndexInfos) spread.objectFlags |= flags - c.spreadContentTypes[contentKey] = spread + c.objectContentTypes[contentKey] = spread c.spreadTypes[key] = spread return spread } @@ -14050,10 +14054,11 @@ type spreadSymbolKey struct { readonly bool } -// getSpreadTypeContentKey identifies the content of a spread type. Members are -// either input properties or synthesized symbols that are themselves memoized, -// so symbol identity determines member content. -func (c *Checker) getSpreadTypeContentKey(symbol *ast.Symbol, flags ObjectFlags, members ast.SymbolTable, indexInfos []*IndexInfo) CacheHashKey { +// getObjectTypeContentKey identifies the content of an object type derived +// from other object types, such as a spread, widened, or regular type. Members +// are either input properties or synthesized symbols that are themselves +// memoized, so symbol identity determines member content. +func (c *Checker) getObjectTypeContentKey(symbol *ast.Symbol, flags ObjectFlags, members ast.SymbolTable, indexInfos []*IndexInfo) CacheHashKey { var b keyBuilder if symbol != nil { b.writeByte(1) @@ -17509,13 +17514,23 @@ func (c *Checker) padObjectLiteralType(t *Type, pattern *ast.Node) *Type { members.Set(prop.Name(), prop) } for _, e := range missingElements { - symbol := c.newSymbol(ast.SymbolFlagsProperty|ast.SymbolFlagsOptional, c.getPropertyNameFromBindingElement(e)) - c.valueSymbolLinks.Get(symbol).resolvedType = c.getTypeFromBindingElement(e, false /*includePatternInType*/, true /*reportErrors*/) + name := c.getPropertyNameFromBindingElement(e) + propType := c.getTypeFromBindingElement(e, false /*includePatternInType*/, true /*reportErrors*/) + key := symbolWithTypeKey{name: name, t: propType} + symbol := c.paddedProperties[key] + if symbol == nil { + symbol = c.newSymbol(ast.SymbolFlagsProperty|ast.SymbolFlagsOptional, name) + c.valueSymbolLinks.Get(symbol).resolvedType = propType + c.paddedProperties[key] = symbol + } members.Set(symbol.Name(), symbol) } - result := c.newAnonymousType(t.symbol, members, nil, nil, c.getIndexInfosOfType(t)) - result.objectFlags = t.objectFlags - return result + indexInfos := c.getIndexInfosOfType(t) + return c.internObjectType(t.symbol, t.objectFlags, members, indexInfos, func() *Type { + result := c.newAnonymousType(t.symbol, members, nil, nil, indexInfos) + result.objectFlags = t.objectFlags + return result + }) } func (c *Checker) getPropertyNameFromBindingElement(e *ast.Node) string { @@ -19197,11 +19212,16 @@ func (c *Checker) getWidenedTypeOfObjectLiteral(t *Type, context *WideningContex } } } - result := c.newAnonymousType(t.symbol, members, nil, nil, core.SameMap(c.getIndexInfosOfType(t), func(info *IndexInfo) *IndexInfo { + indexInfos := core.SameMap(c.getIndexInfosOfType(t), func(info *IndexInfo) *IndexInfo { return c.newIndexInfo(info.keyType, c.getWidenedType(info.valueType), info.isReadonly, info.declaration, info.components) - })) + }) // Retain js literal flag through widening - result.objectFlags |= t.objectFlags & (ObjectFlagsJSLiteral | ObjectFlagsNonInferrableType) + flags := t.objectFlags & (ObjectFlagsJSLiteral | ObjectFlagsNonInferrableType) + result := c.internObjectType(t.symbol, ObjectFlagsAnonymous|flags, members, indexInfos, func() *Type { + result := c.newAnonymousType(t.symbol, members, nil, nil, indexInfos) + result.objectFlags |= flags + return result + }) // Only cache in child contexts since the root context never widens a particular object literal type more than once if context != nil && context.parent != nil { if context.widenedTypes == nil { @@ -19227,7 +19247,7 @@ func (c *Checker) getWidenedProperty(prop *ast.Symbol, context *WideningContext) if widened == original { return prop } - return c.createSymbolWithType(prop, widened) + return c.getSymbolWithType(prop, widened) } func (w *WideningContext) getChildContext(propertyName string) *WideningContext { @@ -22714,6 +22734,36 @@ func (c *Checker) hasCommonDeclaration(symbols *collections.OrderedSet[*ast.Symb return commonDeclarations.Len() != 0 } +type symbolWithTypeKey struct { + source *ast.Symbol + name string + t *Type +} + +// getSymbolWithType is createSymbolWithType for copies of object type members, +// returning the same copy for the same property and type. +func (c *Checker) getSymbolWithType(source *ast.Symbol, t *Type) *ast.Symbol { + key := symbolWithTypeKey{source: source, t: t} + if existing := c.symbolsWithType[key]; existing != nil { + return existing + } + result := c.createSymbolWithType(source, t) + c.symbolsWithType[key] = result + return result +} + +// internObjectType returns an existing object type with the given content, or +// creates one with the given creation. +func (c *Checker) internObjectType(symbol *ast.Symbol, flags ObjectFlags, members ast.SymbolTable, indexInfos []*IndexInfo, create func() *Type) *Type { + key := c.getObjectTypeContentKey(symbol, flags&^(ObjectFlagsCouldContainTypeVariablesComputed|ObjectFlagsCouldContainTypeVariables|ObjectFlagsMembersResolved), members, indexInfos) + if existing := c.objectContentTypes[key]; existing != nil { + return existing + } + result := create() + c.objectContentTypes[key] = result + return result +} + func (c *Checker) createSymbolWithType(source *ast.Symbol, t *Type) *ast.Symbol { symbol := c.newSymbolEx(source.Flags(), source.Name(), source.CheckFlags()&ast.CheckFlagsReadonly) symbol.SetDeclarations(source.Declarations()) @@ -29376,9 +29426,18 @@ func (c *Checker) getRegularTypeOfObjectLiteral(t *Type) *Type { } resolved := c.resolveStructuredTypeMembers(t) members := c.transformTypeOfMembers(t, c.getRegularTypeOfObjectLiteral) - regular := c.newAnonymousType(t.symbol, members, resolved.CallSignatures(), resolved.ConstructSignatures(), resolved.getIndexInfos()) - regular.flags = resolved.flags - regular.objectFlags |= resolved.objectFlags & ^ObjectFlagsFreshLiteral + create := func() *Type { + regular := c.newAnonymousType(t.symbol, members, resolved.CallSignatures(), resolved.ConstructSignatures(), resolved.getIndexInfos()) + regular.flags = resolved.flags + regular.objectFlags |= resolved.objectFlags & ^ObjectFlagsFreshLiteral + return regular + } + var regular *Type + if len(resolved.CallSignatures()) == 0 && len(resolved.ConstructSignatures()) == 0 && resolved.flags == TypeFlagsObject { + regular = c.internObjectType(t.symbol, ObjectFlagsAnonymous|resolved.objectFlags&^ObjectFlagsFreshLiteral, members, resolved.getIndexInfos(), create) + } else { + regular = create() + } c.cachedTypes[key] = regular return regular } @@ -29389,7 +29448,7 @@ func (c *Checker) transformTypeOfMembers(t *Type, f func(propertyType *Type) *Ty original := c.getTypeOfSymbol(property) updated := f(original) if updated != original { - property = c.createSymbolWithType(property, updated) + property = c.getSymbolWithType(property, updated) } members.Set(property.Name(), property) } From 53f89e90415254f6818512b88a60ece2ae695018 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 21 Oct 2026 00:43:41 -0700 Subject: [PATCH 036/194] Intern object rest types and order them by members MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A rest from a union source yields one rest type per constituent, all sharing the symbol of the rest declaration. CompareTypes never looked at their members, so these types were ordered by creation, and each evaluation created new copies. Intern rest types by content, and order them by the declarations and names of their members. Member types are not consulted because rest members can be arbitrary properties whose types may not be resolved yet, which would make the order depend on what was checked first. │ before.txt │ after.txt │ │ sec/op │ sec/op vs base │ Compiler 2.100 ± 1% 2.105 ± 2% ~ (p=0.616 n=10) │ before.txt │ after.txt │ │ peak-RSS-bytes │ peak-RSS-bytes vs base │ Compiler 360.9Mi ± 7% 363.7Mi ± 6% ~ (p=0.739 n=10) --- tsc/internal/checker/checker.go | 9 ++++++--- tsc/internal/checker/utilities.go | 27 +++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index e5044d0d8cb57..86f76002bc9f7 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -18593,9 +18593,12 @@ func (c *Checker) getRestType(source *Type, properties []*ast.Node, symbol *ast. for _, prop := range spreadableProperties { members.Set(prop.Name(), c.getSpreadSymbol(prop, false /*readonly*/)) } - result := c.newAnonymousType(symbol, members, nil, nil, c.getIndexInfosOfType(source)) - result.objectFlags |= ObjectFlagsObjectRestType - return result + indexInfos := c.getIndexInfosOfType(source) + return c.internObjectType(symbol, ObjectFlagsAnonymous|ObjectFlagsObjectRestType, members, indexInfos, func() *Type { + result := c.newAnonymousType(symbol, members, nil, nil, indexInfos) + result.objectFlags |= ObjectFlagsObjectRestType + return result + }) } // Determine the control flow type associated with a destructuring declaration or assignment. The following diff --git a/tsc/internal/checker/utilities.go b/tsc/internal/checker/utilities.go index 469efc5e06d33..8b0acc36cb974 100644 --- a/tsc/internal/checker/utilities.go +++ b/tsc/internal/checker/utilities.go @@ -542,6 +542,12 @@ func CompareTypes(t1, t2 *Type) int { if c := int(t1.objectFlags&objectLiteralCreationFlags) - int(t2.objectFlags&objectLiteralCreationFlags); c != 0 { return c } + } else if t1.objectFlags&t2.objectFlags&ObjectFlagsObjectRestType != 0 { + // Rest types share the symbol of their declaration, so a rest from a union + // yields one type per constituent, distinguished by the members they keep. + if c := compareObjectMemberDeclarations(t1, t2); c != 0 { + return c + } } } case t1.flags&TypeFlagsUnion != 0: @@ -757,6 +763,27 @@ func hasObjectLiteralMembers(t *Type) bool { return t.symbol.Flags()&ast.SymbolFlagsObjectLiteral != 0 } +// compareObjectMemberDeclarations orders resolved object types by what their +// members declare, without consulting member types, which may not be resolved. +func compareObjectMemberDeclarations(t1, t2 *Type) int { + c := t1.checker + p1 := t1.AsStructuredType().properties + p2 := t2.AsStructuredType().properties + if n := len(p1) - len(p2); n != 0 { + return n + } + for i, s1 := range p1 { + s2 := p2[i] + if r := c.compareSymbolDeclarationsAndNames(s1, s2); r != 0 { + return r + } + if r := int(s1.Flags()&ast.SymbolFlagsOptional) - int(s2.Flags()&ast.SymbolFlagsOptional); r != 0 { + return r + } + } + return 0 +} + func compareObjectLiteralMembers(t1, t2 *Type) int { c := t1.checker p1 := t1.AsStructuredType().properties From bb53af3e57ac55e2b49b52d0eecf81585d027823 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 21 Oct 2026 00:44:13 -0700 Subject: [PATCH 037/194] Key deferred indexed access types by their persistent flags MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The indexed access cache was keyed by all access flags, but the type only records the persistent ones. Lookups that differed only in transient flags created separate types with identical content, which CompareTypes could then only order by creation. Key the cache by the flags the type actually carries, and compare those flags when ordering. │ before.txt │ after.txt │ │ sec/op │ sec/op vs base │ Compiler 2.105 ± 2% 2.105 ± 2% ~ (p=0.561 n=10) │ before.txt │ after.txt │ │ peak-RSS-bytes │ peak-RSS-bytes vs base │ Compiler 363.7Mi ± 6% 364.6Mi ± 4% ~ (p=0.739 n=10) --- tsc/internal/checker/checker.go | 2 +- tsc/internal/checker/utilities.go | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 86f76002bc9f7..e8292249c14b8 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -28202,7 +28202,7 @@ func (c *Checker) getIndexedAccessTypeOrUndefined(objectType *Type, indexType *T } // Defer the operation by creating an indexed access type. persistentAccessFlags := accessFlags & AccessFlagsPersistent - key := getIndexedAccessKey(objectType, indexType, accessFlags, alias) + key := getIndexedAccessKey(objectType, indexType, persistentAccessFlags, alias) t := c.indexedAccessTypes[key] if t == nil { t = c.newIndexedAccessType(objectType, indexType, persistentAccessFlags) diff --git a/tsc/internal/checker/utilities.go b/tsc/internal/checker/utilities.go index 8b0acc36cb974..06cb05b717faa 100644 --- a/tsc/internal/checker/utilities.go +++ b/tsc/internal/checker/utilities.go @@ -621,6 +621,9 @@ func CompareTypes(t1, t2 *Type) int { if c := CompareTypes(t1.AsIndexedAccessType().indexType, t2.AsIndexedAccessType().indexType); c != 0 { return c } + if c := int(t1.AsIndexedAccessType().accessFlags) - int(t2.AsIndexedAccessType().accessFlags); c != 0 { + return c + } case t1.flags&TypeFlagsConditional != 0: if c := t1.checker.compareNodes(t1.AsConditionalType().root.node.AsNode(), t2.AsConditionalType().root.node.AsNode()); c != 0 { return c From 0b3aa82c4b4208f44b9627a117c1b67f5949dd3d Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 21 Oct 2026 00:44:14 -0700 Subject: [PATCH 038/194] Intern intersection types by content MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Different intersection cache keys can produce the same intersection: an intersection requested without constraint reduction has its own key, and the denormalized origin of a cross-product union was created anew for each union. These identical types could only be ordered by creation. Share one type per set of constituents, flags, and alias. │ before.txt │ after.txt │ │ sec/op │ sec/op vs base │ Compiler 2.105 ± 2% 2.120 ± 4% ~ (p=0.358 n=10) │ before.txt │ after.txt │ │ peak-RSS-bytes │ peak-RSS-bytes vs base │ Compiler 364.6Mi ± 4% 368.9Mi ± 1% ~ (p=0.684 n=10) --- tsc/internal/checker/checker.go | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index e8292249c14b8..238b4242a09ce 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -686,6 +686,7 @@ type Checker struct { bindingPatternTypes map[CacheHashKey]*Type unionOfUnionTypes map[UnionOfUnionKey]*Type intersectionTypes map[CacheHashKey]*Type + intersectionContentTypes map[CacheHashKey]*Type propertiesTypes map[PropertiesTypesKey]*Type diagnostics ast.DiagnosticsCollection suggestionDiagnostics ast.DiagnosticsCollection @@ -1031,6 +1032,7 @@ func NewChecker(program Program, tracer *Tracer) (*Checker, *sync.Mutex) { c.bindingPatternTypes = make(map[CacheHashKey]*Type) c.unionOfUnionTypes = make(map[UnionOfUnionKey]*Type) c.intersectionTypes = make(map[CacheHashKey]*Type) + c.intersectionContentTypes = make(map[CacheHashKey]*Type) c.propertiesTypes = make(map[PropertiesTypesKey]*Type) c.patternForType = make(map[*Type]*ast.Node) c.contextFreeTypes = make(map[*ast.Node]*Type) @@ -27441,19 +27443,36 @@ func (c *Checker) getIntersectionTypeEx(types []*Type, flags IntersectionFlags, // the denormalized origin has fewer constituents than the union itself. var origin *Type if core.Some(constituents, isIntersectionType) && getConstituentCountOfTypes(constituents) > getConstituentCountOfTypes(typeSet) { - origin = c.newIntersectionType(ObjectFlagsNone, typeSet) + origin = c.getIntersectionTypeWithContent(ObjectFlagsNone, typeSet, nil) } result = c.getUnionTypeEx(constituents, UnionReductionLiteral, alias, origin) } } else { - result = c.newIntersectionType(objectFlags|c.getPropagatingFlagsOfTypes(types /*excludeKinds*/, TypeFlagsNullable), typeSet) - result.alias = alias + result = c.getIntersectionTypeWithContent(objectFlags|c.getPropagatingFlagsOfTypes(types /*excludeKinds*/, TypeFlagsNullable), typeSet, alias) } c.intersectionTypes[key] = result } return result } +// getIntersectionTypeWithContent returns the intersection type with the given +// constituents, flags, and alias. Different intersection cache keys can reduce +// to the same content, which should yield the same type. +func (c *Checker) getIntersectionTypeWithContent(objectFlags ObjectFlags, typeSet []*Type, alias *TypeAlias) *Type { + var b keyBuilder + b.writeTypes(typeSet) + b.writeUint32(uint32(objectFlags)) + b.writeAlias(alias) + key := b.hash() + if existing := c.intersectionContentTypes[key]; existing != nil { + return existing + } + result := c.newIntersectionType(objectFlags, typeSet) + result.alias = alias + c.intersectionContentTypes[key] = result + return result +} + func isUnionWithUndefined(t *Type) bool { return t.flags&TypeFlagsUnion != 0 && t.Types()[0].flags&TypeFlagsUndefined != 0 } From 5a3ef359b091fd9c8c23ffea3f5d9f647a164548 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 21 Oct 2026 00:44:15 -0700 Subject: [PATCH 039/194] Order tuple targets by their label declarations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tuple targets are cached by their label declarations, so tuples with identically named labels declared in different places get different targets. CompareTypes compared only label names, leaving references to such tuples with the same type arguments ordered by creation. Compare the label declarations after the type arguments, so existing orderings that differ in type arguments are unchanged. │ before.txt │ after.txt │ │ sec/op │ sec/op vs base │ Compiler 2.120 ± 4% 2.100 ± 3% ~ (p=0.189 n=10) │ before.txt │ after.txt │ │ peak-RSS-bytes │ peak-RSS-bytes vs base │ Compiler 368.9Mi ± 1% 366.4Mi ± 2% ~ (p=0.739 n=10) --- tsc/internal/checker/utilities.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tsc/internal/checker/utilities.go b/tsc/internal/checker/utilities.go index 06cb05b717faa..4cb680be0a6ef 100644 --- a/tsc/internal/checker/utilities.go +++ b/tsc/internal/checker/utilities.go @@ -492,6 +492,11 @@ func CompareTypes(t1, t2 *Type) int { return c } } + if r1.target != r2.target && r1.target.objectFlags&r2.target.objectFlags&ObjectFlagsTuple != 0 { + if c := t1.checker.compareTupleLabelDeclarations(r1.target.AsTupleType(), r2.target.AsTupleType()); c != 0 { + return c + } + } // Array literal types follow the references they were cloned from. if l1, l2 := t1.objectFlags&ObjectFlagsArrayLiteral != 0, t2.objectFlags&ObjectFlagsArrayLiteral != 0; l1 != l2 { return core.IfElse(l1, 1, -1) @@ -735,6 +740,17 @@ func compareTupleTypes(t1, t2 *TupleType) int { return 0 } +// compareTupleLabelDeclarations orders tuple targets that differ only in where +// their identically named labels are declared. +func (c *Checker) compareTupleLabelDeclarations(t1, t2 *TupleType) int { + for i := range t1.elementInfos { + if r := c.compareNodes(t1.elementInfos[i].labeledDeclaration, t2.elementInfos[i].labeledDeclaration); r != 0 { + return r + } + } + return 0 +} + func compareElementLabels(n1, n2 *ast.Node) int { if n1 == n2 { return 0 From 1b1a43059d4e0b8f0d0ebd1684e6664424734967 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 22 Oct 2026 09:56:49 -0700 Subject: [PATCH 040/194] Add a test for check order with a parameter in a type query A return type annotation naming a parameter is reused when printing a signature only if the parameter in scope is the same symbol. That depends on whether the parameter's type was resolved before the signature was instantiated, so the printed type differs between check orders. --- ...arameterInTypeQuery(checkorder=default).js | 35 ++++++++++++++++ ...terInTypeQuery(checkorder=default).symbols | 37 +++++++++++++++++ ...meterInTypeQuery(checkorder=default).types | 40 +++++++++++++++++++ ...rameterInTypeQuery(checkorder=isolated).js | 35 ++++++++++++++++ ...erInTypeQuery(checkorder=isolated).symbols | 37 +++++++++++++++++ ...eterInTypeQuery(checkorder=isolated).types | 40 +++++++++++++++++++ ...arameterInTypeQuery(checkorder=reverse).js | 35 ++++++++++++++++ ...terInTypeQuery(checkorder=reverse).symbols | 37 +++++++++++++++++ ...meterInTypeQuery(checkorder=reverse).types | 40 +++++++++++++++++++ ...meterInTypeQuery(checkorder=typesfirst).js | 35 ++++++++++++++++ ...InTypeQuery(checkorder=typesfirst).symbols | 37 +++++++++++++++++ ...erInTypeQuery(checkorder=typesfirst).types | 40 +++++++++++++++++++ .../checkOrderParameterInTypeQuery.ts | 19 +++++++++ 13 files changed, 467 insertions(+) create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=default).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=default).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=default).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=isolated).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=isolated).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=isolated).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=reverse).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=reverse).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=reverse).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=typesfirst).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=typesfirst).types create mode 100644 tsc/testdata/tests/cases/compiler/checkOrderParameterInTypeQuery.ts diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=default).js b/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=default).js new file mode 100644 index 0000000000000..749ae4044d77f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=default).js @@ -0,0 +1,35 @@ +//// [tests/cases/compiler/checkOrderParameterInTypeQuery.ts] //// + +//// [checkOrderParameterInTypeQuery.ts] +// Whether a parameter named in a reused return type annotation is the same +// symbol in the printed signature must not depend on whether the type of +// the parameter was resolved before the signature was instantiated. + +export class C2 { + #a = 1; + test1() { + class C { + test1(a: C2): typeof a.#a { + return 1; + } + } + return new C().test1(this); + } +} + + +//// [checkOrderParameterInTypeQuery.js] +// Whether a parameter named in a reused return type annotation is the same +// symbol in the printed signature must not depend on whether the type of +// the parameter was resolved before the signature was instantiated. +export class C2 { + #a = 1; + test1() { + class C { + test1(a) { + return 1; + } + } + return new C().test1(this); + } +} diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=default).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=default).symbols new file mode 100644 index 0000000000000..7f3da2b79534f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=default).symbols @@ -0,0 +1,37 @@ +//// [tests/cases/compiler/checkOrderParameterInTypeQuery.ts] //// + +=== checkOrderParameterInTypeQuery.ts === +// Whether a parameter named in a reused return type annotation is the same +// symbol in the printed signature must not depend on whether the type of +// the parameter was resolved before the signature was instantiated. + +export class C2 { +>C2 : Symbol(C2, Decl(checkOrderParameterInTypeQuery.ts, 0, 0)) + + #a = 1; +>#a : Symbol(C2.#a, Decl(checkOrderParameterInTypeQuery.ts, 4, 17)) + + test1() { +>test1 : Symbol(C2.test1, Decl(checkOrderParameterInTypeQuery.ts, 5, 11)) + + class C { +>C : Symbol(C, Decl(checkOrderParameterInTypeQuery.ts, 6, 13)) + + test1(a: C2): typeof a.#a { +>test1 : Symbol(C.test1, Decl(checkOrderParameterInTypeQuery.ts, 7, 17)) +>a : Symbol(a, Decl(checkOrderParameterInTypeQuery.ts, 8, 18)) +>C2 : Symbol(C2, Decl(checkOrderParameterInTypeQuery.ts, 0, 0)) +>a.#a : Symbol(C2.#a, Decl(checkOrderParameterInTypeQuery.ts, 4, 17)) +>a : Symbol(a, Decl(checkOrderParameterInTypeQuery.ts, 8, 18)) + + return 1; + } + } + return new C().test1(this); +>new C().test1 : Symbol(C.test1, Decl(checkOrderParameterInTypeQuery.ts, 7, 17)) +>C : Symbol(C, Decl(checkOrderParameterInTypeQuery.ts, 6, 13)) +>test1 : Symbol(C.test1, Decl(checkOrderParameterInTypeQuery.ts, 7, 17)) +>this : Symbol(C2, Decl(checkOrderParameterInTypeQuery.ts, 0, 0)) + } +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=default).types b/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=default).types new file mode 100644 index 0000000000000..c7f091d02bcb0 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=default).types @@ -0,0 +1,40 @@ +//// [tests/cases/compiler/checkOrderParameterInTypeQuery.ts] //// + +=== checkOrderParameterInTypeQuery.ts === +// Whether a parameter named in a reused return type annotation is the same +// symbol in the printed signature must not depend on whether the type of +// the parameter was resolved before the signature was instantiated. + +export class C2 { +>C2 : C2 + + #a = 1; +>#a : number +>1 : 1 + + test1() { +>test1 : () => number + + class C { +>C : C + + test1(a: C2): typeof a.#a { +>test1 : (a: C2) => typeof a.#a +>a : C2 +>a.#a : number +>a : C2 + + return 1; +>1 : 1 + } + } + return new C().test1(this); +>new C().test1(this) : number +>new C().test1 : (a: C2) => typeof a.#a +>new C() : C +>C : typeof C +>test1 : (a: C2) => typeof a.#a +>this : this + } +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=isolated).js b/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=isolated).js new file mode 100644 index 0000000000000..749ae4044d77f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=isolated).js @@ -0,0 +1,35 @@ +//// [tests/cases/compiler/checkOrderParameterInTypeQuery.ts] //// + +//// [checkOrderParameterInTypeQuery.ts] +// Whether a parameter named in a reused return type annotation is the same +// symbol in the printed signature must not depend on whether the type of +// the parameter was resolved before the signature was instantiated. + +export class C2 { + #a = 1; + test1() { + class C { + test1(a: C2): typeof a.#a { + return 1; + } + } + return new C().test1(this); + } +} + + +//// [checkOrderParameterInTypeQuery.js] +// Whether a parameter named in a reused return type annotation is the same +// symbol in the printed signature must not depend on whether the type of +// the parameter was resolved before the signature was instantiated. +export class C2 { + #a = 1; + test1() { + class C { + test1(a) { + return 1; + } + } + return new C().test1(this); + } +} diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=isolated).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=isolated).symbols new file mode 100644 index 0000000000000..7f3da2b79534f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=isolated).symbols @@ -0,0 +1,37 @@ +//// [tests/cases/compiler/checkOrderParameterInTypeQuery.ts] //// + +=== checkOrderParameterInTypeQuery.ts === +// Whether a parameter named in a reused return type annotation is the same +// symbol in the printed signature must not depend on whether the type of +// the parameter was resolved before the signature was instantiated. + +export class C2 { +>C2 : Symbol(C2, Decl(checkOrderParameterInTypeQuery.ts, 0, 0)) + + #a = 1; +>#a : Symbol(C2.#a, Decl(checkOrderParameterInTypeQuery.ts, 4, 17)) + + test1() { +>test1 : Symbol(C2.test1, Decl(checkOrderParameterInTypeQuery.ts, 5, 11)) + + class C { +>C : Symbol(C, Decl(checkOrderParameterInTypeQuery.ts, 6, 13)) + + test1(a: C2): typeof a.#a { +>test1 : Symbol(C.test1, Decl(checkOrderParameterInTypeQuery.ts, 7, 17)) +>a : Symbol(a, Decl(checkOrderParameterInTypeQuery.ts, 8, 18)) +>C2 : Symbol(C2, Decl(checkOrderParameterInTypeQuery.ts, 0, 0)) +>a.#a : Symbol(C2.#a, Decl(checkOrderParameterInTypeQuery.ts, 4, 17)) +>a : Symbol(a, Decl(checkOrderParameterInTypeQuery.ts, 8, 18)) + + return 1; + } + } + return new C().test1(this); +>new C().test1 : Symbol(C.test1, Decl(checkOrderParameterInTypeQuery.ts, 7, 17)) +>C : Symbol(C, Decl(checkOrderParameterInTypeQuery.ts, 6, 13)) +>test1 : Symbol(C.test1, Decl(checkOrderParameterInTypeQuery.ts, 7, 17)) +>this : Symbol(C2, Decl(checkOrderParameterInTypeQuery.ts, 0, 0)) + } +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=isolated).types b/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=isolated).types new file mode 100644 index 0000000000000..c7f091d02bcb0 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=isolated).types @@ -0,0 +1,40 @@ +//// [tests/cases/compiler/checkOrderParameterInTypeQuery.ts] //// + +=== checkOrderParameterInTypeQuery.ts === +// Whether a parameter named in a reused return type annotation is the same +// symbol in the printed signature must not depend on whether the type of +// the parameter was resolved before the signature was instantiated. + +export class C2 { +>C2 : C2 + + #a = 1; +>#a : number +>1 : 1 + + test1() { +>test1 : () => number + + class C { +>C : C + + test1(a: C2): typeof a.#a { +>test1 : (a: C2) => typeof a.#a +>a : C2 +>a.#a : number +>a : C2 + + return 1; +>1 : 1 + } + } + return new C().test1(this); +>new C().test1(this) : number +>new C().test1 : (a: C2) => typeof a.#a +>new C() : C +>C : typeof C +>test1 : (a: C2) => typeof a.#a +>this : this + } +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=reverse).js b/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=reverse).js new file mode 100644 index 0000000000000..749ae4044d77f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=reverse).js @@ -0,0 +1,35 @@ +//// [tests/cases/compiler/checkOrderParameterInTypeQuery.ts] //// + +//// [checkOrderParameterInTypeQuery.ts] +// Whether a parameter named in a reused return type annotation is the same +// symbol in the printed signature must not depend on whether the type of +// the parameter was resolved before the signature was instantiated. + +export class C2 { + #a = 1; + test1() { + class C { + test1(a: C2): typeof a.#a { + return 1; + } + } + return new C().test1(this); + } +} + + +//// [checkOrderParameterInTypeQuery.js] +// Whether a parameter named in a reused return type annotation is the same +// symbol in the printed signature must not depend on whether the type of +// the parameter was resolved before the signature was instantiated. +export class C2 { + #a = 1; + test1() { + class C { + test1(a) { + return 1; + } + } + return new C().test1(this); + } +} diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=reverse).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=reverse).symbols new file mode 100644 index 0000000000000..7f3da2b79534f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=reverse).symbols @@ -0,0 +1,37 @@ +//// [tests/cases/compiler/checkOrderParameterInTypeQuery.ts] //// + +=== checkOrderParameterInTypeQuery.ts === +// Whether a parameter named in a reused return type annotation is the same +// symbol in the printed signature must not depend on whether the type of +// the parameter was resolved before the signature was instantiated. + +export class C2 { +>C2 : Symbol(C2, Decl(checkOrderParameterInTypeQuery.ts, 0, 0)) + + #a = 1; +>#a : Symbol(C2.#a, Decl(checkOrderParameterInTypeQuery.ts, 4, 17)) + + test1() { +>test1 : Symbol(C2.test1, Decl(checkOrderParameterInTypeQuery.ts, 5, 11)) + + class C { +>C : Symbol(C, Decl(checkOrderParameterInTypeQuery.ts, 6, 13)) + + test1(a: C2): typeof a.#a { +>test1 : Symbol(C.test1, Decl(checkOrderParameterInTypeQuery.ts, 7, 17)) +>a : Symbol(a, Decl(checkOrderParameterInTypeQuery.ts, 8, 18)) +>C2 : Symbol(C2, Decl(checkOrderParameterInTypeQuery.ts, 0, 0)) +>a.#a : Symbol(C2.#a, Decl(checkOrderParameterInTypeQuery.ts, 4, 17)) +>a : Symbol(a, Decl(checkOrderParameterInTypeQuery.ts, 8, 18)) + + return 1; + } + } + return new C().test1(this); +>new C().test1 : Symbol(C.test1, Decl(checkOrderParameterInTypeQuery.ts, 7, 17)) +>C : Symbol(C, Decl(checkOrderParameterInTypeQuery.ts, 6, 13)) +>test1 : Symbol(C.test1, Decl(checkOrderParameterInTypeQuery.ts, 7, 17)) +>this : Symbol(C2, Decl(checkOrderParameterInTypeQuery.ts, 0, 0)) + } +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=reverse).types b/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=reverse).types new file mode 100644 index 0000000000000..c7f091d02bcb0 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=reverse).types @@ -0,0 +1,40 @@ +//// [tests/cases/compiler/checkOrderParameterInTypeQuery.ts] //// + +=== checkOrderParameterInTypeQuery.ts === +// Whether a parameter named in a reused return type annotation is the same +// symbol in the printed signature must not depend on whether the type of +// the parameter was resolved before the signature was instantiated. + +export class C2 { +>C2 : C2 + + #a = 1; +>#a : number +>1 : 1 + + test1() { +>test1 : () => number + + class C { +>C : C + + test1(a: C2): typeof a.#a { +>test1 : (a: C2) => typeof a.#a +>a : C2 +>a.#a : number +>a : C2 + + return 1; +>1 : 1 + } + } + return new C().test1(this); +>new C().test1(this) : number +>new C().test1 : (a: C2) => typeof a.#a +>new C() : C +>C : typeof C +>test1 : (a: C2) => typeof a.#a +>this : this + } +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=typesfirst).js b/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=typesfirst).js new file mode 100644 index 0000000000000..749ae4044d77f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=typesfirst).js @@ -0,0 +1,35 @@ +//// [tests/cases/compiler/checkOrderParameterInTypeQuery.ts] //// + +//// [checkOrderParameterInTypeQuery.ts] +// Whether a parameter named in a reused return type annotation is the same +// symbol in the printed signature must not depend on whether the type of +// the parameter was resolved before the signature was instantiated. + +export class C2 { + #a = 1; + test1() { + class C { + test1(a: C2): typeof a.#a { + return 1; + } + } + return new C().test1(this); + } +} + + +//// [checkOrderParameterInTypeQuery.js] +// Whether a parameter named in a reused return type annotation is the same +// symbol in the printed signature must not depend on whether the type of +// the parameter was resolved before the signature was instantiated. +export class C2 { + #a = 1; + test1() { + class C { + test1(a) { + return 1; + } + } + return new C().test1(this); + } +} diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..7f3da2b79534f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=typesfirst).symbols @@ -0,0 +1,37 @@ +//// [tests/cases/compiler/checkOrderParameterInTypeQuery.ts] //// + +=== checkOrderParameterInTypeQuery.ts === +// Whether a parameter named in a reused return type annotation is the same +// symbol in the printed signature must not depend on whether the type of +// the parameter was resolved before the signature was instantiated. + +export class C2 { +>C2 : Symbol(C2, Decl(checkOrderParameterInTypeQuery.ts, 0, 0)) + + #a = 1; +>#a : Symbol(C2.#a, Decl(checkOrderParameterInTypeQuery.ts, 4, 17)) + + test1() { +>test1 : Symbol(C2.test1, Decl(checkOrderParameterInTypeQuery.ts, 5, 11)) + + class C { +>C : Symbol(C, Decl(checkOrderParameterInTypeQuery.ts, 6, 13)) + + test1(a: C2): typeof a.#a { +>test1 : Symbol(C.test1, Decl(checkOrderParameterInTypeQuery.ts, 7, 17)) +>a : Symbol(a, Decl(checkOrderParameterInTypeQuery.ts, 8, 18)) +>C2 : Symbol(C2, Decl(checkOrderParameterInTypeQuery.ts, 0, 0)) +>a.#a : Symbol(C2.#a, Decl(checkOrderParameterInTypeQuery.ts, 4, 17)) +>a : Symbol(a, Decl(checkOrderParameterInTypeQuery.ts, 8, 18)) + + return 1; + } + } + return new C().test1(this); +>new C().test1 : Symbol(C.test1, Decl(checkOrderParameterInTypeQuery.ts, 7, 17)) +>C : Symbol(C, Decl(checkOrderParameterInTypeQuery.ts, 6, 13)) +>test1 : Symbol(C.test1, Decl(checkOrderParameterInTypeQuery.ts, 7, 17)) +>this : Symbol(C2, Decl(checkOrderParameterInTypeQuery.ts, 0, 0)) + } +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=typesfirst).types new file mode 100644 index 0000000000000..c7f091d02bcb0 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderParameterInTypeQuery(checkorder=typesfirst).types @@ -0,0 +1,40 @@ +//// [tests/cases/compiler/checkOrderParameterInTypeQuery.ts] //// + +=== checkOrderParameterInTypeQuery.ts === +// Whether a parameter named in a reused return type annotation is the same +// symbol in the printed signature must not depend on whether the type of +// the parameter was resolved before the signature was instantiated. + +export class C2 { +>C2 : C2 + + #a = 1; +>#a : number +>1 : 1 + + test1() { +>test1 : () => number + + class C { +>C : C + + test1(a: C2): typeof a.#a { +>test1 : (a: C2) => typeof a.#a +>a : C2 +>a.#a : number +>a : C2 + + return 1; +>1 : 1 + } + } + return new C().test1(this); +>new C().test1(this) : number +>new C().test1 : (a: C2) => typeof a.#a +>new C() : C +>C : typeof C +>test1 : (a: C2) => typeof a.#a +>this : this + } +} + diff --git a/tsc/testdata/tests/cases/compiler/checkOrderParameterInTypeQuery.ts b/tsc/testdata/tests/cases/compiler/checkOrderParameterInTypeQuery.ts new file mode 100644 index 0000000000000..627a5ec7db84d --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/checkOrderParameterInTypeQuery.ts @@ -0,0 +1,19 @@ +// @strict: true +// @target: esnext +// @checkOrder: default, reverse, isolated, typesfirst + +// Whether a parameter named in a reused return type annotation is the same +// symbol in the printed signature must not depend on whether the type of +// the parameter was resolved before the signature was instantiated. + +export class C2 { + #a = 1; + test1() { + class C { + test1(a: C2): typeof a.#a { + return 1; + } + } + return new C().test1(this); + } +} From 58409171f949b070eff455dd7b59a3eb1bc25739 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 22 Oct 2026 09:58:36 -0700 Subject: [PATCH 041/194] Look through instantiation when reusing a parameter name Instantiating a signature copies a parameter unless the parameter's type has already been resolved, so whether the parameter in a signature's printed scope is the declared one depends on what was checked before. Both name the same declaration, so treating only the declared one as the same reference made printing a reused annotation depend on check order. --- tsc/internal/checker/nodecopy.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tsc/internal/checker/nodecopy.go b/tsc/internal/checker/nodecopy.go index 71ed761dcbdc8..e3885a24be95d 100644 --- a/tsc/internal/checker/nodecopy.go +++ b/tsc/internal/checker/nodecopy.go @@ -354,8 +354,10 @@ func getExistingNodeTreeVisitor(b *NodeBuilderImpl, bound *recoveryBoundary) *as symAtLocation == b.ch.unknownSymbol || // If the symbol is not found, but was not found in the original scope either we probably have an error, don't reuse the node (symAtLocation == nil && sym != nil) || - // If the symbol is found both in declaration scope and in current scope then it should point to the same reference - (symAtLocation != nil && sym != nil && b.ch.getSymbolIfSameReference(b.ch.getExportSymbolOfValueSymbolIfExported(symAtLocation), sym) == nil) { + // If the symbol is found both in declaration scope and in current scope then it should point to the same reference. + // A parameter in scope may be an instantiation of the one in the declaration, depending on whether + // its type was resolved before its signature was instantiated, so compare what they instantiate. + (symAtLocation != nil && sym != nil && b.ch.getSymbolIfSameReference(b.ch.getTargetSymbol(b.ch.getExportSymbolOfValueSymbolIfExported(symAtLocation)), b.ch.getTargetSymbol(sym)) == nil) { // In isolated declaration we will not do rest parameter expansion so there is no need to report on these. if symAtLocation != b.ch.unknownSymbol { b.ctx.tracker.ReportInferenceFallback(node) From 6435b395e5666351415fa4b3f160d012c12b4085 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 22 Oct 2026 10:07:16 -0700 Subject: [PATCH 042/194] Add a test for check order with late-bound members Asking for the symbol of a computed accessor before anything has checked its interface leaves it unmerged from the property of the same name. The isolated baselines record that difference. --- ...oundMembers(checkorder=default).errors.txt | 22 ++++++++++++++++ ...teBoundMembers(checkorder=default).symbols | 25 +++++++++++++++++++ ...LateBoundMembers(checkorder=default).types | 24 ++++++++++++++++++ ...undMembers(checkorder=isolated).errors.txt | 22 ++++++++++++++++ ...eBoundMembers(checkorder=isolated).symbols | 25 +++++++++++++++++++ ...ateBoundMembers(checkorder=isolated).types | 24 ++++++++++++++++++ ...oundMembers(checkorder=reverse).errors.txt | 22 ++++++++++++++++ ...teBoundMembers(checkorder=reverse).symbols | 25 +++++++++++++++++++ ...LateBoundMembers(checkorder=reverse).types | 24 ++++++++++++++++++ ...dMembers(checkorder=typesfirst).errors.txt | 22 ++++++++++++++++ ...oundMembers(checkorder=typesfirst).symbols | 25 +++++++++++++++++++ ...eBoundMembers(checkorder=typesfirst).types | 24 ++++++++++++++++++ .../compiler/checkOrderLateBoundMembers.ts | 13 ++++++++++ 13 files changed, 297 insertions(+) create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).types create mode 100644 tsc/testdata/tests/cases/compiler/checkOrderLateBoundMembers.ts diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).errors.txt new file mode 100644 index 0000000000000..22ee511f52182 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).errors.txt @@ -0,0 +1,22 @@ +checkOrderLateBoundMembers.ts(6,9): error TS2300: Duplicate identifier 'foo'. +checkOrderLateBoundMembers.ts(7,5): error TS2300: Duplicate identifier 'foo'. +checkOrderLateBoundMembers.ts(8,9): error TS2300: Duplicate identifier 'foo'. + + +==== checkOrderLateBoundMembers.ts (3 errors) ==== + // Resolving the name in a computed property name looks it up in the members + // of the enclosing interface. That must not late-bind those same members, + // or the accessors would not merge with the property when asked first. + const foo = "foo" + interface I { + get [foo](): number; + ~~~~~ +!!! error TS2300: Duplicate identifier 'foo'. + foo: number; + ~~~ +!!! error TS2300: Duplicate identifier 'foo'. + set [foo](value: number); + ~~~~~ +!!! error TS2300: Duplicate identifier 'foo'. + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).symbols new file mode 100644 index 0000000000000..5d947b8a60834 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).symbols @@ -0,0 +1,25 @@ +//// [tests/cases/compiler/checkOrderLateBoundMembers.ts] //// + +=== checkOrderLateBoundMembers.ts === +// Resolving the name in a computed property name looks it up in the members +// of the enclosing interface. That must not late-bind those same members, +// or the accessors would not merge with the property when asked first. +const foo = "foo" +>foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) + +interface I { +>I : Symbol(I, Decl(checkOrderLateBoundMembers.ts, 3, 17)) + + get [foo](): number; +>[foo] : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) + + foo: number; +>foo : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) + + set [foo](value: number); +>[foo] : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) +>value : Symbol(value, Decl(checkOrderLateBoundMembers.ts, 7, 14)) +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).types b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).types new file mode 100644 index 0000000000000..d6be33f1e73b4 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).types @@ -0,0 +1,24 @@ +//// [tests/cases/compiler/checkOrderLateBoundMembers.ts] //// + +=== checkOrderLateBoundMembers.ts === +// Resolving the name in a computed property name looks it up in the members +// of the enclosing interface. That must not late-bind those same members, +// or the accessors would not merge with the property when asked first. +const foo = "foo" +>foo : "foo" +>"foo" : "foo" + +interface I { + get [foo](): number; +>[foo] : number +>foo : "foo" + + foo: number; +>foo : number + + set [foo](value: number); +>[foo] : number +>foo : "foo" +>value : number +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).errors.txt new file mode 100644 index 0000000000000..22ee511f52182 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).errors.txt @@ -0,0 +1,22 @@ +checkOrderLateBoundMembers.ts(6,9): error TS2300: Duplicate identifier 'foo'. +checkOrderLateBoundMembers.ts(7,5): error TS2300: Duplicate identifier 'foo'. +checkOrderLateBoundMembers.ts(8,9): error TS2300: Duplicate identifier 'foo'. + + +==== checkOrderLateBoundMembers.ts (3 errors) ==== + // Resolving the name in a computed property name looks it up in the members + // of the enclosing interface. That must not late-bind those same members, + // or the accessors would not merge with the property when asked first. + const foo = "foo" + interface I { + get [foo](): number; + ~~~~~ +!!! error TS2300: Duplicate identifier 'foo'. + foo: number; + ~~~ +!!! error TS2300: Duplicate identifier 'foo'. + set [foo](value: number); + ~~~~~ +!!! error TS2300: Duplicate identifier 'foo'. + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).symbols new file mode 100644 index 0000000000000..5d947b8a60834 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).symbols @@ -0,0 +1,25 @@ +//// [tests/cases/compiler/checkOrderLateBoundMembers.ts] //// + +=== checkOrderLateBoundMembers.ts === +// Resolving the name in a computed property name looks it up in the members +// of the enclosing interface. That must not late-bind those same members, +// or the accessors would not merge with the property when asked first. +const foo = "foo" +>foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) + +interface I { +>I : Symbol(I, Decl(checkOrderLateBoundMembers.ts, 3, 17)) + + get [foo](): number; +>[foo] : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) + + foo: number; +>foo : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) + + set [foo](value: number); +>[foo] : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) +>value : Symbol(value, Decl(checkOrderLateBoundMembers.ts, 7, 14)) +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).types b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).types new file mode 100644 index 0000000000000..d6be33f1e73b4 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).types @@ -0,0 +1,24 @@ +//// [tests/cases/compiler/checkOrderLateBoundMembers.ts] //// + +=== checkOrderLateBoundMembers.ts === +// Resolving the name in a computed property name looks it up in the members +// of the enclosing interface. That must not late-bind those same members, +// or the accessors would not merge with the property when asked first. +const foo = "foo" +>foo : "foo" +>"foo" : "foo" + +interface I { + get [foo](): number; +>[foo] : number +>foo : "foo" + + foo: number; +>foo : number + + set [foo](value: number); +>[foo] : number +>foo : "foo" +>value : number +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).errors.txt new file mode 100644 index 0000000000000..22ee511f52182 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).errors.txt @@ -0,0 +1,22 @@ +checkOrderLateBoundMembers.ts(6,9): error TS2300: Duplicate identifier 'foo'. +checkOrderLateBoundMembers.ts(7,5): error TS2300: Duplicate identifier 'foo'. +checkOrderLateBoundMembers.ts(8,9): error TS2300: Duplicate identifier 'foo'. + + +==== checkOrderLateBoundMembers.ts (3 errors) ==== + // Resolving the name in a computed property name looks it up in the members + // of the enclosing interface. That must not late-bind those same members, + // or the accessors would not merge with the property when asked first. + const foo = "foo" + interface I { + get [foo](): number; + ~~~~~ +!!! error TS2300: Duplicate identifier 'foo'. + foo: number; + ~~~ +!!! error TS2300: Duplicate identifier 'foo'. + set [foo](value: number); + ~~~~~ +!!! error TS2300: Duplicate identifier 'foo'. + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).symbols new file mode 100644 index 0000000000000..5d947b8a60834 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).symbols @@ -0,0 +1,25 @@ +//// [tests/cases/compiler/checkOrderLateBoundMembers.ts] //// + +=== checkOrderLateBoundMembers.ts === +// Resolving the name in a computed property name looks it up in the members +// of the enclosing interface. That must not late-bind those same members, +// or the accessors would not merge with the property when asked first. +const foo = "foo" +>foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) + +interface I { +>I : Symbol(I, Decl(checkOrderLateBoundMembers.ts, 3, 17)) + + get [foo](): number; +>[foo] : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) + + foo: number; +>foo : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) + + set [foo](value: number); +>[foo] : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) +>value : Symbol(value, Decl(checkOrderLateBoundMembers.ts, 7, 14)) +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).types b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).types new file mode 100644 index 0000000000000..d6be33f1e73b4 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).types @@ -0,0 +1,24 @@ +//// [tests/cases/compiler/checkOrderLateBoundMembers.ts] //// + +=== checkOrderLateBoundMembers.ts === +// Resolving the name in a computed property name looks it up in the members +// of the enclosing interface. That must not late-bind those same members, +// or the accessors would not merge with the property when asked first. +const foo = "foo" +>foo : "foo" +>"foo" : "foo" + +interface I { + get [foo](): number; +>[foo] : number +>foo : "foo" + + foo: number; +>foo : number + + set [foo](value: number); +>[foo] : number +>foo : "foo" +>value : number +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..22ee511f52182 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).errors.txt @@ -0,0 +1,22 @@ +checkOrderLateBoundMembers.ts(6,9): error TS2300: Duplicate identifier 'foo'. +checkOrderLateBoundMembers.ts(7,5): error TS2300: Duplicate identifier 'foo'. +checkOrderLateBoundMembers.ts(8,9): error TS2300: Duplicate identifier 'foo'. + + +==== checkOrderLateBoundMembers.ts (3 errors) ==== + // Resolving the name in a computed property name looks it up in the members + // of the enclosing interface. That must not late-bind those same members, + // or the accessors would not merge with the property when asked first. + const foo = "foo" + interface I { + get [foo](): number; + ~~~~~ +!!! error TS2300: Duplicate identifier 'foo'. + foo: number; + ~~~ +!!! error TS2300: Duplicate identifier 'foo'. + set [foo](value: number); + ~~~~~ +!!! error TS2300: Duplicate identifier 'foo'. + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..5d947b8a60834 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).symbols @@ -0,0 +1,25 @@ +//// [tests/cases/compiler/checkOrderLateBoundMembers.ts] //// + +=== checkOrderLateBoundMembers.ts === +// Resolving the name in a computed property name looks it up in the members +// of the enclosing interface. That must not late-bind those same members, +// or the accessors would not merge with the property when asked first. +const foo = "foo" +>foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) + +interface I { +>I : Symbol(I, Decl(checkOrderLateBoundMembers.ts, 3, 17)) + + get [foo](): number; +>[foo] : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) + + foo: number; +>foo : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) + + set [foo](value: number); +>[foo] : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) +>value : Symbol(value, Decl(checkOrderLateBoundMembers.ts, 7, 14)) +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).types new file mode 100644 index 0000000000000..d6be33f1e73b4 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).types @@ -0,0 +1,24 @@ +//// [tests/cases/compiler/checkOrderLateBoundMembers.ts] //// + +=== checkOrderLateBoundMembers.ts === +// Resolving the name in a computed property name looks it up in the members +// of the enclosing interface. That must not late-bind those same members, +// or the accessors would not merge with the property when asked first. +const foo = "foo" +>foo : "foo" +>"foo" : "foo" + +interface I { + get [foo](): number; +>[foo] : number +>foo : "foo" + + foo: number; +>foo : number + + set [foo](value: number); +>[foo] : number +>foo : "foo" +>value : number +} + diff --git a/tsc/testdata/tests/cases/compiler/checkOrderLateBoundMembers.ts b/tsc/testdata/tests/cases/compiler/checkOrderLateBoundMembers.ts new file mode 100644 index 0000000000000..a0e4fa51e4348 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/checkOrderLateBoundMembers.ts @@ -0,0 +1,13 @@ +// @strict: true +// @noEmit: true +// @checkOrder: default, reverse, isolated, typesfirst + +// Resolving the name in a computed property name looks it up in the members +// of the enclosing interface. That must not late-bind those same members, +// or the accessors would not merge with the property when asked first. +const foo = "foo" +interface I { + get [foo](): number; + foo: number; + set [foo](value: number); +} From bc5d75376101f91c50b8711ad2f5745d24191067 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 22 Oct 2026 10:08:58 -0700 Subject: [PATCH 043/194] Do not late-bind members a name lookup cannot match Looking up a name in the members of an interface or class resolved its late-bound members first, in case they merged into the symbol found. Inside a computed property name of that same type, that resolution is circular: the member being named is skipped, and the property it should have merged with stays apart. Whether the merge happened then depended on whether anything had resolved the members before the lookup. Late binding only merges member declarations into a symbol, so when the meaning sought excludes members and the early symbol does not match, the late-bound members cannot change the answer and need not be resolved. --- tsc/internal/checker/checker.go | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 238b4242a09ce..096b9a8fa2822 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -2289,7 +2289,21 @@ func (c *Checker) addTypeOnlyDeclarationRelatedInfo(diagnostic *ast.Diagnostic, func (c *Checker) getSymbol(symbols ast.SymbolTable, name string, meaning ast.SymbolFlags) *ast.Symbol { if meaning&ast.SymbolFlagsAll != 0 { - symbol := c.getMergedSymbol(symbols.Get(name)) + symbol := symbols.Get(name) + if symbol == nil { + return nil + } + // Late binding can only merge member declarations into a symbol, so + // skip it when those could not make the symbol match. Resolving the + // late-bound members here would otherwise be circular when looking up + // a name inside one of their computed property names. + if merged := c.mergedSymbols.TryGet(symbol); merged != nil && *merged != nil { + symbol = *merged + } + if symbol.Flags()&(meaning|ast.SymbolFlagsAlias) == 0 && meaning&(ast.SymbolFlagsClassMember|ast.SymbolFlagsAssignment) == 0 { + return nil + } + symbol = c.getMergedSymbol(symbol) if symbol != nil { if symbol.Flags()&meaning != 0 { return symbol From 47449ea3537ae2c9e4441ae93e333edc460e4d76 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 22 Oct 2026 11:14:50 -0700 Subject: [PATCH 044/194] Add a test for check order with computed enum members Asking for the type of an enum before anything has checked it computes its member values, which type-checks a computed initializer that refers back to the enum. The isolated baselines give the member type never. --- ...rEnumComputedMember(checkorder=default).js | 30 +++++++++++++++++++ ...ComputedMember(checkorder=default).symbols | 29 ++++++++++++++++++ ...umComputedMember(checkorder=default).types | 30 +++++++++++++++++++ ...EnumComputedMember(checkorder=isolated).js | 30 +++++++++++++++++++ ...omputedMember(checkorder=isolated).symbols | 29 ++++++++++++++++++ ...mComputedMember(checkorder=isolated).types | 30 +++++++++++++++++++ ...rEnumComputedMember(checkorder=reverse).js | 30 +++++++++++++++++++ ...ComputedMember(checkorder=reverse).symbols | 29 ++++++++++++++++++ ...umComputedMember(checkorder=reverse).types | 30 +++++++++++++++++++ ...umComputedMember(checkorder=typesfirst).js | 30 +++++++++++++++++++ ...putedMember(checkorder=typesfirst).symbols | 29 ++++++++++++++++++ ...omputedMember(checkorder=typesfirst).types | 30 +++++++++++++++++++ .../compiler/checkOrderEnumComputedMember.ts | 12 ++++++++ 13 files changed, 368 insertions(+) create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=default).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=default).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=default).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=isolated).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=isolated).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=isolated).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=reverse).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=reverse).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=reverse).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=typesfirst).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=typesfirst).types create mode 100644 tsc/testdata/tests/cases/compiler/checkOrderEnumComputedMember.ts diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=default).js b/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=default).js new file mode 100644 index 0000000000000..fe0caa60a4dc6 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=default).js @@ -0,0 +1,30 @@ +//// [tests/cases/compiler/checkOrderEnumComputedMember.ts] //// + +//// [checkOrderEnumComputedMember.ts] +enum E { + A = 0, + B = E.A.valueOf(), + C = 1, +} + +const member: Extract = E.C; + + +//// [checkOrderEnumComputedMember.js] +"use strict"; +var E; +(function (E) { + E[E["A"] = 0] = "A"; + E[E["B"] = E.A.valueOf()] = "B"; + E[E["C"] = 1] = "C"; +})(E || (E = {})); +const member = E.C; + + +//// [checkOrderEnumComputedMember.d.ts] +declare enum E { + A = 0, + B, + C = 1 +} +declare const member: Extract; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=default).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=default).symbols new file mode 100644 index 0000000000000..543ee2b641c26 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=default).symbols @@ -0,0 +1,29 @@ +//// [tests/cases/compiler/checkOrderEnumComputedMember.ts] //// + +=== checkOrderEnumComputedMember.ts === +enum E { +>E : Symbol(E, Decl(checkOrderEnumComputedMember.ts, 0, 0)) + + A = 0, +>A : Symbol(E.A, Decl(checkOrderEnumComputedMember.ts, 0, 8)) + + B = E.A.valueOf(), +>B : Symbol(E.B, Decl(checkOrderEnumComputedMember.ts, 1, 10)) +>E.A.valueOf : Symbol(Number.valueOf, Decl(lib.es5.d.ts, --, --)) +>E.A : Symbol(E.A, Decl(checkOrderEnumComputedMember.ts, 0, 8)) +>E : Symbol(E, Decl(checkOrderEnumComputedMember.ts, 0, 0)) +>A : Symbol(E.A, Decl(checkOrderEnumComputedMember.ts, 0, 8)) +>valueOf : Symbol(Number.valueOf, Decl(lib.es5.d.ts, --, --)) + + C = 1, +>C : Symbol(E.C, Decl(checkOrderEnumComputedMember.ts, 2, 22)) +} + +const member: Extract = E.C; +>member : Symbol(member, Decl(checkOrderEnumComputedMember.ts, 6, 5)) +>Extract : Symbol(Extract, Decl(lib.es5.d.ts, --, --)) +>E : Symbol(E, Decl(checkOrderEnumComputedMember.ts, 0, 0)) +>E.C : Symbol(E.C, Decl(checkOrderEnumComputedMember.ts, 2, 22)) +>E : Symbol(E, Decl(checkOrderEnumComputedMember.ts, 0, 0)) +>C : Symbol(E.C, Decl(checkOrderEnumComputedMember.ts, 2, 22)) + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=default).types b/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=default).types new file mode 100644 index 0000000000000..39ddeced5f433 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=default).types @@ -0,0 +1,30 @@ +//// [tests/cases/compiler/checkOrderEnumComputedMember.ts] //// + +=== checkOrderEnumComputedMember.ts === +enum E { +>E : E + + A = 0, +>A : E.A +>0 : 0 + + B = E.A.valueOf(), +>B : E.B +>E.A.valueOf() : number +>E.A.valueOf : () => number +>E.A : E.A +>E : typeof E +>A : E.A +>valueOf : () => number + + C = 1, +>C : E.C +>1 : 1 +} + +const member: Extract = E.C; +>member : E.C +>E.C : E.C +>E : typeof E +>C : E.C + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=isolated).js b/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=isolated).js new file mode 100644 index 0000000000000..fe0caa60a4dc6 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=isolated).js @@ -0,0 +1,30 @@ +//// [tests/cases/compiler/checkOrderEnumComputedMember.ts] //// + +//// [checkOrderEnumComputedMember.ts] +enum E { + A = 0, + B = E.A.valueOf(), + C = 1, +} + +const member: Extract = E.C; + + +//// [checkOrderEnumComputedMember.js] +"use strict"; +var E; +(function (E) { + E[E["A"] = 0] = "A"; + E[E["B"] = E.A.valueOf()] = "B"; + E[E["C"] = 1] = "C"; +})(E || (E = {})); +const member = E.C; + + +//// [checkOrderEnumComputedMember.d.ts] +declare enum E { + A = 0, + B, + C = 1 +} +declare const member: Extract; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=isolated).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=isolated).symbols new file mode 100644 index 0000000000000..543ee2b641c26 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=isolated).symbols @@ -0,0 +1,29 @@ +//// [tests/cases/compiler/checkOrderEnumComputedMember.ts] //// + +=== checkOrderEnumComputedMember.ts === +enum E { +>E : Symbol(E, Decl(checkOrderEnumComputedMember.ts, 0, 0)) + + A = 0, +>A : Symbol(E.A, Decl(checkOrderEnumComputedMember.ts, 0, 8)) + + B = E.A.valueOf(), +>B : Symbol(E.B, Decl(checkOrderEnumComputedMember.ts, 1, 10)) +>E.A.valueOf : Symbol(Number.valueOf, Decl(lib.es5.d.ts, --, --)) +>E.A : Symbol(E.A, Decl(checkOrderEnumComputedMember.ts, 0, 8)) +>E : Symbol(E, Decl(checkOrderEnumComputedMember.ts, 0, 0)) +>A : Symbol(E.A, Decl(checkOrderEnumComputedMember.ts, 0, 8)) +>valueOf : Symbol(Number.valueOf, Decl(lib.es5.d.ts, --, --)) + + C = 1, +>C : Symbol(E.C, Decl(checkOrderEnumComputedMember.ts, 2, 22)) +} + +const member: Extract = E.C; +>member : Symbol(member, Decl(checkOrderEnumComputedMember.ts, 6, 5)) +>Extract : Symbol(Extract, Decl(lib.es5.d.ts, --, --)) +>E : Symbol(E, Decl(checkOrderEnumComputedMember.ts, 0, 0)) +>E.C : Symbol(E.C, Decl(checkOrderEnumComputedMember.ts, 2, 22)) +>E : Symbol(E, Decl(checkOrderEnumComputedMember.ts, 0, 0)) +>C : Symbol(E.C, Decl(checkOrderEnumComputedMember.ts, 2, 22)) + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=isolated).types b/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=isolated).types new file mode 100644 index 0000000000000..39ddeced5f433 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=isolated).types @@ -0,0 +1,30 @@ +//// [tests/cases/compiler/checkOrderEnumComputedMember.ts] //// + +=== checkOrderEnumComputedMember.ts === +enum E { +>E : E + + A = 0, +>A : E.A +>0 : 0 + + B = E.A.valueOf(), +>B : E.B +>E.A.valueOf() : number +>E.A.valueOf : () => number +>E.A : E.A +>E : typeof E +>A : E.A +>valueOf : () => number + + C = 1, +>C : E.C +>1 : 1 +} + +const member: Extract = E.C; +>member : E.C +>E.C : E.C +>E : typeof E +>C : E.C + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=reverse).js b/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=reverse).js new file mode 100644 index 0000000000000..fe0caa60a4dc6 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=reverse).js @@ -0,0 +1,30 @@ +//// [tests/cases/compiler/checkOrderEnumComputedMember.ts] //// + +//// [checkOrderEnumComputedMember.ts] +enum E { + A = 0, + B = E.A.valueOf(), + C = 1, +} + +const member: Extract = E.C; + + +//// [checkOrderEnumComputedMember.js] +"use strict"; +var E; +(function (E) { + E[E["A"] = 0] = "A"; + E[E["B"] = E.A.valueOf()] = "B"; + E[E["C"] = 1] = "C"; +})(E || (E = {})); +const member = E.C; + + +//// [checkOrderEnumComputedMember.d.ts] +declare enum E { + A = 0, + B, + C = 1 +} +declare const member: Extract; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=reverse).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=reverse).symbols new file mode 100644 index 0000000000000..543ee2b641c26 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=reverse).symbols @@ -0,0 +1,29 @@ +//// [tests/cases/compiler/checkOrderEnumComputedMember.ts] //// + +=== checkOrderEnumComputedMember.ts === +enum E { +>E : Symbol(E, Decl(checkOrderEnumComputedMember.ts, 0, 0)) + + A = 0, +>A : Symbol(E.A, Decl(checkOrderEnumComputedMember.ts, 0, 8)) + + B = E.A.valueOf(), +>B : Symbol(E.B, Decl(checkOrderEnumComputedMember.ts, 1, 10)) +>E.A.valueOf : Symbol(Number.valueOf, Decl(lib.es5.d.ts, --, --)) +>E.A : Symbol(E.A, Decl(checkOrderEnumComputedMember.ts, 0, 8)) +>E : Symbol(E, Decl(checkOrderEnumComputedMember.ts, 0, 0)) +>A : Symbol(E.A, Decl(checkOrderEnumComputedMember.ts, 0, 8)) +>valueOf : Symbol(Number.valueOf, Decl(lib.es5.d.ts, --, --)) + + C = 1, +>C : Symbol(E.C, Decl(checkOrderEnumComputedMember.ts, 2, 22)) +} + +const member: Extract = E.C; +>member : Symbol(member, Decl(checkOrderEnumComputedMember.ts, 6, 5)) +>Extract : Symbol(Extract, Decl(lib.es5.d.ts, --, --)) +>E : Symbol(E, Decl(checkOrderEnumComputedMember.ts, 0, 0)) +>E.C : Symbol(E.C, Decl(checkOrderEnumComputedMember.ts, 2, 22)) +>E : Symbol(E, Decl(checkOrderEnumComputedMember.ts, 0, 0)) +>C : Symbol(E.C, Decl(checkOrderEnumComputedMember.ts, 2, 22)) + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=reverse).types b/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=reverse).types new file mode 100644 index 0000000000000..39ddeced5f433 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=reverse).types @@ -0,0 +1,30 @@ +//// [tests/cases/compiler/checkOrderEnumComputedMember.ts] //// + +=== checkOrderEnumComputedMember.ts === +enum E { +>E : E + + A = 0, +>A : E.A +>0 : 0 + + B = E.A.valueOf(), +>B : E.B +>E.A.valueOf() : number +>E.A.valueOf : () => number +>E.A : E.A +>E : typeof E +>A : E.A +>valueOf : () => number + + C = 1, +>C : E.C +>1 : 1 +} + +const member: Extract = E.C; +>member : E.C +>E.C : E.C +>E : typeof E +>C : E.C + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=typesfirst).js b/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=typesfirst).js new file mode 100644 index 0000000000000..fe0caa60a4dc6 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=typesfirst).js @@ -0,0 +1,30 @@ +//// [tests/cases/compiler/checkOrderEnumComputedMember.ts] //// + +//// [checkOrderEnumComputedMember.ts] +enum E { + A = 0, + B = E.A.valueOf(), + C = 1, +} + +const member: Extract = E.C; + + +//// [checkOrderEnumComputedMember.js] +"use strict"; +var E; +(function (E) { + E[E["A"] = 0] = "A"; + E[E["B"] = E.A.valueOf()] = "B"; + E[E["C"] = 1] = "C"; +})(E || (E = {})); +const member = E.C; + + +//// [checkOrderEnumComputedMember.d.ts] +declare enum E { + A = 0, + B, + C = 1 +} +declare const member: Extract; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..543ee2b641c26 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=typesfirst).symbols @@ -0,0 +1,29 @@ +//// [tests/cases/compiler/checkOrderEnumComputedMember.ts] //// + +=== checkOrderEnumComputedMember.ts === +enum E { +>E : Symbol(E, Decl(checkOrderEnumComputedMember.ts, 0, 0)) + + A = 0, +>A : Symbol(E.A, Decl(checkOrderEnumComputedMember.ts, 0, 8)) + + B = E.A.valueOf(), +>B : Symbol(E.B, Decl(checkOrderEnumComputedMember.ts, 1, 10)) +>E.A.valueOf : Symbol(Number.valueOf, Decl(lib.es5.d.ts, --, --)) +>E.A : Symbol(E.A, Decl(checkOrderEnumComputedMember.ts, 0, 8)) +>E : Symbol(E, Decl(checkOrderEnumComputedMember.ts, 0, 0)) +>A : Symbol(E.A, Decl(checkOrderEnumComputedMember.ts, 0, 8)) +>valueOf : Symbol(Number.valueOf, Decl(lib.es5.d.ts, --, --)) + + C = 1, +>C : Symbol(E.C, Decl(checkOrderEnumComputedMember.ts, 2, 22)) +} + +const member: Extract = E.C; +>member : Symbol(member, Decl(checkOrderEnumComputedMember.ts, 6, 5)) +>Extract : Symbol(Extract, Decl(lib.es5.d.ts, --, --)) +>E : Symbol(E, Decl(checkOrderEnumComputedMember.ts, 0, 0)) +>E.C : Symbol(E.C, Decl(checkOrderEnumComputedMember.ts, 2, 22)) +>E : Symbol(E, Decl(checkOrderEnumComputedMember.ts, 0, 0)) +>C : Symbol(E.C, Decl(checkOrderEnumComputedMember.ts, 2, 22)) + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=typesfirst).types new file mode 100644 index 0000000000000..39ddeced5f433 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderEnumComputedMember(checkorder=typesfirst).types @@ -0,0 +1,30 @@ +//// [tests/cases/compiler/checkOrderEnumComputedMember.ts] //// + +=== checkOrderEnumComputedMember.ts === +enum E { +>E : E + + A = 0, +>A : E.A +>0 : 0 + + B = E.A.valueOf(), +>B : E.B +>E.A.valueOf() : number +>E.A.valueOf : () => number +>E.A : E.A +>E : typeof E +>A : E.A +>valueOf : () => number + + C = 1, +>C : E.C +>1 : 1 +} + +const member: Extract = E.C; +>member : E.C +>E.C : E.C +>E : typeof E +>C : E.C + diff --git a/tsc/testdata/tests/cases/compiler/checkOrderEnumComputedMember.ts b/tsc/testdata/tests/cases/compiler/checkOrderEnumComputedMember.ts new file mode 100644 index 0000000000000..caaa6629db492 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/checkOrderEnumComputedMember.ts @@ -0,0 +1,12 @@ +// @checkOrder: default, reverse, isolated, typesfirst +// @target: esnext +// @strict: true +// @declaration: true + +enum E { + A = 0, + B = E.A.valueOf(), + C = 1, +} + +const member: Extract = E.C; From 71ce155b9a2d64fbb4a2afc1ab8cb0cd579ecc19 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 22 Oct 2026 11:16:59 -0700 Subject: [PATCH 045/194] Check computed enum initializers when checking the member Computing the values of an enum's members type-checked each computed initializer to report one that is not a number. The initializer may refer to the enum itself, whose type then reads member values that are still being computed, so the enum's type depended on whether its values were first computed by checking it or by asking for its type. The values do not depend on the initializer's type, so the check now happens when the member is checked, as for any other error in an initializer. --- tsc/internal/checker/checker.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 096b9a8fa2822..52d776229175b 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -5290,8 +5290,11 @@ func (c *Checker) checkEnumMember(node *ast.Node) { if ast.IsComputedPropertyName(node.Name()) { c.checkExpression(node.Name().Expression()) } - if node.Initializer() != nil { - c.checkExpression(node.Initializer()) + if initializer := node.Initializer(); initializer != nil { + initializerType := c.checkExpression(initializer) + if c.getEnumMemberValue(node).Value == nil && !ast.IsEnumConst(node.Parent) && node.Parent.Flags&ast.NodeFlagsAmbient == 0 { + c.checkTypeAssignableTo(initializerType, c.numberType, initializer, diagnostics.Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values) + } } } @@ -25230,8 +25233,6 @@ func (c *Checker) computeConstantEnumMemberValue(member *ast.Node) evaluator.Res c.error(initializer, diagnostics.X_const_enum_member_initializers_must_be_constant_expressions) case member.Parent.Flags&ast.NodeFlagsAmbient != 0: c.error(initializer, diagnostics.In_ambient_enum_declarations_member_initializer_must_be_constant_expression) - default: - c.checkTypeAssignableTo(c.checkExpression(initializer), c.numberType, initializer, diagnostics.Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values) } return result } From 531d440f0869ace5a1ed4e08c93251853a9be7fb Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 23 Oct 2026 08:09:03 -0700 Subject: [PATCH 046/194] Test that variances don't depend on declaration order For 64891. Measuring the variances of a generic interface reached through another one declared earlier made a type parameter appear invariant, rejecting an assignment that is accepted when the declarations are swapped. --- .../varianceDeclarationOrder.errors.txt | 31 +++++ .../compiler/varianceDeclarationOrder.symbols | 126 ++++++++++++++++++ .../compiler/varianceDeclarationOrder.types | 62 +++++++++ .../compiler/varianceDeclarationOrder.ts | 30 +++++ 4 files changed, 249 insertions(+) create mode 100644 tsc/testdata/baselines/reference/compiler/varianceDeclarationOrder.errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/varianceDeclarationOrder.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/varianceDeclarationOrder.types create mode 100644 tsc/testdata/tests/cases/compiler/varianceDeclarationOrder.ts diff --git a/tsc/testdata/baselines/reference/compiler/varianceDeclarationOrder.errors.txt b/tsc/testdata/baselines/reference/compiler/varianceDeclarationOrder.errors.txt new file mode 100644 index 0000000000000..76e1b58ab4906 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/varianceDeclarationOrder.errors.txt @@ -0,0 +1,31 @@ +refFirst.ts(10,14): error TS2322: Type 'DS<{ total: M; }, string>' is not assignable to type 'DS, string>'. + Property 'total' is missing in type 'Record' but required in type '{ total: M; }'. + + +==== refFirst.ts (1 errors) ==== + type M = { kind: "m" }; + type Filtered = { [K in keyof T as T[K] extends M ? K : never]: T[K] }; + interface Config { measure: keyof T } + interface Ref { dataset: DS, N> } + interface DS { + a(config: Config>): void; + b: Ref; + } + declare const x: DS<{ total: M }, string>; + export const y: DS, string> = x; + ~ +!!! error TS2322: Type 'DS<{ total: M; }, string>' is not assignable to type 'DS, string>'. +!!! error TS2322: Property 'total' is missing in type 'Record' but required in type '{ total: M; }'. + +==== dsFirst.ts (0 errors) ==== + type M = { kind: "m" }; + type Filtered = { [K in keyof T as T[K] extends M ? K : never]: T[K] }; + interface Config { measure: keyof T } + interface DS { + a(config: Config>): void; + b: Ref; + } + interface Ref { dataset: DS, N> } + declare const x: DS<{ total: M }, string>; + export const y: DS, string> = x; + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/varianceDeclarationOrder.symbols b/tsc/testdata/baselines/reference/compiler/varianceDeclarationOrder.symbols new file mode 100644 index 0000000000000..a35b1188b91ef --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/varianceDeclarationOrder.symbols @@ -0,0 +1,126 @@ +//// [tests/cases/compiler/varianceDeclarationOrder.ts] //// + +=== refFirst.ts === +type M = { kind: "m" }; +>M : Symbol(M, Decl(refFirst.ts, 0, 0)) +>kind : Symbol(kind, Decl(refFirst.ts, 0, 10)) + +type Filtered = { [K in keyof T as T[K] extends M ? K : never]: T[K] }; +>Filtered : Symbol(Filtered, Decl(refFirst.ts, 0, 23)) +>T : Symbol(T, Decl(refFirst.ts, 1, 14)) +>K : Symbol(K, Decl(refFirst.ts, 1, 22)) +>T : Symbol(T, Decl(refFirst.ts, 1, 14)) +>T : Symbol(T, Decl(refFirst.ts, 1, 14)) +>K : Symbol(K, Decl(refFirst.ts, 1, 22)) +>M : Symbol(M, Decl(refFirst.ts, 0, 0)) +>K : Symbol(K, Decl(refFirst.ts, 1, 22)) +>T : Symbol(T, Decl(refFirst.ts, 1, 14)) +>K : Symbol(K, Decl(refFirst.ts, 1, 22)) + +interface Config { measure: keyof T } +>Config : Symbol(Config, Decl(refFirst.ts, 1, 74)) +>T : Symbol(T, Decl(refFirst.ts, 2, 17)) +>measure : Symbol(Config.measure, Decl(refFirst.ts, 2, 21)) +>T : Symbol(T, Decl(refFirst.ts, 2, 17)) + +interface Ref { dataset: DS, N> } +>Ref : Symbol(Ref, Decl(refFirst.ts, 2, 40)) +>N : Symbol(N, Decl(refFirst.ts, 3, 14)) +>dataset : Symbol(Ref.dataset, Decl(refFirst.ts, 3, 18)) +>DS : Symbol(DS, Decl(refFirst.ts, 3, 54)) +>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --)) +>M : Symbol(M, Decl(refFirst.ts, 0, 0)) +>N : Symbol(N, Decl(refFirst.ts, 3, 14)) + +interface DS { +>DS : Symbol(DS, Decl(refFirst.ts, 3, 54)) +>T : Symbol(T, Decl(refFirst.ts, 4, 13)) +>N : Symbol(N, Decl(refFirst.ts, 4, 15)) + + a(config: Config>): void; +>a : Symbol(DS.a, Decl(refFirst.ts, 4, 20)) +>config : Symbol(config, Decl(refFirst.ts, 5, 6)) +>Config : Symbol(Config, Decl(refFirst.ts, 1, 74)) +>Filtered : Symbol(Filtered, Decl(refFirst.ts, 0, 23)) +>T : Symbol(T, Decl(refFirst.ts, 4, 13)) + + b: Ref; +>b : Symbol(DS.b, Decl(refFirst.ts, 5, 41)) +>Ref : Symbol(Ref, Decl(refFirst.ts, 2, 40)) +>N : Symbol(N, Decl(refFirst.ts, 4, 15)) +} +declare const x: DS<{ total: M }, string>; +>x : Symbol(x, Decl(refFirst.ts, 8, 13)) +>DS : Symbol(DS, Decl(refFirst.ts, 3, 54)) +>total : Symbol(total, Decl(refFirst.ts, 8, 21)) +>M : Symbol(M, Decl(refFirst.ts, 0, 0)) + +export const y: DS, string> = x; +>y : Symbol(y, Decl(refFirst.ts, 9, 12)) +>DS : Symbol(DS, Decl(refFirst.ts, 3, 54)) +>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --)) +>M : Symbol(M, Decl(refFirst.ts, 0, 0)) +>x : Symbol(x, Decl(refFirst.ts, 8, 13)) + +=== dsFirst.ts === +type M = { kind: "m" }; +>M : Symbol(M, Decl(dsFirst.ts, 0, 0)) +>kind : Symbol(kind, Decl(dsFirst.ts, 0, 10)) + +type Filtered = { [K in keyof T as T[K] extends M ? K : never]: T[K] }; +>Filtered : Symbol(Filtered, Decl(dsFirst.ts, 0, 23)) +>T : Symbol(T, Decl(dsFirst.ts, 1, 14)) +>K : Symbol(K, Decl(dsFirst.ts, 1, 22)) +>T : Symbol(T, Decl(dsFirst.ts, 1, 14)) +>T : Symbol(T, Decl(dsFirst.ts, 1, 14)) +>K : Symbol(K, Decl(dsFirst.ts, 1, 22)) +>M : Symbol(M, Decl(dsFirst.ts, 0, 0)) +>K : Symbol(K, Decl(dsFirst.ts, 1, 22)) +>T : Symbol(T, Decl(dsFirst.ts, 1, 14)) +>K : Symbol(K, Decl(dsFirst.ts, 1, 22)) + +interface Config { measure: keyof T } +>Config : Symbol(Config, Decl(dsFirst.ts, 1, 74)) +>T : Symbol(T, Decl(dsFirst.ts, 2, 17)) +>measure : Symbol(Config.measure, Decl(dsFirst.ts, 2, 21)) +>T : Symbol(T, Decl(dsFirst.ts, 2, 17)) + +interface DS { +>DS : Symbol(DS, Decl(dsFirst.ts, 2, 40)) +>T : Symbol(T, Decl(dsFirst.ts, 3, 13)) +>N : Symbol(N, Decl(dsFirst.ts, 3, 15)) + + a(config: Config>): void; +>a : Symbol(DS.a, Decl(dsFirst.ts, 3, 20)) +>config : Symbol(config, Decl(dsFirst.ts, 4, 6)) +>Config : Symbol(Config, Decl(dsFirst.ts, 1, 74)) +>Filtered : Symbol(Filtered, Decl(dsFirst.ts, 0, 23)) +>T : Symbol(T, Decl(dsFirst.ts, 3, 13)) + + b: Ref; +>b : Symbol(DS.b, Decl(dsFirst.ts, 4, 41)) +>Ref : Symbol(Ref, Decl(dsFirst.ts, 6, 1)) +>N : Symbol(N, Decl(dsFirst.ts, 3, 15)) +} +interface Ref { dataset: DS, N> } +>Ref : Symbol(Ref, Decl(dsFirst.ts, 6, 1)) +>N : Symbol(N, Decl(dsFirst.ts, 7, 14)) +>dataset : Symbol(Ref.dataset, Decl(dsFirst.ts, 7, 18)) +>DS : Symbol(DS, Decl(dsFirst.ts, 2, 40)) +>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --)) +>M : Symbol(M, Decl(dsFirst.ts, 0, 0)) +>N : Symbol(N, Decl(dsFirst.ts, 7, 14)) + +declare const x: DS<{ total: M }, string>; +>x : Symbol(x, Decl(dsFirst.ts, 8, 13)) +>DS : Symbol(DS, Decl(dsFirst.ts, 2, 40)) +>total : Symbol(total, Decl(dsFirst.ts, 8, 21)) +>M : Symbol(M, Decl(dsFirst.ts, 0, 0)) + +export const y: DS, string> = x; +>y : Symbol(y, Decl(dsFirst.ts, 9, 12)) +>DS : Symbol(DS, Decl(dsFirst.ts, 2, 40)) +>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --)) +>M : Symbol(M, Decl(dsFirst.ts, 0, 0)) +>x : Symbol(x, Decl(dsFirst.ts, 8, 13)) + diff --git a/tsc/testdata/baselines/reference/compiler/varianceDeclarationOrder.types b/tsc/testdata/baselines/reference/compiler/varianceDeclarationOrder.types new file mode 100644 index 0000000000000..c084cea2f9d50 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/varianceDeclarationOrder.types @@ -0,0 +1,62 @@ +//// [tests/cases/compiler/varianceDeclarationOrder.ts] //// + +=== refFirst.ts === +type M = { kind: "m" }; +>M : M +>kind : "m" + +type Filtered = { [K in keyof T as T[K] extends M ? K : never]: T[K] }; +>Filtered : Filtered + +interface Config { measure: keyof T } +>measure : keyof T + +interface Ref { dataset: DS, N> } +>dataset : DS, N> + +interface DS { + a(config: Config>): void; +>a : (config: Config>) => void +>config : Config> + + b: Ref; +>b : Ref +} +declare const x: DS<{ total: M }, string>; +>x : DS<{ total: M; }, string> +>total : M + +export const y: DS, string> = x; +>y : DS, string> +>x : DS<{ total: M; }, string> + +=== dsFirst.ts === +type M = { kind: "m" }; +>M : M +>kind : "m" + +type Filtered = { [K in keyof T as T[K] extends M ? K : never]: T[K] }; +>Filtered : Filtered + +interface Config { measure: keyof T } +>measure : keyof T + +interface DS { + a(config: Config>): void; +>a : (config: Config>) => void +>config : Config> + + b: Ref; +>b : Ref +} +interface Ref { dataset: DS, N> } +>dataset : DS, N> + +declare const x: DS<{ total: M }, string>; +>x : DS<{ total: M; }, string> +>total : M + +export const y: DS, string> = x; +>y : DS, string> +>x : DS<{ total: M; }, string> + diff --git a/tsc/testdata/tests/cases/compiler/varianceDeclarationOrder.ts b/tsc/testdata/tests/cases/compiler/varianceDeclarationOrder.ts new file mode 100644 index 0000000000000..077b736ce3fb4 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/varianceDeclarationOrder.ts @@ -0,0 +1,30 @@ +// @strict: true +// @noEmit: true + +// https://github.com/microsoft/TypeScript/issues/64891 +// The variances of DS must not depend on whether Ref, which mentions DS, +// is declared first. + +// @filename: refFirst.ts +type M = { kind: "m" }; +type Filtered = { [K in keyof T as T[K] extends M ? K : never]: T[K] }; +interface Config { measure: keyof T } +interface Ref { dataset: DS, N> } +interface DS { + a(config: Config>): void; + b: Ref; +} +declare const x: DS<{ total: M }, string>; +export const y: DS, string> = x; + +// @filename: dsFirst.ts +type M = { kind: "m" }; +type Filtered = { [K in keyof T as T[K] extends M ? K : never]: T[K] }; +interface Config { measure: keyof T } +interface DS { + a(config: Config>): void; + b: Ref; +} +interface Ref { dataset: DS, N> } +declare const x: DS<{ total: M }, string>; +export const y: DS, string> = x; From c76569188a99080214d2a8d70f39f731bdbfff4d Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 22 Oct 2026 12:03:43 -0700 Subject: [PATCH 047/194] Add circularity tests from PR 64834 These tests come from the upstream PR that unifies symbol type caching. Keeping identical copies here records how this branch handles the same circularity and cache-consistency cases, and makes it easier to rebase if that PR lands. --- ...larIndexedPropertyInstantiation.errors.txt | 14 ++ .../circularIndexedPropertyInstantiation.js | 14 ++ ...rcularIndexedPropertyInstantiation.symbols | 25 +++ ...circularIndexedPropertyInstantiation.types | 15 ++ ...tializerInference(strict=false).errors.txt | 40 +++++ ...cularInitializerInference(strict=false).js | 42 +++++ ...InitializerInference(strict=false).symbols | 98 +++++++++++ ...arInitializerInference(strict=false).types | 106 ++++++++++++ ...itializerInference(strict=true).errors.txt | 61 +++++++ ...rcularInitializerInference(strict=true).js | 42 +++++ ...rInitializerInference(strict=true).symbols | 98 +++++++++++ ...larInitializerInference(strict=true).types | 106 ++++++++++++ ...iagnostics(noimplicitany=false).errors.txt | 80 +++++++++ ...ularityDiagnostics(noimplicitany=false).js | 91 ++++++++++ ...tyDiagnostics(noimplicitany=false).symbols | 134 +++++++++++++++ ...rityDiagnostics(noimplicitany=false).types | 156 ++++++++++++++++++ ...Diagnostics(noimplicitany=true).errors.txt | 80 +++++++++ ...cularityDiagnostics(noimplicitany=true).js | 91 ++++++++++ ...ityDiagnostics(noimplicitany=true).symbols | 134 +++++++++++++++ ...arityDiagnostics(noimplicitany=true).types | 156 ++++++++++++++++++ .../enumMemberTypeCacheConsistency.js | 29 ++++ .../enumMemberTypeCacheConsistency.symbols | 29 ++++ .../enumMemberTypeCacheConsistency.types | 30 ++++ .../getterCircularityDiagnostics.errors.txt | 17 ++ .../compiler/getterCircularityDiagnostics.js | 22 +++ .../getterCircularityDiagnostics.symbols | 28 ++++ .../getterCircularityDiagnostics.types | 25 +++ ...andoIndexedAssignmentDiagnostic.errors.txt | 20 +++ .../jsExpandoIndexedAssignmentDiagnostic.js | 20 +++ ...ExpandoIndexedAssignmentDiagnostic.symbols | 33 ++++ ...jsExpandoIndexedAssignmentDiagnostic.types | 42 +++++ .../circularIndexedPropertyInstantiation.ts | 6 + .../compiler/circularInitializerInference.ts | 31 ++++ .../compiler/classCircularityDiagnostics.ts | 48 ++++++ .../enumMemberTypeCacheConsistency.ts | 11 ++ .../compiler/getterCircularityDiagnostics.ts | 14 ++ .../jsExpandoIndexedAssignmentDiagnostic.ts | 13 ++ 37 files changed, 2001 insertions(+) create mode 100644 tsc/testdata/baselines/reference/compiler/circularIndexedPropertyInstantiation.errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/circularIndexedPropertyInstantiation.js create mode 100644 tsc/testdata/baselines/reference/compiler/circularIndexedPropertyInstantiation.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/circularIndexedPropertyInstantiation.types create mode 100644 tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=false).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=false).js create mode 100644 tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=false).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=false).types create mode 100644 tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=true).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=true).js create mode 100644 tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=true).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=true).types create mode 100644 tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=false).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=false).js create mode 100644 tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=false).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=false).types create mode 100644 tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=true).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=true).js create mode 100644 tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=true).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=true).types create mode 100644 tsc/testdata/baselines/reference/compiler/enumMemberTypeCacheConsistency.js create mode 100644 tsc/testdata/baselines/reference/compiler/enumMemberTypeCacheConsistency.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/enumMemberTypeCacheConsistency.types create mode 100644 tsc/testdata/baselines/reference/compiler/getterCircularityDiagnostics.errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/getterCircularityDiagnostics.js create mode 100644 tsc/testdata/baselines/reference/compiler/getterCircularityDiagnostics.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/getterCircularityDiagnostics.types create mode 100644 tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.js create mode 100644 tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.types create mode 100644 tsc/testdata/tests/cases/compiler/circularIndexedPropertyInstantiation.ts create mode 100644 tsc/testdata/tests/cases/compiler/circularInitializerInference.ts create mode 100644 tsc/testdata/tests/cases/compiler/classCircularityDiagnostics.ts create mode 100644 tsc/testdata/tests/cases/compiler/enumMemberTypeCacheConsistency.ts create mode 100644 tsc/testdata/tests/cases/compiler/getterCircularityDiagnostics.ts create mode 100644 tsc/testdata/tests/cases/compiler/jsExpandoIndexedAssignmentDiagnostic.ts diff --git a/tsc/testdata/baselines/reference/compiler/circularIndexedPropertyInstantiation.errors.txt b/tsc/testdata/baselines/reference/compiler/circularIndexedPropertyInstantiation.errors.txt new file mode 100644 index 0000000000000..3322a7ea25b66 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularIndexedPropertyInstantiation.errors.txt @@ -0,0 +1,14 @@ +circularIndexedPropertyInstantiation.ts(4,9): error TS5114: Instantiations of type 'Foo' appear infinitely circular. +circularIndexedPropertyInstantiation.ts(5,13): error TS2344: Type '"false"' does not satisfy the constraint '"true"'. + + +==== circularIndexedPropertyInstantiation.ts (2 errors) ==== + // Repro from #14837 + + type Foo = { "true": Foo> }[T]; + let f1: Foo<"true", {}>; + ~~~~~~~~~~~~~~~ +!!! error TS5114: Instantiations of type 'Foo' appear infinitely circular. + let f2: Foo<"false", {}>; + ~~~~~~~ +!!! error TS2344: Type '"false"' does not satisfy the constraint '"true"'. \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/circularIndexedPropertyInstantiation.js b/tsc/testdata/baselines/reference/compiler/circularIndexedPropertyInstantiation.js new file mode 100644 index 0000000000000..ac6aa726ab7a4 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularIndexedPropertyInstantiation.js @@ -0,0 +1,14 @@ +//// [tests/cases/compiler/circularIndexedPropertyInstantiation.ts] //// + +//// [circularIndexedPropertyInstantiation.ts] +// Repro from #14837 + +type Foo = { "true": Foo> }[T]; +let f1: Foo<"true", {}>; +let f2: Foo<"false", {}>; + +//// [circularIndexedPropertyInstantiation.js] +"use strict"; +// Repro from #14837 +let f1; +let f2; diff --git a/tsc/testdata/baselines/reference/compiler/circularIndexedPropertyInstantiation.symbols b/tsc/testdata/baselines/reference/compiler/circularIndexedPropertyInstantiation.symbols new file mode 100644 index 0000000000000..5473bd4665786 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularIndexedPropertyInstantiation.symbols @@ -0,0 +1,25 @@ +//// [tests/cases/compiler/circularIndexedPropertyInstantiation.ts] //// + +=== circularIndexedPropertyInstantiation.ts === +// Repro from #14837 + +type Foo = { "true": Foo> }[T]; +>Foo : Symbol(Foo, Decl(circularIndexedPropertyInstantiation.ts, 0, 0)) +>T : Symbol(T, Decl(circularIndexedPropertyInstantiation.ts, 2, 9)) +>B : Symbol(B, Decl(circularIndexedPropertyInstantiation.ts, 2, 26)) +>"true" : Symbol("true", Decl(circularIndexedPropertyInstantiation.ts, 2, 33)) +>Foo : Symbol(Foo, Decl(circularIndexedPropertyInstantiation.ts, 0, 0)) +>T : Symbol(T, Decl(circularIndexedPropertyInstantiation.ts, 2, 9)) +>Foo : Symbol(Foo, Decl(circularIndexedPropertyInstantiation.ts, 0, 0)) +>T : Symbol(T, Decl(circularIndexedPropertyInstantiation.ts, 2, 9)) +>B : Symbol(B, Decl(circularIndexedPropertyInstantiation.ts, 2, 26)) +>T : Symbol(T, Decl(circularIndexedPropertyInstantiation.ts, 2, 9)) + +let f1: Foo<"true", {}>; +>f1 : Symbol(f1, Decl(circularIndexedPropertyInstantiation.ts, 3, 3)) +>Foo : Symbol(Foo, Decl(circularIndexedPropertyInstantiation.ts, 0, 0)) + +let f2: Foo<"false", {}>; +>f2 : Symbol(f2, Decl(circularIndexedPropertyInstantiation.ts, 4, 3)) +>Foo : Symbol(Foo, Decl(circularIndexedPropertyInstantiation.ts, 0, 0)) + diff --git a/tsc/testdata/baselines/reference/compiler/circularIndexedPropertyInstantiation.types b/tsc/testdata/baselines/reference/compiler/circularIndexedPropertyInstantiation.types new file mode 100644 index 0000000000000..789407f9e698b --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularIndexedPropertyInstantiation.types @@ -0,0 +1,15 @@ +//// [tests/cases/compiler/circularIndexedPropertyInstantiation.ts] //// + +=== circularIndexedPropertyInstantiation.ts === +// Repro from #14837 + +type Foo = { "true": Foo> }[T]; +>Foo : Foo +>"true" : Foo> + +let f1: Foo<"true", {}>; +>f1 : any + +let f2: Foo<"false", {}>; +>f2 : unknown + diff --git a/tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=false).errors.txt b/tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=false).errors.txt new file mode 100644 index 0000000000000..0accf5ec5ec5d --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=false).errors.txt @@ -0,0 +1,40 @@ +circularInitializerInference.ts(6,14): error TS2695: Left side of comma operator is unused and has no side effects. +circularInitializerInference.ts(9,20): error TS2695: Left side of comma operator is unused and has no side effects. +circularInitializerInference.ts(9,20): error TS2695: Left side of comma operator is unused and has no side effects. + + +==== circularInitializerInference.ts (3 errors) ==== + export {}; + + type IsAny = 0 extends (1 & Type) ? true : false; + type Assert = Condition; + + var comma = (comma, 3); + ~~~~~ +!!! error TS2695: Left side of comma operator is unused and has no side effects. + type CommaInference = Assert>; + + var nestedComma = (comma, nestedComma, comma); + ~~~~~ +!!! error TS2695: Left side of comma operator is unused and has no side effects. + ~~~~~~~~~~~~~~~~~~ +!!! error TS2695: Left side of comma operator is unused and has no side effects. + type NestedCommaInference = Assert>; + + var assignment = (assignment = 2); + type AssignmentInference = Assert>; + + var nestedAssignment = (nestedAssignment = nestedAssignment = 2); + type NestedAssignmentInference = Assert>; + + var conditional = conditional ? 0 : 1; + type ConditionalInference = Assert>; + + var logicalAnd = logicalAnd && ""; + type LogicalAndInference = Assert>; + + var propertyAccess = { member: propertyAccess.member }; + type PropertyAccessInference = Assert>; + + const nonCircular: number = 3; + type NonCircularInference = Assert extends false ? true : false>; \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=false).js b/tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=false).js new file mode 100644 index 0000000000000..6b1e6c702f422 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=false).js @@ -0,0 +1,42 @@ +//// [tests/cases/compiler/circularInitializerInference.ts] //// + +//// [circularInitializerInference.ts] +export {}; + +type IsAny = 0 extends (1 & Type) ? true : false; +type Assert = Condition; + +var comma = (comma, 3); +type CommaInference = Assert>; + +var nestedComma = (comma, nestedComma, comma); +type NestedCommaInference = Assert>; + +var assignment = (assignment = 2); +type AssignmentInference = Assert>; + +var nestedAssignment = (nestedAssignment = nestedAssignment = 2); +type NestedAssignmentInference = Assert>; + +var conditional = conditional ? 0 : 1; +type ConditionalInference = Assert>; + +var logicalAnd = logicalAnd && ""; +type LogicalAndInference = Assert>; + +var propertyAccess = { member: propertyAccess.member }; +type PropertyAccessInference = Assert>; + +const nonCircular: number = 3; +type NonCircularInference = Assert extends false ? true : false>; + +//// [circularInitializerInference.js] +var comma = (comma, 3); +var nestedComma = (comma, nestedComma, comma); +var assignment = (assignment = 2); +var nestedAssignment = (nestedAssignment = nestedAssignment = 2); +var conditional = conditional ? 0 : 1; +var logicalAnd = logicalAnd && ""; +var propertyAccess = { member: propertyAccess.member }; +const nonCircular = 3; +export {}; diff --git a/tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=false).symbols b/tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=false).symbols new file mode 100644 index 0000000000000..7146dd252c8ef --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=false).symbols @@ -0,0 +1,98 @@ +//// [tests/cases/compiler/circularInitializerInference.ts] //// + +=== circularInitializerInference.ts === +export {}; + +type IsAny = 0 extends (1 & Type) ? true : false; +>IsAny : Symbol(IsAny, Decl(circularInitializerInference.ts, 0, 10)) +>Type : Symbol(Type, Decl(circularInitializerInference.ts, 2, 11)) +>Type : Symbol(Type, Decl(circularInitializerInference.ts, 2, 11)) + +type Assert = Condition; +>Assert : Symbol(Assert, Decl(circularInitializerInference.ts, 2, 55)) +>Condition : Symbol(Condition, Decl(circularInitializerInference.ts, 3, 12)) +>Condition : Symbol(Condition, Decl(circularInitializerInference.ts, 3, 12)) + +var comma = (comma, 3); +>comma : Symbol(comma, Decl(circularInitializerInference.ts, 5, 3)) +>comma : Symbol(comma, Decl(circularInitializerInference.ts, 5, 3)) + +type CommaInference = Assert>; +>CommaInference : Symbol(CommaInference, Decl(circularInitializerInference.ts, 5, 23)) +>Assert : Symbol(Assert, Decl(circularInitializerInference.ts, 2, 55)) +>IsAny : Symbol(IsAny, Decl(circularInitializerInference.ts, 0, 10)) +>comma : Symbol(comma, Decl(circularInitializerInference.ts, 5, 3)) + +var nestedComma = (comma, nestedComma, comma); +>nestedComma : Symbol(nestedComma, Decl(circularInitializerInference.ts, 8, 3)) +>comma : Symbol(comma, Decl(circularInitializerInference.ts, 5, 3)) +>nestedComma : Symbol(nestedComma, Decl(circularInitializerInference.ts, 8, 3)) +>comma : Symbol(comma, Decl(circularInitializerInference.ts, 5, 3)) + +type NestedCommaInference = Assert>; +>NestedCommaInference : Symbol(NestedCommaInference, Decl(circularInitializerInference.ts, 8, 46)) +>Assert : Symbol(Assert, Decl(circularInitializerInference.ts, 2, 55)) +>IsAny : Symbol(IsAny, Decl(circularInitializerInference.ts, 0, 10)) +>nestedComma : Symbol(nestedComma, Decl(circularInitializerInference.ts, 8, 3)) + +var assignment = (assignment = 2); +>assignment : Symbol(assignment, Decl(circularInitializerInference.ts, 11, 3)) +>assignment : Symbol(assignment, Decl(circularInitializerInference.ts, 11, 3)) + +type AssignmentInference = Assert>; +>AssignmentInference : Symbol(AssignmentInference, Decl(circularInitializerInference.ts, 11, 34)) +>Assert : Symbol(Assert, Decl(circularInitializerInference.ts, 2, 55)) +>IsAny : Symbol(IsAny, Decl(circularInitializerInference.ts, 0, 10)) +>assignment : Symbol(assignment, Decl(circularInitializerInference.ts, 11, 3)) + +var nestedAssignment = (nestedAssignment = nestedAssignment = 2); +>nestedAssignment : Symbol(nestedAssignment, Decl(circularInitializerInference.ts, 14, 3)) +>nestedAssignment : Symbol(nestedAssignment, Decl(circularInitializerInference.ts, 14, 3)) +>nestedAssignment : Symbol(nestedAssignment, Decl(circularInitializerInference.ts, 14, 3)) + +type NestedAssignmentInference = Assert>; +>NestedAssignmentInference : Symbol(NestedAssignmentInference, Decl(circularInitializerInference.ts, 14, 65)) +>Assert : Symbol(Assert, Decl(circularInitializerInference.ts, 2, 55)) +>IsAny : Symbol(IsAny, Decl(circularInitializerInference.ts, 0, 10)) +>nestedAssignment : Symbol(nestedAssignment, Decl(circularInitializerInference.ts, 14, 3)) + +var conditional = conditional ? 0 : 1; +>conditional : Symbol(conditional, Decl(circularInitializerInference.ts, 17, 3)) +>conditional : Symbol(conditional, Decl(circularInitializerInference.ts, 17, 3)) + +type ConditionalInference = Assert>; +>ConditionalInference : Symbol(ConditionalInference, Decl(circularInitializerInference.ts, 17, 38)) +>Assert : Symbol(Assert, Decl(circularInitializerInference.ts, 2, 55)) +>IsAny : Symbol(IsAny, Decl(circularInitializerInference.ts, 0, 10)) +>conditional : Symbol(conditional, Decl(circularInitializerInference.ts, 17, 3)) + +var logicalAnd = logicalAnd && ""; +>logicalAnd : Symbol(logicalAnd, Decl(circularInitializerInference.ts, 20, 3)) +>logicalAnd : Symbol(logicalAnd, Decl(circularInitializerInference.ts, 20, 3)) + +type LogicalAndInference = Assert>; +>LogicalAndInference : Symbol(LogicalAndInference, Decl(circularInitializerInference.ts, 20, 34)) +>Assert : Symbol(Assert, Decl(circularInitializerInference.ts, 2, 55)) +>IsAny : Symbol(IsAny, Decl(circularInitializerInference.ts, 0, 10)) +>logicalAnd : Symbol(logicalAnd, Decl(circularInitializerInference.ts, 20, 3)) + +var propertyAccess = { member: propertyAccess.member }; +>propertyAccess : Symbol(propertyAccess, Decl(circularInitializerInference.ts, 23, 3)) +>member : Symbol(member, Decl(circularInitializerInference.ts, 23, 22)) +>propertyAccess : Symbol(propertyAccess, Decl(circularInitializerInference.ts, 23, 3)) + +type PropertyAccessInference = Assert>; +>PropertyAccessInference : Symbol(PropertyAccessInference, Decl(circularInitializerInference.ts, 23, 55)) +>Assert : Symbol(Assert, Decl(circularInitializerInference.ts, 2, 55)) +>IsAny : Symbol(IsAny, Decl(circularInitializerInference.ts, 0, 10)) +>propertyAccess : Symbol(propertyAccess, Decl(circularInitializerInference.ts, 23, 3)) + +const nonCircular: number = 3; +>nonCircular : Symbol(nonCircular, Decl(circularInitializerInference.ts, 26, 5)) + +type NonCircularInference = Assert extends false ? true : false>; +>NonCircularInference : Symbol(NonCircularInference, Decl(circularInitializerInference.ts, 26, 30)) +>Assert : Symbol(Assert, Decl(circularInitializerInference.ts, 2, 55)) +>IsAny : Symbol(IsAny, Decl(circularInitializerInference.ts, 0, 10)) +>nonCircular : Symbol(nonCircular, Decl(circularInitializerInference.ts, 26, 5)) + diff --git a/tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=false).types b/tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=false).types new file mode 100644 index 0000000000000..c9d5c077f18ad --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=false).types @@ -0,0 +1,106 @@ +//// [tests/cases/compiler/circularInitializerInference.ts] //// + +=== circularInitializerInference.ts === +export {}; + +type IsAny = 0 extends (1 & Type) ? true : false; +>IsAny : IsAny +>true : true +>false : false + +type Assert = Condition; +>Assert : Condition +>true : true + +var comma = (comma, 3); +>comma : any +>(comma, 3) : 3 +>comma, 3 : 3 +>comma : any +>3 : 3 + +type CommaInference = Assert>; +>CommaInference : true +>comma : any + +var nestedComma = (comma, nestedComma, comma); +>nestedComma : any +>(comma, nestedComma, comma) : any +>comma, nestedComma, comma : any +>comma, nestedComma : any +>comma : any +>nestedComma : any +>comma : any + +type NestedCommaInference = Assert>; +>NestedCommaInference : true +>nestedComma : any + +var assignment = (assignment = 2); +>assignment : any +>(assignment = 2) : 2 +>assignment = 2 : 2 +>assignment : any +>2 : 2 + +type AssignmentInference = Assert>; +>AssignmentInference : true +>assignment : any + +var nestedAssignment = (nestedAssignment = nestedAssignment = 2); +>nestedAssignment : any +>(nestedAssignment = nestedAssignment = 2) : 2 +>nestedAssignment = nestedAssignment = 2 : 2 +>nestedAssignment : any +>nestedAssignment = 2 : 2 +>nestedAssignment : any +>2 : 2 + +type NestedAssignmentInference = Assert>; +>NestedAssignmentInference : true +>nestedAssignment : any + +var conditional = conditional ? 0 : 1; +>conditional : any +>conditional ? 0 : 1 : 0 | 1 +>conditional : any +>0 : 0 +>1 : 1 + +type ConditionalInference = Assert>; +>ConditionalInference : true +>conditional : any + +var logicalAnd = logicalAnd && ""; +>logicalAnd : any +>logicalAnd && "" : "" +>logicalAnd : any +>"" : "" + +type LogicalAndInference = Assert>; +>LogicalAndInference : true +>logicalAnd : any + +var propertyAccess = { member: propertyAccess.member }; +>propertyAccess : any +>{ member: propertyAccess.member } : { member: any; } +>member : any +>propertyAccess.member : any +>propertyAccess : any +>member : any + +type PropertyAccessInference = Assert>; +>PropertyAccessInference : true +>propertyAccess : any + +const nonCircular: number = 3; +>nonCircular : number +>3 : 3 + +type NonCircularInference = Assert extends false ? true : false>; +>NonCircularInference : true +>nonCircular : number +>false : false +>true : true +>false : false + diff --git a/tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=true).errors.txt b/tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=true).errors.txt new file mode 100644 index 0000000000000..f7f94d4a4b3bc --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=true).errors.txt @@ -0,0 +1,61 @@ +circularInitializerInference.ts(6,5): error TS7022: 'comma' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. +circularInitializerInference.ts(6,14): error TS2695: Left side of comma operator is unused and has no side effects. +circularInitializerInference.ts(9,5): error TS7022: 'nestedComma' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. +circularInitializerInference.ts(9,20): error TS2695: Left side of comma operator is unused and has no side effects. +circularInitializerInference.ts(9,20): error TS2695: Left side of comma operator is unused and has no side effects. +circularInitializerInference.ts(12,5): error TS7022: 'assignment' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. +circularInitializerInference.ts(15,5): error TS7022: 'nestedAssignment' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. +circularInitializerInference.ts(18,5): error TS7022: 'conditional' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. +circularInitializerInference.ts(21,5): error TS7022: 'logicalAnd' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. +circularInitializerInference.ts(24,5): error TS7022: 'propertyAccess' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. + + +==== circularInitializerInference.ts (10 errors) ==== + export {}; + + type IsAny = 0 extends (1 & Type) ? true : false; + type Assert = Condition; + + var comma = (comma, 3); + ~~~~~ +!!! error TS7022: 'comma' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. + ~~~~~ +!!! error TS2695: Left side of comma operator is unused and has no side effects. + type CommaInference = Assert>; + + var nestedComma = (comma, nestedComma, comma); + ~~~~~~~~~~~ +!!! error TS7022: 'nestedComma' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. + ~~~~~ +!!! error TS2695: Left side of comma operator is unused and has no side effects. + ~~~~~~~~~~~~~~~~~~ +!!! error TS2695: Left side of comma operator is unused and has no side effects. + type NestedCommaInference = Assert>; + + var assignment = (assignment = 2); + ~~~~~~~~~~ +!!! error TS7022: 'assignment' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. + type AssignmentInference = Assert>; + + var nestedAssignment = (nestedAssignment = nestedAssignment = 2); + ~~~~~~~~~~~~~~~~ +!!! error TS7022: 'nestedAssignment' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. + type NestedAssignmentInference = Assert>; + + var conditional = conditional ? 0 : 1; + ~~~~~~~~~~~ +!!! error TS7022: 'conditional' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. + type ConditionalInference = Assert>; + + var logicalAnd = logicalAnd && ""; + ~~~~~~~~~~ +!!! error TS7022: 'logicalAnd' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. + type LogicalAndInference = Assert>; + + var propertyAccess = { member: propertyAccess.member }; + ~~~~~~~~~~~~~~ +!!! error TS7022: 'propertyAccess' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. + type PropertyAccessInference = Assert>; + + const nonCircular: number = 3; + type NonCircularInference = Assert extends false ? true : false>; \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=true).js b/tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=true).js new file mode 100644 index 0000000000000..6b1e6c702f422 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=true).js @@ -0,0 +1,42 @@ +//// [tests/cases/compiler/circularInitializerInference.ts] //// + +//// [circularInitializerInference.ts] +export {}; + +type IsAny = 0 extends (1 & Type) ? true : false; +type Assert = Condition; + +var comma = (comma, 3); +type CommaInference = Assert>; + +var nestedComma = (comma, nestedComma, comma); +type NestedCommaInference = Assert>; + +var assignment = (assignment = 2); +type AssignmentInference = Assert>; + +var nestedAssignment = (nestedAssignment = nestedAssignment = 2); +type NestedAssignmentInference = Assert>; + +var conditional = conditional ? 0 : 1; +type ConditionalInference = Assert>; + +var logicalAnd = logicalAnd && ""; +type LogicalAndInference = Assert>; + +var propertyAccess = { member: propertyAccess.member }; +type PropertyAccessInference = Assert>; + +const nonCircular: number = 3; +type NonCircularInference = Assert extends false ? true : false>; + +//// [circularInitializerInference.js] +var comma = (comma, 3); +var nestedComma = (comma, nestedComma, comma); +var assignment = (assignment = 2); +var nestedAssignment = (nestedAssignment = nestedAssignment = 2); +var conditional = conditional ? 0 : 1; +var logicalAnd = logicalAnd && ""; +var propertyAccess = { member: propertyAccess.member }; +const nonCircular = 3; +export {}; diff --git a/tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=true).symbols b/tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=true).symbols new file mode 100644 index 0000000000000..7146dd252c8ef --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=true).symbols @@ -0,0 +1,98 @@ +//// [tests/cases/compiler/circularInitializerInference.ts] //// + +=== circularInitializerInference.ts === +export {}; + +type IsAny = 0 extends (1 & Type) ? true : false; +>IsAny : Symbol(IsAny, Decl(circularInitializerInference.ts, 0, 10)) +>Type : Symbol(Type, Decl(circularInitializerInference.ts, 2, 11)) +>Type : Symbol(Type, Decl(circularInitializerInference.ts, 2, 11)) + +type Assert = Condition; +>Assert : Symbol(Assert, Decl(circularInitializerInference.ts, 2, 55)) +>Condition : Symbol(Condition, Decl(circularInitializerInference.ts, 3, 12)) +>Condition : Symbol(Condition, Decl(circularInitializerInference.ts, 3, 12)) + +var comma = (comma, 3); +>comma : Symbol(comma, Decl(circularInitializerInference.ts, 5, 3)) +>comma : Symbol(comma, Decl(circularInitializerInference.ts, 5, 3)) + +type CommaInference = Assert>; +>CommaInference : Symbol(CommaInference, Decl(circularInitializerInference.ts, 5, 23)) +>Assert : Symbol(Assert, Decl(circularInitializerInference.ts, 2, 55)) +>IsAny : Symbol(IsAny, Decl(circularInitializerInference.ts, 0, 10)) +>comma : Symbol(comma, Decl(circularInitializerInference.ts, 5, 3)) + +var nestedComma = (comma, nestedComma, comma); +>nestedComma : Symbol(nestedComma, Decl(circularInitializerInference.ts, 8, 3)) +>comma : Symbol(comma, Decl(circularInitializerInference.ts, 5, 3)) +>nestedComma : Symbol(nestedComma, Decl(circularInitializerInference.ts, 8, 3)) +>comma : Symbol(comma, Decl(circularInitializerInference.ts, 5, 3)) + +type NestedCommaInference = Assert>; +>NestedCommaInference : Symbol(NestedCommaInference, Decl(circularInitializerInference.ts, 8, 46)) +>Assert : Symbol(Assert, Decl(circularInitializerInference.ts, 2, 55)) +>IsAny : Symbol(IsAny, Decl(circularInitializerInference.ts, 0, 10)) +>nestedComma : Symbol(nestedComma, Decl(circularInitializerInference.ts, 8, 3)) + +var assignment = (assignment = 2); +>assignment : Symbol(assignment, Decl(circularInitializerInference.ts, 11, 3)) +>assignment : Symbol(assignment, Decl(circularInitializerInference.ts, 11, 3)) + +type AssignmentInference = Assert>; +>AssignmentInference : Symbol(AssignmentInference, Decl(circularInitializerInference.ts, 11, 34)) +>Assert : Symbol(Assert, Decl(circularInitializerInference.ts, 2, 55)) +>IsAny : Symbol(IsAny, Decl(circularInitializerInference.ts, 0, 10)) +>assignment : Symbol(assignment, Decl(circularInitializerInference.ts, 11, 3)) + +var nestedAssignment = (nestedAssignment = nestedAssignment = 2); +>nestedAssignment : Symbol(nestedAssignment, Decl(circularInitializerInference.ts, 14, 3)) +>nestedAssignment : Symbol(nestedAssignment, Decl(circularInitializerInference.ts, 14, 3)) +>nestedAssignment : Symbol(nestedAssignment, Decl(circularInitializerInference.ts, 14, 3)) + +type NestedAssignmentInference = Assert>; +>NestedAssignmentInference : Symbol(NestedAssignmentInference, Decl(circularInitializerInference.ts, 14, 65)) +>Assert : Symbol(Assert, Decl(circularInitializerInference.ts, 2, 55)) +>IsAny : Symbol(IsAny, Decl(circularInitializerInference.ts, 0, 10)) +>nestedAssignment : Symbol(nestedAssignment, Decl(circularInitializerInference.ts, 14, 3)) + +var conditional = conditional ? 0 : 1; +>conditional : Symbol(conditional, Decl(circularInitializerInference.ts, 17, 3)) +>conditional : Symbol(conditional, Decl(circularInitializerInference.ts, 17, 3)) + +type ConditionalInference = Assert>; +>ConditionalInference : Symbol(ConditionalInference, Decl(circularInitializerInference.ts, 17, 38)) +>Assert : Symbol(Assert, Decl(circularInitializerInference.ts, 2, 55)) +>IsAny : Symbol(IsAny, Decl(circularInitializerInference.ts, 0, 10)) +>conditional : Symbol(conditional, Decl(circularInitializerInference.ts, 17, 3)) + +var logicalAnd = logicalAnd && ""; +>logicalAnd : Symbol(logicalAnd, Decl(circularInitializerInference.ts, 20, 3)) +>logicalAnd : Symbol(logicalAnd, Decl(circularInitializerInference.ts, 20, 3)) + +type LogicalAndInference = Assert>; +>LogicalAndInference : Symbol(LogicalAndInference, Decl(circularInitializerInference.ts, 20, 34)) +>Assert : Symbol(Assert, Decl(circularInitializerInference.ts, 2, 55)) +>IsAny : Symbol(IsAny, Decl(circularInitializerInference.ts, 0, 10)) +>logicalAnd : Symbol(logicalAnd, Decl(circularInitializerInference.ts, 20, 3)) + +var propertyAccess = { member: propertyAccess.member }; +>propertyAccess : Symbol(propertyAccess, Decl(circularInitializerInference.ts, 23, 3)) +>member : Symbol(member, Decl(circularInitializerInference.ts, 23, 22)) +>propertyAccess : Symbol(propertyAccess, Decl(circularInitializerInference.ts, 23, 3)) + +type PropertyAccessInference = Assert>; +>PropertyAccessInference : Symbol(PropertyAccessInference, Decl(circularInitializerInference.ts, 23, 55)) +>Assert : Symbol(Assert, Decl(circularInitializerInference.ts, 2, 55)) +>IsAny : Symbol(IsAny, Decl(circularInitializerInference.ts, 0, 10)) +>propertyAccess : Symbol(propertyAccess, Decl(circularInitializerInference.ts, 23, 3)) + +const nonCircular: number = 3; +>nonCircular : Symbol(nonCircular, Decl(circularInitializerInference.ts, 26, 5)) + +type NonCircularInference = Assert extends false ? true : false>; +>NonCircularInference : Symbol(NonCircularInference, Decl(circularInitializerInference.ts, 26, 30)) +>Assert : Symbol(Assert, Decl(circularInitializerInference.ts, 2, 55)) +>IsAny : Symbol(IsAny, Decl(circularInitializerInference.ts, 0, 10)) +>nonCircular : Symbol(nonCircular, Decl(circularInitializerInference.ts, 26, 5)) + diff --git a/tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=true).types b/tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=true).types new file mode 100644 index 0000000000000..93d72c091cab5 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularInitializerInference(strict=true).types @@ -0,0 +1,106 @@ +//// [tests/cases/compiler/circularInitializerInference.ts] //// + +=== circularInitializerInference.ts === +export {}; + +type IsAny = 0 extends (1 & Type) ? true : false; +>IsAny : IsAny +>true : true +>false : false + +type Assert = Condition; +>Assert : Condition +>true : true + +var comma = (comma, 3); +>comma : any +>(comma, 3) : 3 +>comma, 3 : 3 +>comma : any +>3 : 3 + +type CommaInference = Assert>; +>CommaInference : true +>comma : any + +var nestedComma = (comma, nestedComma, comma); +>nestedComma : any +>(comma, nestedComma, comma) : any +>comma, nestedComma, comma : any +>comma, nestedComma : any +>comma : any +>nestedComma : any +>comma : any + +type NestedCommaInference = Assert>; +>NestedCommaInference : true +>nestedComma : any + +var assignment = (assignment = 2); +>assignment : any +>(assignment = 2) : 2 +>assignment = 2 : 2 +>assignment : any +>2 : 2 + +type AssignmentInference = Assert>; +>AssignmentInference : true +>assignment : any + +var nestedAssignment = (nestedAssignment = nestedAssignment = 2); +>nestedAssignment : any +>(nestedAssignment = nestedAssignment = 2) : 2 +>nestedAssignment = nestedAssignment = 2 : 2 +>nestedAssignment : any +>nestedAssignment = 2 : 2 +>nestedAssignment : any +>2 : 2 + +type NestedAssignmentInference = Assert>; +>NestedAssignmentInference : true +>nestedAssignment : any + +var conditional = conditional ? 0 : 1; +>conditional : any +>conditional ? 0 : 1 : 0 | 1 +>conditional : any +>0 : 0 +>1 : 1 + +type ConditionalInference = Assert>; +>ConditionalInference : true +>conditional : any + +var logicalAnd = logicalAnd && ""; +>logicalAnd : any +>logicalAnd && "" : any +>logicalAnd : any +>"" : "" + +type LogicalAndInference = Assert>; +>LogicalAndInference : true +>logicalAnd : any + +var propertyAccess = { member: propertyAccess.member }; +>propertyAccess : any +>{ member: propertyAccess.member } : { member: any; } +>member : any +>propertyAccess.member : any +>propertyAccess : any +>member : any + +type PropertyAccessInference = Assert>; +>PropertyAccessInference : true +>propertyAccess : any + +const nonCircular: number = 3; +>nonCircular : number +>3 : 3 + +type NonCircularInference = Assert extends false ? true : false>; +>NonCircularInference : true +>nonCircular : number +>false : false +>true : true +>false : false + diff --git a/tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=false).errors.txt b/tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=false).errors.txt new file mode 100644 index 0000000000000..e6a85a2793754 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=false).errors.txt @@ -0,0 +1,80 @@ +classCircularityDiagnostics.ts(1,7): error TS2506: 'Direct' is referenced directly or indirectly in its own base expression. +classCircularityDiagnostics.ts(9,7): error TS2506: 'First' is referenced directly or indirectly in its own base expression. +classCircularityDiagnostics.ts(9,21): error TS2449: Class 'Second' used before its declaration. +classCircularityDiagnostics.ts(10,7): error TS2506: 'Second' is referenced directly or indirectly in its own base expression. +classCircularityDiagnostics.ts(12,26): error TS2506: 'Named' is referenced directly or indirectly in its own base expression. +classCircularityDiagnostics.ts(23,16): error TS2448: Block-scoped variable 'SelfReferencingBase' used before its declaration. +classCircularityDiagnostics.ts(41,44): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. +classCircularityDiagnostics.ts(42,58): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. +classCircularityDiagnostics.ts(45,34): error TS2507: Type 'number' is not a constructor function type. +classCircularityDiagnostics.ts(45,50): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. + + +==== classCircularityDiagnostics.ts (10 errors) ==== + class Direct extends Direct { + ~~~~~~ +!!! error TS2506: 'Direct' is referenced directly or indirectly in its own base expression. + static value = 1; + value = 2; + } + + const staticValue = Direct.value; + const instanceValue = new Direct().value; + + class First extends Second {} + ~~~~~ +!!! error TS2506: 'First' is referenced directly or indirectly in its own base expression. + ~~~~~~ +!!! error TS2449: Class 'Second' used before its declaration. +!!! related TS2728 classCircularityDiagnostics.ts:10:7: 'Second' is declared here. + class Second extends First {} + ~~~~~~ +!!! error TS2506: 'Second' is referenced directly or indirectly in its own base expression. + + const Expression = class Named extends Named {}; + ~~~~~ +!!! error TS2506: 'Named' is referenced directly or indirectly in its own base expression. + + class NestedBase extends (class { + static value = 1; + value = 2; + }) {} + + const nestedStaticValue: number = NestedBase.value; + const nestedInstanceValue: number = new NestedBase().value; + + const SelfReferencingBase = class extends (class { + static self = SelfReferencingBase; + ~~~~~~~~~~~~~~~~~~~ +!!! error TS2448: Block-scoped variable 'SelfReferencingBase' used before its declaration. +!!! related TS2728 classCircularityDiagnostics.ts:22:7: 'SelfReferencingBase' is declared here. + }) {}; + + const selfConstructor = SelfReferencingBase.self; + + function mixin {}>(base: Base) { + return class extends base { + static value = 1; + value = 2; + }; + } + + class Mixed extends mixin(NestedBase) {} + + const mixedStaticValue: number = Mixed.value; + const mixedInstanceValue: number = new Mixed().value; + + declare function makeBase(value: number): typeof NestedBase; + class InvalidBaseArgument extends makeBase("invalid") {} + ~~~~~~~~~ +!!! error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. + const InvalidExpressionArgument = class extends makeBase("invalid") {}; + ~~~~~~~~~ +!!! error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. + + declare function makeInvalidBase(value: number): number; + class InvalidConstructor extends makeInvalidBase("invalid") {} + ~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2507: Type 'number' is not a constructor function type. + ~~~~~~~~~ +!!! error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=false).js b/tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=false).js new file mode 100644 index 0000000000000..2ff93ac2eb65b --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=false).js @@ -0,0 +1,91 @@ +//// [tests/cases/compiler/classCircularityDiagnostics.ts] //// + +//// [classCircularityDiagnostics.ts] +class Direct extends Direct { + static value = 1; + value = 2; +} + +const staticValue = Direct.value; +const instanceValue = new Direct().value; + +class First extends Second {} +class Second extends First {} + +const Expression = class Named extends Named {}; + +class NestedBase extends (class { + static value = 1; + value = 2; +}) {} + +const nestedStaticValue: number = NestedBase.value; +const nestedInstanceValue: number = new NestedBase().value; + +const SelfReferencingBase = class extends (class { + static self = SelfReferencingBase; +}) {}; + +const selfConstructor = SelfReferencingBase.self; + +function mixin {}>(base: Base) { + return class extends base { + static value = 1; + value = 2; + }; +} + +class Mixed extends mixin(NestedBase) {} + +const mixedStaticValue: number = Mixed.value; +const mixedInstanceValue: number = new Mixed().value; + +declare function makeBase(value: number): typeof NestedBase; +class InvalidBaseArgument extends makeBase("invalid") {} +const InvalidExpressionArgument = class extends makeBase("invalid") {}; + +declare function makeInvalidBase(value: number): number; +class InvalidConstructor extends makeInvalidBase("invalid") {} + +//// [classCircularityDiagnostics.js] +"use strict"; +class Direct extends Direct { + static value = 1; + value = 2; +} +const staticValue = Direct.value; +const instanceValue = new Direct().value; +class First extends Second { +} +class Second extends First { +} +const Expression = class Named extends Named { +}; +class NestedBase extends (class { + static value = 1; + value = 2; +}) { +} +const nestedStaticValue = NestedBase.value; +const nestedInstanceValue = new NestedBase().value; +const SelfReferencingBase = class extends (class { + static self = SelfReferencingBase; +}) { +}; +const selfConstructor = SelfReferencingBase.self; +function mixin(base) { + return class extends base { + static value = 1; + value = 2; + }; +} +class Mixed extends mixin(NestedBase) { +} +const mixedStaticValue = Mixed.value; +const mixedInstanceValue = new Mixed().value; +class InvalidBaseArgument extends makeBase("invalid") { +} +const InvalidExpressionArgument = class extends makeBase("invalid") { +}; +class InvalidConstructor extends makeInvalidBase("invalid") { +} diff --git a/tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=false).symbols b/tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=false).symbols new file mode 100644 index 0000000000000..9e892a1edd0ab --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=false).symbols @@ -0,0 +1,134 @@ +//// [tests/cases/compiler/classCircularityDiagnostics.ts] //// + +=== classCircularityDiagnostics.ts === +class Direct extends Direct { +>Direct : Symbol(Direct, Decl(classCircularityDiagnostics.ts, 0, 0)) +>Direct : Symbol(Direct, Decl(classCircularityDiagnostics.ts, 0, 0)) + + static value = 1; +>value : Symbol(Direct.value, Decl(classCircularityDiagnostics.ts, 0, 29)) + + value = 2; +>value : Symbol(Direct.value, Decl(classCircularityDiagnostics.ts, 1, 18)) +} + +const staticValue = Direct.value; +>staticValue : Symbol(staticValue, Decl(classCircularityDiagnostics.ts, 5, 5)) +>Direct.value : Symbol(Direct.value, Decl(classCircularityDiagnostics.ts, 0, 29)) +>Direct : Symbol(Direct, Decl(classCircularityDiagnostics.ts, 0, 0)) +>value : Symbol(Direct.value, Decl(classCircularityDiagnostics.ts, 0, 29)) + +const instanceValue = new Direct().value; +>instanceValue : Symbol(instanceValue, Decl(classCircularityDiagnostics.ts, 6, 5)) +>new Direct().value : Symbol(Direct.value, Decl(classCircularityDiagnostics.ts, 1, 18)) +>Direct : Symbol(Direct, Decl(classCircularityDiagnostics.ts, 0, 0)) +>value : Symbol(Direct.value, Decl(classCircularityDiagnostics.ts, 1, 18)) + +class First extends Second {} +>First : Symbol(First, Decl(classCircularityDiagnostics.ts, 6, 41)) +>Second : Symbol(Second, Decl(classCircularityDiagnostics.ts, 8, 29)) + +class Second extends First {} +>Second : Symbol(Second, Decl(classCircularityDiagnostics.ts, 8, 29)) +>First : Symbol(First, Decl(classCircularityDiagnostics.ts, 6, 41)) + +const Expression = class Named extends Named {}; +>Expression : Symbol(Expression, Decl(classCircularityDiagnostics.ts, 11, 5)) +>Named : Symbol(Named, Decl(classCircularityDiagnostics.ts, 11, 18)) +>Named : Symbol(Named, Decl(classCircularityDiagnostics.ts, 11, 18)) + +class NestedBase extends (class { +>NestedBase : Symbol(NestedBase, Decl(classCircularityDiagnostics.ts, 11, 48)) + + static value = 1; +>value : Symbol((Anonymous class).value, Decl(classCircularityDiagnostics.ts, 13, 33)) + + value = 2; +>value : Symbol((Anonymous class).value, Decl(classCircularityDiagnostics.ts, 14, 18)) + +}) {} + +const nestedStaticValue: number = NestedBase.value; +>nestedStaticValue : Symbol(nestedStaticValue, Decl(classCircularityDiagnostics.ts, 18, 5)) +>NestedBase.value : Symbol((Anonymous class).value, Decl(classCircularityDiagnostics.ts, 13, 33)) +>NestedBase : Symbol(NestedBase, Decl(classCircularityDiagnostics.ts, 11, 48)) +>value : Symbol((Anonymous class).value, Decl(classCircularityDiagnostics.ts, 13, 33)) + +const nestedInstanceValue: number = new NestedBase().value; +>nestedInstanceValue : Symbol(nestedInstanceValue, Decl(classCircularityDiagnostics.ts, 19, 5)) +>new NestedBase().value : Symbol((Anonymous class).value, Decl(classCircularityDiagnostics.ts, 14, 18)) +>NestedBase : Symbol(NestedBase, Decl(classCircularityDiagnostics.ts, 11, 48)) +>value : Symbol((Anonymous class).value, Decl(classCircularityDiagnostics.ts, 14, 18)) + +const SelfReferencingBase = class extends (class { +>SelfReferencingBase : Symbol(SelfReferencingBase, Decl(classCircularityDiagnostics.ts, 21, 5)) + + static self = SelfReferencingBase; +>self : Symbol((Anonymous class).self, Decl(classCircularityDiagnostics.ts, 21, 50)) +>SelfReferencingBase : Symbol(SelfReferencingBase, Decl(classCircularityDiagnostics.ts, 21, 5)) + +}) {}; + +const selfConstructor = SelfReferencingBase.self; +>selfConstructor : Symbol(selfConstructor, Decl(classCircularityDiagnostics.ts, 25, 5)) +>SelfReferencingBase.self : Symbol((Anonymous class).self, Decl(classCircularityDiagnostics.ts, 21, 50)) +>SelfReferencingBase : Symbol(SelfReferencingBase, Decl(classCircularityDiagnostics.ts, 21, 5)) +>self : Symbol((Anonymous class).self, Decl(classCircularityDiagnostics.ts, 21, 50)) + +function mixin {}>(base: Base) { +>mixin : Symbol(mixin, Decl(classCircularityDiagnostics.ts, 25, 49)) +>Base : Symbol(Base, Decl(classCircularityDiagnostics.ts, 27, 15)) +>args : Symbol(args, Decl(classCircularityDiagnostics.ts, 27, 33)) +>base : Symbol(base, Decl(classCircularityDiagnostics.ts, 27, 56)) +>Base : Symbol(Base, Decl(classCircularityDiagnostics.ts, 27, 15)) + + return class extends base { +>base : Symbol(base, Decl(classCircularityDiagnostics.ts, 27, 56)) + + static value = 1; +>value : Symbol((Anonymous class).value, Decl(classCircularityDiagnostics.ts, 28, 28)) + + value = 2; +>value : Symbol((Anonymous class).value, Decl(classCircularityDiagnostics.ts, 29, 19)) + + }; +} + +class Mixed extends mixin(NestedBase) {} +>Mixed : Symbol(Mixed, Decl(classCircularityDiagnostics.ts, 32, 1)) +>mixin : Symbol(mixin, Decl(classCircularityDiagnostics.ts, 25, 49)) +>NestedBase : Symbol(NestedBase, Decl(classCircularityDiagnostics.ts, 11, 48)) + +const mixedStaticValue: number = Mixed.value; +>mixedStaticValue : Symbol(mixedStaticValue, Decl(classCircularityDiagnostics.ts, 36, 5)) +>Mixed.value : Symbol(value, Decl(classCircularityDiagnostics.ts, 28, 28), Decl(classCircularityDiagnostics.ts, 13, 33)) +>Mixed : Symbol(Mixed, Decl(classCircularityDiagnostics.ts, 32, 1)) +>value : Symbol(value, Decl(classCircularityDiagnostics.ts, 28, 28), Decl(classCircularityDiagnostics.ts, 13, 33)) + +const mixedInstanceValue: number = new Mixed().value; +>mixedInstanceValue : Symbol(mixedInstanceValue, Decl(classCircularityDiagnostics.ts, 37, 5)) +>new Mixed().value : Symbol(value, Decl(classCircularityDiagnostics.ts, 29, 19), Decl(classCircularityDiagnostics.ts, 14, 18)) +>Mixed : Symbol(Mixed, Decl(classCircularityDiagnostics.ts, 32, 1)) +>value : Symbol(value, Decl(classCircularityDiagnostics.ts, 29, 19), Decl(classCircularityDiagnostics.ts, 14, 18)) + +declare function makeBase(value: number): typeof NestedBase; +>makeBase : Symbol(makeBase, Decl(classCircularityDiagnostics.ts, 37, 53)) +>value : Symbol(value, Decl(classCircularityDiagnostics.ts, 39, 26)) +>NestedBase : Symbol(NestedBase, Decl(classCircularityDiagnostics.ts, 11, 48)) + +class InvalidBaseArgument extends makeBase("invalid") {} +>InvalidBaseArgument : Symbol(InvalidBaseArgument, Decl(classCircularityDiagnostics.ts, 39, 60)) +>makeBase : Symbol(makeBase, Decl(classCircularityDiagnostics.ts, 37, 53)) + +const InvalidExpressionArgument = class extends makeBase("invalid") {}; +>InvalidExpressionArgument : Symbol(InvalidExpressionArgument, Decl(classCircularityDiagnostics.ts, 41, 5)) +>makeBase : Symbol(makeBase, Decl(classCircularityDiagnostics.ts, 37, 53)) + +declare function makeInvalidBase(value: number): number; +>makeInvalidBase : Symbol(makeInvalidBase, Decl(classCircularityDiagnostics.ts, 41, 71)) +>value : Symbol(value, Decl(classCircularityDiagnostics.ts, 43, 33)) + +class InvalidConstructor extends makeInvalidBase("invalid") {} +>InvalidConstructor : Symbol(InvalidConstructor, Decl(classCircularityDiagnostics.ts, 43, 56)) +>makeInvalidBase : Symbol(makeInvalidBase, Decl(classCircularityDiagnostics.ts, 41, 71)) + diff --git a/tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=false).types b/tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=false).types new file mode 100644 index 0000000000000..0b46eec400402 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=false).types @@ -0,0 +1,156 @@ +//// [tests/cases/compiler/classCircularityDiagnostics.ts] //// + +=== classCircularityDiagnostics.ts === +class Direct extends Direct { +>Direct : Direct +>Direct : typeof Direct + + static value = 1; +>value : number +>1 : 1 + + value = 2; +>value : number +>2 : 2 +} + +const staticValue = Direct.value; +>staticValue : number +>Direct.value : number +>Direct : typeof Direct +>value : number + +const instanceValue = new Direct().value; +>instanceValue : number +>new Direct().value : number +>new Direct() : Direct +>Direct : typeof Direct +>value : number + +class First extends Second {} +>First : First +>Second : typeof Second + +class Second extends First {} +>Second : Second +>First : typeof First + +const Expression = class Named extends Named {}; +>Expression : typeof Named +>class Named extends Named {} : typeof Named +>Named : typeof Named +>Named : typeof Named + +class NestedBase extends (class { +>NestedBase : NestedBase +>(class { static value = 1; value = 2;}) : (Anonymous class) +>class { static value = 1; value = 2;} : typeof (Anonymous class) + + static value = 1; +>value : number +>1 : 1 + + value = 2; +>value : number +>2 : 2 + +}) {} + +const nestedStaticValue: number = NestedBase.value; +>nestedStaticValue : number +>NestedBase.value : number +>NestedBase : typeof NestedBase +>value : number + +const nestedInstanceValue: number = new NestedBase().value; +>nestedInstanceValue : number +>new NestedBase().value : number +>new NestedBase() : NestedBase +>NestedBase : typeof NestedBase +>value : number + +const SelfReferencingBase = class extends (class { +>SelfReferencingBase : typeof SelfReferencingBase +>class extends (class { static self = SelfReferencingBase;}) {} : typeof SelfReferencingBase +>(class { static self = SelfReferencingBase;}) : (Anonymous class) +>class { static self = SelfReferencingBase;} : typeof (Anonymous class) + + static self = SelfReferencingBase; +>self : typeof SelfReferencingBase +>SelfReferencingBase : typeof SelfReferencingBase + +}) {}; + +const selfConstructor = SelfReferencingBase.self; +>selfConstructor : typeof SelfReferencingBase +>SelfReferencingBase.self : typeof SelfReferencingBase +>SelfReferencingBase : typeof SelfReferencingBase +>self : typeof SelfReferencingBase + +function mixin {}>(base: Base) { +>mixin : {}>(base: Base) => { new (...args: any[]): (Anonymous class); value: number; prototype: mixin.(Anonymous class); } & Base +>args : any[] +>base : Base + + return class extends base { +>class extends base { static value = 1; value = 2; } : { new (...args: any[]): (Anonymous class); value: number; prototype: mixin.(Anonymous class); } & Base +>base : {} + + static value = 1; +>value : number +>1 : 1 + + value = 2; +>value : number +>2 : 2 + + }; +} + +class Mixed extends mixin(NestedBase) {} +>Mixed : Mixed +>mixin(NestedBase) : mixin.(Anonymous class) & NestedBase +>mixin : {}>(base: Base) => { new (...args: any[]): (Anonymous class); value: number; prototype: mixin.(Anonymous class); } & Base +>NestedBase : typeof NestedBase + +const mixedStaticValue: number = Mixed.value; +>mixedStaticValue : number +>Mixed.value : number +>Mixed : typeof Mixed +>value : number + +const mixedInstanceValue: number = new Mixed().value; +>mixedInstanceValue : number +>new Mixed().value : number +>new Mixed() : Mixed +>Mixed : typeof Mixed +>value : number + +declare function makeBase(value: number): typeof NestedBase; +>makeBase : (value: number) => typeof NestedBase +>value : number +>NestedBase : typeof NestedBase + +class InvalidBaseArgument extends makeBase("invalid") {} +>InvalidBaseArgument : InvalidBaseArgument +>makeBase("invalid") : NestedBase +>makeBase : (value: number) => typeof NestedBase +>"invalid" : "invalid" + +const InvalidExpressionArgument = class extends makeBase("invalid") {}; +>InvalidExpressionArgument : typeof InvalidExpressionArgument +>class extends makeBase("invalid") {} : typeof InvalidExpressionArgument +>makeBase("invalid") : NestedBase +>makeBase : (value: number) => typeof NestedBase +>"invalid" : "invalid" + +declare function makeInvalidBase(value: number): number; +>makeInvalidBase : (value: number) => number +>value : number + +class InvalidConstructor extends makeInvalidBase("invalid") {} +>InvalidConstructor : InvalidConstructor +>makeInvalidBase("invalid") : number +>makeInvalidBase : (value: number) => number +>"invalid" : "invalid" + diff --git a/tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=true).errors.txt b/tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=true).errors.txt new file mode 100644 index 0000000000000..e6a85a2793754 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=true).errors.txt @@ -0,0 +1,80 @@ +classCircularityDiagnostics.ts(1,7): error TS2506: 'Direct' is referenced directly or indirectly in its own base expression. +classCircularityDiagnostics.ts(9,7): error TS2506: 'First' is referenced directly or indirectly in its own base expression. +classCircularityDiagnostics.ts(9,21): error TS2449: Class 'Second' used before its declaration. +classCircularityDiagnostics.ts(10,7): error TS2506: 'Second' is referenced directly or indirectly in its own base expression. +classCircularityDiagnostics.ts(12,26): error TS2506: 'Named' is referenced directly or indirectly in its own base expression. +classCircularityDiagnostics.ts(23,16): error TS2448: Block-scoped variable 'SelfReferencingBase' used before its declaration. +classCircularityDiagnostics.ts(41,44): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. +classCircularityDiagnostics.ts(42,58): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. +classCircularityDiagnostics.ts(45,34): error TS2507: Type 'number' is not a constructor function type. +classCircularityDiagnostics.ts(45,50): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. + + +==== classCircularityDiagnostics.ts (10 errors) ==== + class Direct extends Direct { + ~~~~~~ +!!! error TS2506: 'Direct' is referenced directly or indirectly in its own base expression. + static value = 1; + value = 2; + } + + const staticValue = Direct.value; + const instanceValue = new Direct().value; + + class First extends Second {} + ~~~~~ +!!! error TS2506: 'First' is referenced directly or indirectly in its own base expression. + ~~~~~~ +!!! error TS2449: Class 'Second' used before its declaration. +!!! related TS2728 classCircularityDiagnostics.ts:10:7: 'Second' is declared here. + class Second extends First {} + ~~~~~~ +!!! error TS2506: 'Second' is referenced directly or indirectly in its own base expression. + + const Expression = class Named extends Named {}; + ~~~~~ +!!! error TS2506: 'Named' is referenced directly or indirectly in its own base expression. + + class NestedBase extends (class { + static value = 1; + value = 2; + }) {} + + const nestedStaticValue: number = NestedBase.value; + const nestedInstanceValue: number = new NestedBase().value; + + const SelfReferencingBase = class extends (class { + static self = SelfReferencingBase; + ~~~~~~~~~~~~~~~~~~~ +!!! error TS2448: Block-scoped variable 'SelfReferencingBase' used before its declaration. +!!! related TS2728 classCircularityDiagnostics.ts:22:7: 'SelfReferencingBase' is declared here. + }) {}; + + const selfConstructor = SelfReferencingBase.self; + + function mixin {}>(base: Base) { + return class extends base { + static value = 1; + value = 2; + }; + } + + class Mixed extends mixin(NestedBase) {} + + const mixedStaticValue: number = Mixed.value; + const mixedInstanceValue: number = new Mixed().value; + + declare function makeBase(value: number): typeof NestedBase; + class InvalidBaseArgument extends makeBase("invalid") {} + ~~~~~~~~~ +!!! error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. + const InvalidExpressionArgument = class extends makeBase("invalid") {}; + ~~~~~~~~~ +!!! error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. + + declare function makeInvalidBase(value: number): number; + class InvalidConstructor extends makeInvalidBase("invalid") {} + ~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2507: Type 'number' is not a constructor function type. + ~~~~~~~~~ +!!! error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=true).js b/tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=true).js new file mode 100644 index 0000000000000..2ff93ac2eb65b --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=true).js @@ -0,0 +1,91 @@ +//// [tests/cases/compiler/classCircularityDiagnostics.ts] //// + +//// [classCircularityDiagnostics.ts] +class Direct extends Direct { + static value = 1; + value = 2; +} + +const staticValue = Direct.value; +const instanceValue = new Direct().value; + +class First extends Second {} +class Second extends First {} + +const Expression = class Named extends Named {}; + +class NestedBase extends (class { + static value = 1; + value = 2; +}) {} + +const nestedStaticValue: number = NestedBase.value; +const nestedInstanceValue: number = new NestedBase().value; + +const SelfReferencingBase = class extends (class { + static self = SelfReferencingBase; +}) {}; + +const selfConstructor = SelfReferencingBase.self; + +function mixin {}>(base: Base) { + return class extends base { + static value = 1; + value = 2; + }; +} + +class Mixed extends mixin(NestedBase) {} + +const mixedStaticValue: number = Mixed.value; +const mixedInstanceValue: number = new Mixed().value; + +declare function makeBase(value: number): typeof NestedBase; +class InvalidBaseArgument extends makeBase("invalid") {} +const InvalidExpressionArgument = class extends makeBase("invalid") {}; + +declare function makeInvalidBase(value: number): number; +class InvalidConstructor extends makeInvalidBase("invalid") {} + +//// [classCircularityDiagnostics.js] +"use strict"; +class Direct extends Direct { + static value = 1; + value = 2; +} +const staticValue = Direct.value; +const instanceValue = new Direct().value; +class First extends Second { +} +class Second extends First { +} +const Expression = class Named extends Named { +}; +class NestedBase extends (class { + static value = 1; + value = 2; +}) { +} +const nestedStaticValue = NestedBase.value; +const nestedInstanceValue = new NestedBase().value; +const SelfReferencingBase = class extends (class { + static self = SelfReferencingBase; +}) { +}; +const selfConstructor = SelfReferencingBase.self; +function mixin(base) { + return class extends base { + static value = 1; + value = 2; + }; +} +class Mixed extends mixin(NestedBase) { +} +const mixedStaticValue = Mixed.value; +const mixedInstanceValue = new Mixed().value; +class InvalidBaseArgument extends makeBase("invalid") { +} +const InvalidExpressionArgument = class extends makeBase("invalid") { +}; +class InvalidConstructor extends makeInvalidBase("invalid") { +} diff --git a/tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=true).symbols b/tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=true).symbols new file mode 100644 index 0000000000000..9e892a1edd0ab --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=true).symbols @@ -0,0 +1,134 @@ +//// [tests/cases/compiler/classCircularityDiagnostics.ts] //// + +=== classCircularityDiagnostics.ts === +class Direct extends Direct { +>Direct : Symbol(Direct, Decl(classCircularityDiagnostics.ts, 0, 0)) +>Direct : Symbol(Direct, Decl(classCircularityDiagnostics.ts, 0, 0)) + + static value = 1; +>value : Symbol(Direct.value, Decl(classCircularityDiagnostics.ts, 0, 29)) + + value = 2; +>value : Symbol(Direct.value, Decl(classCircularityDiagnostics.ts, 1, 18)) +} + +const staticValue = Direct.value; +>staticValue : Symbol(staticValue, Decl(classCircularityDiagnostics.ts, 5, 5)) +>Direct.value : Symbol(Direct.value, Decl(classCircularityDiagnostics.ts, 0, 29)) +>Direct : Symbol(Direct, Decl(classCircularityDiagnostics.ts, 0, 0)) +>value : Symbol(Direct.value, Decl(classCircularityDiagnostics.ts, 0, 29)) + +const instanceValue = new Direct().value; +>instanceValue : Symbol(instanceValue, Decl(classCircularityDiagnostics.ts, 6, 5)) +>new Direct().value : Symbol(Direct.value, Decl(classCircularityDiagnostics.ts, 1, 18)) +>Direct : Symbol(Direct, Decl(classCircularityDiagnostics.ts, 0, 0)) +>value : Symbol(Direct.value, Decl(classCircularityDiagnostics.ts, 1, 18)) + +class First extends Second {} +>First : Symbol(First, Decl(classCircularityDiagnostics.ts, 6, 41)) +>Second : Symbol(Second, Decl(classCircularityDiagnostics.ts, 8, 29)) + +class Second extends First {} +>Second : Symbol(Second, Decl(classCircularityDiagnostics.ts, 8, 29)) +>First : Symbol(First, Decl(classCircularityDiagnostics.ts, 6, 41)) + +const Expression = class Named extends Named {}; +>Expression : Symbol(Expression, Decl(classCircularityDiagnostics.ts, 11, 5)) +>Named : Symbol(Named, Decl(classCircularityDiagnostics.ts, 11, 18)) +>Named : Symbol(Named, Decl(classCircularityDiagnostics.ts, 11, 18)) + +class NestedBase extends (class { +>NestedBase : Symbol(NestedBase, Decl(classCircularityDiagnostics.ts, 11, 48)) + + static value = 1; +>value : Symbol((Anonymous class).value, Decl(classCircularityDiagnostics.ts, 13, 33)) + + value = 2; +>value : Symbol((Anonymous class).value, Decl(classCircularityDiagnostics.ts, 14, 18)) + +}) {} + +const nestedStaticValue: number = NestedBase.value; +>nestedStaticValue : Symbol(nestedStaticValue, Decl(classCircularityDiagnostics.ts, 18, 5)) +>NestedBase.value : Symbol((Anonymous class).value, Decl(classCircularityDiagnostics.ts, 13, 33)) +>NestedBase : Symbol(NestedBase, Decl(classCircularityDiagnostics.ts, 11, 48)) +>value : Symbol((Anonymous class).value, Decl(classCircularityDiagnostics.ts, 13, 33)) + +const nestedInstanceValue: number = new NestedBase().value; +>nestedInstanceValue : Symbol(nestedInstanceValue, Decl(classCircularityDiagnostics.ts, 19, 5)) +>new NestedBase().value : Symbol((Anonymous class).value, Decl(classCircularityDiagnostics.ts, 14, 18)) +>NestedBase : Symbol(NestedBase, Decl(classCircularityDiagnostics.ts, 11, 48)) +>value : Symbol((Anonymous class).value, Decl(classCircularityDiagnostics.ts, 14, 18)) + +const SelfReferencingBase = class extends (class { +>SelfReferencingBase : Symbol(SelfReferencingBase, Decl(classCircularityDiagnostics.ts, 21, 5)) + + static self = SelfReferencingBase; +>self : Symbol((Anonymous class).self, Decl(classCircularityDiagnostics.ts, 21, 50)) +>SelfReferencingBase : Symbol(SelfReferencingBase, Decl(classCircularityDiagnostics.ts, 21, 5)) + +}) {}; + +const selfConstructor = SelfReferencingBase.self; +>selfConstructor : Symbol(selfConstructor, Decl(classCircularityDiagnostics.ts, 25, 5)) +>SelfReferencingBase.self : Symbol((Anonymous class).self, Decl(classCircularityDiagnostics.ts, 21, 50)) +>SelfReferencingBase : Symbol(SelfReferencingBase, Decl(classCircularityDiagnostics.ts, 21, 5)) +>self : Symbol((Anonymous class).self, Decl(classCircularityDiagnostics.ts, 21, 50)) + +function mixin {}>(base: Base) { +>mixin : Symbol(mixin, Decl(classCircularityDiagnostics.ts, 25, 49)) +>Base : Symbol(Base, Decl(classCircularityDiagnostics.ts, 27, 15)) +>args : Symbol(args, Decl(classCircularityDiagnostics.ts, 27, 33)) +>base : Symbol(base, Decl(classCircularityDiagnostics.ts, 27, 56)) +>Base : Symbol(Base, Decl(classCircularityDiagnostics.ts, 27, 15)) + + return class extends base { +>base : Symbol(base, Decl(classCircularityDiagnostics.ts, 27, 56)) + + static value = 1; +>value : Symbol((Anonymous class).value, Decl(classCircularityDiagnostics.ts, 28, 28)) + + value = 2; +>value : Symbol((Anonymous class).value, Decl(classCircularityDiagnostics.ts, 29, 19)) + + }; +} + +class Mixed extends mixin(NestedBase) {} +>Mixed : Symbol(Mixed, Decl(classCircularityDiagnostics.ts, 32, 1)) +>mixin : Symbol(mixin, Decl(classCircularityDiagnostics.ts, 25, 49)) +>NestedBase : Symbol(NestedBase, Decl(classCircularityDiagnostics.ts, 11, 48)) + +const mixedStaticValue: number = Mixed.value; +>mixedStaticValue : Symbol(mixedStaticValue, Decl(classCircularityDiagnostics.ts, 36, 5)) +>Mixed.value : Symbol(value, Decl(classCircularityDiagnostics.ts, 28, 28), Decl(classCircularityDiagnostics.ts, 13, 33)) +>Mixed : Symbol(Mixed, Decl(classCircularityDiagnostics.ts, 32, 1)) +>value : Symbol(value, Decl(classCircularityDiagnostics.ts, 28, 28), Decl(classCircularityDiagnostics.ts, 13, 33)) + +const mixedInstanceValue: number = new Mixed().value; +>mixedInstanceValue : Symbol(mixedInstanceValue, Decl(classCircularityDiagnostics.ts, 37, 5)) +>new Mixed().value : Symbol(value, Decl(classCircularityDiagnostics.ts, 29, 19), Decl(classCircularityDiagnostics.ts, 14, 18)) +>Mixed : Symbol(Mixed, Decl(classCircularityDiagnostics.ts, 32, 1)) +>value : Symbol(value, Decl(classCircularityDiagnostics.ts, 29, 19), Decl(classCircularityDiagnostics.ts, 14, 18)) + +declare function makeBase(value: number): typeof NestedBase; +>makeBase : Symbol(makeBase, Decl(classCircularityDiagnostics.ts, 37, 53)) +>value : Symbol(value, Decl(classCircularityDiagnostics.ts, 39, 26)) +>NestedBase : Symbol(NestedBase, Decl(classCircularityDiagnostics.ts, 11, 48)) + +class InvalidBaseArgument extends makeBase("invalid") {} +>InvalidBaseArgument : Symbol(InvalidBaseArgument, Decl(classCircularityDiagnostics.ts, 39, 60)) +>makeBase : Symbol(makeBase, Decl(classCircularityDiagnostics.ts, 37, 53)) + +const InvalidExpressionArgument = class extends makeBase("invalid") {}; +>InvalidExpressionArgument : Symbol(InvalidExpressionArgument, Decl(classCircularityDiagnostics.ts, 41, 5)) +>makeBase : Symbol(makeBase, Decl(classCircularityDiagnostics.ts, 37, 53)) + +declare function makeInvalidBase(value: number): number; +>makeInvalidBase : Symbol(makeInvalidBase, Decl(classCircularityDiagnostics.ts, 41, 71)) +>value : Symbol(value, Decl(classCircularityDiagnostics.ts, 43, 33)) + +class InvalidConstructor extends makeInvalidBase("invalid") {} +>InvalidConstructor : Symbol(InvalidConstructor, Decl(classCircularityDiagnostics.ts, 43, 56)) +>makeInvalidBase : Symbol(makeInvalidBase, Decl(classCircularityDiagnostics.ts, 41, 71)) + diff --git a/tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=true).types b/tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=true).types new file mode 100644 index 0000000000000..0b46eec400402 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/classCircularityDiagnostics(noimplicitany=true).types @@ -0,0 +1,156 @@ +//// [tests/cases/compiler/classCircularityDiagnostics.ts] //// + +=== classCircularityDiagnostics.ts === +class Direct extends Direct { +>Direct : Direct +>Direct : typeof Direct + + static value = 1; +>value : number +>1 : 1 + + value = 2; +>value : number +>2 : 2 +} + +const staticValue = Direct.value; +>staticValue : number +>Direct.value : number +>Direct : typeof Direct +>value : number + +const instanceValue = new Direct().value; +>instanceValue : number +>new Direct().value : number +>new Direct() : Direct +>Direct : typeof Direct +>value : number + +class First extends Second {} +>First : First +>Second : typeof Second + +class Second extends First {} +>Second : Second +>First : typeof First + +const Expression = class Named extends Named {}; +>Expression : typeof Named +>class Named extends Named {} : typeof Named +>Named : typeof Named +>Named : typeof Named + +class NestedBase extends (class { +>NestedBase : NestedBase +>(class { static value = 1; value = 2;}) : (Anonymous class) +>class { static value = 1; value = 2;} : typeof (Anonymous class) + + static value = 1; +>value : number +>1 : 1 + + value = 2; +>value : number +>2 : 2 + +}) {} + +const nestedStaticValue: number = NestedBase.value; +>nestedStaticValue : number +>NestedBase.value : number +>NestedBase : typeof NestedBase +>value : number + +const nestedInstanceValue: number = new NestedBase().value; +>nestedInstanceValue : number +>new NestedBase().value : number +>new NestedBase() : NestedBase +>NestedBase : typeof NestedBase +>value : number + +const SelfReferencingBase = class extends (class { +>SelfReferencingBase : typeof SelfReferencingBase +>class extends (class { static self = SelfReferencingBase;}) {} : typeof SelfReferencingBase +>(class { static self = SelfReferencingBase;}) : (Anonymous class) +>class { static self = SelfReferencingBase;} : typeof (Anonymous class) + + static self = SelfReferencingBase; +>self : typeof SelfReferencingBase +>SelfReferencingBase : typeof SelfReferencingBase + +}) {}; + +const selfConstructor = SelfReferencingBase.self; +>selfConstructor : typeof SelfReferencingBase +>SelfReferencingBase.self : typeof SelfReferencingBase +>SelfReferencingBase : typeof SelfReferencingBase +>self : typeof SelfReferencingBase + +function mixin {}>(base: Base) { +>mixin : {}>(base: Base) => { new (...args: any[]): (Anonymous class); value: number; prototype: mixin.(Anonymous class); } & Base +>args : any[] +>base : Base + + return class extends base { +>class extends base { static value = 1; value = 2; } : { new (...args: any[]): (Anonymous class); value: number; prototype: mixin.(Anonymous class); } & Base +>base : {} + + static value = 1; +>value : number +>1 : 1 + + value = 2; +>value : number +>2 : 2 + + }; +} + +class Mixed extends mixin(NestedBase) {} +>Mixed : Mixed +>mixin(NestedBase) : mixin.(Anonymous class) & NestedBase +>mixin : {}>(base: Base) => { new (...args: any[]): (Anonymous class); value: number; prototype: mixin.(Anonymous class); } & Base +>NestedBase : typeof NestedBase + +const mixedStaticValue: number = Mixed.value; +>mixedStaticValue : number +>Mixed.value : number +>Mixed : typeof Mixed +>value : number + +const mixedInstanceValue: number = new Mixed().value; +>mixedInstanceValue : number +>new Mixed().value : number +>new Mixed() : Mixed +>Mixed : typeof Mixed +>value : number + +declare function makeBase(value: number): typeof NestedBase; +>makeBase : (value: number) => typeof NestedBase +>value : number +>NestedBase : typeof NestedBase + +class InvalidBaseArgument extends makeBase("invalid") {} +>InvalidBaseArgument : InvalidBaseArgument +>makeBase("invalid") : NestedBase +>makeBase : (value: number) => typeof NestedBase +>"invalid" : "invalid" + +const InvalidExpressionArgument = class extends makeBase("invalid") {}; +>InvalidExpressionArgument : typeof InvalidExpressionArgument +>class extends makeBase("invalid") {} : typeof InvalidExpressionArgument +>makeBase("invalid") : NestedBase +>makeBase : (value: number) => typeof NestedBase +>"invalid" : "invalid" + +declare function makeInvalidBase(value: number): number; +>makeInvalidBase : (value: number) => number +>value : number + +class InvalidConstructor extends makeInvalidBase("invalid") {} +>InvalidConstructor : InvalidConstructor +>makeInvalidBase("invalid") : number +>makeInvalidBase : (value: number) => number +>"invalid" : "invalid" + diff --git a/tsc/testdata/baselines/reference/compiler/enumMemberTypeCacheConsistency.js b/tsc/testdata/baselines/reference/compiler/enumMemberTypeCacheConsistency.js new file mode 100644 index 0000000000000..774af8292c6a9 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/enumMemberTypeCacheConsistency.js @@ -0,0 +1,29 @@ +//// [tests/cases/compiler/enumMemberTypeCacheConsistency.ts] //// + +//// [enumMemberTypeCacheConsistency.ts] +enum E { + A = 0, + B = E.A.valueOf(), + C = 1, +} + +const member: Extract = E.C; + +//// [enumMemberTypeCacheConsistency.js] +"use strict"; +var E; +(function (E) { + E[E["A"] = 0] = "A"; + E[E["B"] = E.A.valueOf()] = "B"; + E[E["C"] = 1] = "C"; +})(E || (E = {})); +const member = E.C; + + +//// [enumMemberTypeCacheConsistency.d.ts] +declare enum E { + A = 0, + B, + C = 1 +} +declare const member: Extract; diff --git a/tsc/testdata/baselines/reference/compiler/enumMemberTypeCacheConsistency.symbols b/tsc/testdata/baselines/reference/compiler/enumMemberTypeCacheConsistency.symbols new file mode 100644 index 0000000000000..d527b2792f38e --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/enumMemberTypeCacheConsistency.symbols @@ -0,0 +1,29 @@ +//// [tests/cases/compiler/enumMemberTypeCacheConsistency.ts] //// + +=== enumMemberTypeCacheConsistency.ts === +enum E { +>E : Symbol(E, Decl(enumMemberTypeCacheConsistency.ts, 0, 0)) + + A = 0, +>A : Symbol(E.A, Decl(enumMemberTypeCacheConsistency.ts, 0, 8)) + + B = E.A.valueOf(), +>B : Symbol(E.B, Decl(enumMemberTypeCacheConsistency.ts, 1, 10)) +>E.A.valueOf : Symbol(Number.valueOf, Decl(lib.es5.d.ts, --, --)) +>E.A : Symbol(E.A, Decl(enumMemberTypeCacheConsistency.ts, 0, 8)) +>E : Symbol(E, Decl(enumMemberTypeCacheConsistency.ts, 0, 0)) +>A : Symbol(E.A, Decl(enumMemberTypeCacheConsistency.ts, 0, 8)) +>valueOf : Symbol(Number.valueOf, Decl(lib.es5.d.ts, --, --)) + + C = 1, +>C : Symbol(E.C, Decl(enumMemberTypeCacheConsistency.ts, 2, 22)) +} + +const member: Extract = E.C; +>member : Symbol(member, Decl(enumMemberTypeCacheConsistency.ts, 6, 5)) +>Extract : Symbol(Extract, Decl(lib.es5.d.ts, --, --)) +>E : Symbol(E, Decl(enumMemberTypeCacheConsistency.ts, 0, 0)) +>E.C : Symbol(E.C, Decl(enumMemberTypeCacheConsistency.ts, 2, 22)) +>E : Symbol(E, Decl(enumMemberTypeCacheConsistency.ts, 0, 0)) +>C : Symbol(E.C, Decl(enumMemberTypeCacheConsistency.ts, 2, 22)) + diff --git a/tsc/testdata/baselines/reference/compiler/enumMemberTypeCacheConsistency.types b/tsc/testdata/baselines/reference/compiler/enumMemberTypeCacheConsistency.types new file mode 100644 index 0000000000000..118dbac02ec0b --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/enumMemberTypeCacheConsistency.types @@ -0,0 +1,30 @@ +//// [tests/cases/compiler/enumMemberTypeCacheConsistency.ts] //// + +=== enumMemberTypeCacheConsistency.ts === +enum E { +>E : E + + A = 0, +>A : E.A +>0 : 0 + + B = E.A.valueOf(), +>B : E.B +>E.A.valueOf() : number +>E.A.valueOf : () => number +>E.A : E.A +>E : typeof E +>A : E.A +>valueOf : () => number + + C = 1, +>C : E.C +>1 : 1 +} + +const member: Extract = E.C; +>member : E.C +>E.C : E.C +>E : typeof E +>C : E.C + diff --git a/tsc/testdata/baselines/reference/compiler/getterCircularityDiagnostics.errors.txt b/tsc/testdata/baselines/reference/compiler/getterCircularityDiagnostics.errors.txt new file mode 100644 index 0000000000000..ada42d0527e20 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/getterCircularityDiagnostics.errors.txt @@ -0,0 +1,17 @@ +getterCircularityDiagnostics.ts(4,9): error TS7023: 'options' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. + + +==== getterCircularityDiagnostics.ts (1 errors) ==== + declare const props: Options; + + class Container { + get options() { + ~~~~~~~ +!!! error TS7023: 'options' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. + return { container: this, ...props } as Options; + } + } + + interface Options { + container?: Container; + } \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/getterCircularityDiagnostics.js b/tsc/testdata/baselines/reference/compiler/getterCircularityDiagnostics.js new file mode 100644 index 0000000000000..e7507ff16bec4 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/getterCircularityDiagnostics.js @@ -0,0 +1,22 @@ +//// [tests/cases/compiler/getterCircularityDiagnostics.ts] //// + +//// [getterCircularityDiagnostics.ts] +declare const props: Options; + +class Container { + get options() { + return { container: this, ...props } as Options; + } +} + +interface Options { + container?: Container; +} + +//// [getterCircularityDiagnostics.js] +"use strict"; +class Container { + get options() { + return Object.assign({ container: this }, props); + } +} diff --git a/tsc/testdata/baselines/reference/compiler/getterCircularityDiagnostics.symbols b/tsc/testdata/baselines/reference/compiler/getterCircularityDiagnostics.symbols new file mode 100644 index 0000000000000..7ef53202b8061 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/getterCircularityDiagnostics.symbols @@ -0,0 +1,28 @@ +//// [tests/cases/compiler/getterCircularityDiagnostics.ts] //// + +=== getterCircularityDiagnostics.ts === +declare const props: Options; +>props : Symbol(props, Decl(getterCircularityDiagnostics.ts, 0, 13)) +>Options : Symbol(Options, Decl(getterCircularityDiagnostics.ts, 6, 1)) + +class Container { +>Container : Symbol(Container, Decl(getterCircularityDiagnostics.ts, 0, 29)) + + get options() { +>options : Symbol(Container.options, Decl(getterCircularityDiagnostics.ts, 2, 17)) + + return { container: this, ...props } as Options; +>container : Symbol(container, Decl(getterCircularityDiagnostics.ts, 4, 16)) +>this : Symbol(Container, Decl(getterCircularityDiagnostics.ts, 0, 29)) +>props : Symbol(props, Decl(getterCircularityDiagnostics.ts, 0, 13)) +>Options : Symbol(Options, Decl(getterCircularityDiagnostics.ts, 6, 1)) + } +} + +interface Options { +>Options : Symbol(Options, Decl(getterCircularityDiagnostics.ts, 6, 1)) + + container?: Container; +>container : Symbol(Options.container, Decl(getterCircularityDiagnostics.ts, 8, 19)) +>Container : Symbol(Container, Decl(getterCircularityDiagnostics.ts, 0, 29)) +} diff --git a/tsc/testdata/baselines/reference/compiler/getterCircularityDiagnostics.types b/tsc/testdata/baselines/reference/compiler/getterCircularityDiagnostics.types new file mode 100644 index 0000000000000..03f8b125b218d --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/getterCircularityDiagnostics.types @@ -0,0 +1,25 @@ +//// [tests/cases/compiler/getterCircularityDiagnostics.ts] //// + +=== getterCircularityDiagnostics.ts === +declare const props: Options; +>props : Options + +class Container { +>Container : Container + + get options() { +>options : any + + return { container: this, ...props } as Options; +>{ container: this, ...props } as Options : Options +>{ container: this, ...props } : { container: Container; } +>container : this +>this : this +>props : Options + } +} + +interface Options { + container?: Container; +>container : Container | undefined +} diff --git a/tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.errors.txt b/tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.errors.txt new file mode 100644 index 0000000000000..34493080afba5 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.errors.txt @@ -0,0 +1,20 @@ +error TS-1: Pre-emit (2) and post-emit (3) diagnostic counts do not match! This can indicate that a semantic _error_ was added by the emit resolver - such an error may not be reflected on the command line or in the editor, but may be captured in a baseline here! +file.js(4,11): error TS7022: 'pixel' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. +file.js(4,19): error TS7053: Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{ skip: any; }'. + + +!!! error TS-1: Pre-emit (2) and post-emit (3) diagnostic counts do not match! This can indicate that a semantic _error_ was added by the emit resolver - such an error may not be reflected on the command line or in the editor, but may be captured in a baseline here! +!!! related TS-1: The excess diagnostics are: +!!! related TS7053 file.js:5:24: Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{ skip: any; }'. +==== file.js (2 errors) ==== + /** @param {any} axis @param {any} value */ + function updateElements(axis, value) { + const properties = {}; + const pixel = properties[axis] = value; + ~~~~~ +!!! error TS7022: 'pixel' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. + ~~~~~~~~~~~~~~~~ +!!! error TS7053: Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{ skip: any; }'. + const otherPixel = properties[axis] = value; + properties.skip = isNaN(pixel) || isNaN(otherPixel); + } \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.js b/tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.js new file mode 100644 index 0000000000000..d660e1f2146fc --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.js @@ -0,0 +1,20 @@ +//// [tests/cases/compiler/jsExpandoIndexedAssignmentDiagnostic.ts] //// + +//// [file.js] +/** @param {any} axis @param {any} value */ +function updateElements(axis, value) { + const properties = {}; + const pixel = properties[axis] = value; + const otherPixel = properties[axis] = value; + properties.skip = isNaN(pixel) || isNaN(otherPixel); +} + +//// [file.js] +"use strict"; +/** @param {any} axis @param {any} value */ +function updateElements(axis, value) { + const properties = {}; + const pixel = properties[axis] = value; + const otherPixel = properties[axis] = value; + properties.skip = isNaN(pixel) || isNaN(otherPixel); +} diff --git a/tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.symbols b/tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.symbols new file mode 100644 index 0000000000000..373963a684ab3 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.symbols @@ -0,0 +1,33 @@ +//// [tests/cases/compiler/jsExpandoIndexedAssignmentDiagnostic.ts] //// + +=== file.js === +/** @param {any} axis @param {any} value */ +function updateElements(axis, value) { +>updateElements : Symbol(updateElements, Decl(file.js, 0, 0)) +>axis : Symbol(axis, Decl(file.js, 1, 24)) +>value : Symbol(value, Decl(file.js, 1, 29)) + + const properties = {}; +>properties : Symbol(properties, Decl(file.js, 2, 9)) + + const pixel = properties[axis] = value; +>pixel : Symbol(pixel, Decl(file.js, 3, 9)) +>properties : Symbol(properties, Decl(file.js, 2, 9)) +>axis : Symbol(axis, Decl(file.js, 1, 24)) +>value : Symbol(value, Decl(file.js, 1, 29)) + + const otherPixel = properties[axis] = value; +>otherPixel : Symbol(otherPixel, Decl(file.js, 4, 9)) +>properties : Symbol(properties, Decl(file.js, 2, 9)) +>axis : Symbol(axis, Decl(file.js, 1, 24)) +>value : Symbol(value, Decl(file.js, 1, 29)) + + properties.skip = isNaN(pixel) || isNaN(otherPixel); +>properties.skip : Symbol(skip, Decl(file.js, 4, 48)) +>properties : Symbol(properties, Decl(file.js, 2, 9)) +>skip : Symbol(skip, Decl(file.js, 4, 48)) +>isNaN : Symbol(isNaN, Decl(lib.es5.d.ts, --, --)) +>pixel : Symbol(pixel, Decl(file.js, 3, 9)) +>isNaN : Symbol(isNaN, Decl(lib.es5.d.ts, --, --)) +>otherPixel : Symbol(otherPixel, Decl(file.js, 4, 9)) +} diff --git a/tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.types b/tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.types new file mode 100644 index 0000000000000..607a8ed056027 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.types @@ -0,0 +1,42 @@ +//// [tests/cases/compiler/jsExpandoIndexedAssignmentDiagnostic.ts] //// + +=== file.js === +/** @param {any} axis @param {any} value */ +function updateElements(axis, value) { +>updateElements : (axis: any, value: any) => void +>axis : any +>value : any + + const properties = {}; +>properties : { skip: any; } +>{} : { skip: any; } + + const pixel = properties[axis] = value; +>pixel : any +>properties[axis] = value : any +>properties[axis] : any +>properties : { skip: any; } +>axis : any +>value : any + + const otherPixel = properties[axis] = value; +>otherPixel : any +>properties[axis] = value : any +>properties[axis] : any +>properties : { skip: any; } +>axis : any +>value : any + + properties.skip = isNaN(pixel) || isNaN(otherPixel); +>properties.skip = isNaN(pixel) || isNaN(otherPixel) : boolean +>properties.skip : any +>properties : { skip: any; } +>skip : any +>isNaN(pixel) || isNaN(otherPixel) : boolean +>isNaN(pixel) : boolean +>isNaN : (number: number) => boolean +>pixel : any +>isNaN(otherPixel) : boolean +>isNaN : (number: number) => boolean +>otherPixel : any +} diff --git a/tsc/testdata/tests/cases/compiler/circularIndexedPropertyInstantiation.ts b/tsc/testdata/tests/cases/compiler/circularIndexedPropertyInstantiation.ts new file mode 100644 index 0000000000000..3aa2e3f2b6f02 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/circularIndexedPropertyInstantiation.ts @@ -0,0 +1,6 @@ +// @target: es2015 +// Repro from #14837 + +type Foo = { "true": Foo> }[T]; +let f1: Foo<"true", {}>; +let f2: Foo<"false", {}>; \ No newline at end of file diff --git a/tsc/testdata/tests/cases/compiler/circularInitializerInference.ts b/tsc/testdata/tests/cases/compiler/circularInitializerInference.ts new file mode 100644 index 0000000000000..727b206a54e83 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/circularInitializerInference.ts @@ -0,0 +1,31 @@ +// @target: es2015 +// @strict: true, false + +export {}; + +type IsAny = 0 extends (1 & Type) ? true : false; +type Assert = Condition; + +var comma = (comma, 3); +type CommaInference = Assert>; + +var nestedComma = (comma, nestedComma, comma); +type NestedCommaInference = Assert>; + +var assignment = (assignment = 2); +type AssignmentInference = Assert>; + +var nestedAssignment = (nestedAssignment = nestedAssignment = 2); +type NestedAssignmentInference = Assert>; + +var conditional = conditional ? 0 : 1; +type ConditionalInference = Assert>; + +var logicalAnd = logicalAnd && ""; +type LogicalAndInference = Assert>; + +var propertyAccess = { member: propertyAccess.member }; +type PropertyAccessInference = Assert>; + +const nonCircular: number = 3; +type NonCircularInference = Assert extends false ? true : false>; \ No newline at end of file diff --git a/tsc/testdata/tests/cases/compiler/classCircularityDiagnostics.ts b/tsc/testdata/tests/cases/compiler/classCircularityDiagnostics.ts new file mode 100644 index 0000000000000..34977b5df2a3d --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/classCircularityDiagnostics.ts @@ -0,0 +1,48 @@ +// @target: esnext +// @noImplicitAny: true, false + +class Direct extends Direct { + static value = 1; + value = 2; +} + +const staticValue = Direct.value; +const instanceValue = new Direct().value; + +class First extends Second {} +class Second extends First {} + +const Expression = class Named extends Named {}; + +class NestedBase extends (class { + static value = 1; + value = 2; +}) {} + +const nestedStaticValue: number = NestedBase.value; +const nestedInstanceValue: number = new NestedBase().value; + +const SelfReferencingBase = class extends (class { + static self = SelfReferencingBase; +}) {}; + +const selfConstructor = SelfReferencingBase.self; + +function mixin {}>(base: Base) { + return class extends base { + static value = 1; + value = 2; + }; +} + +class Mixed extends mixin(NestedBase) {} + +const mixedStaticValue: number = Mixed.value; +const mixedInstanceValue: number = new Mixed().value; + +declare function makeBase(value: number): typeof NestedBase; +class InvalidBaseArgument extends makeBase("invalid") {} +const InvalidExpressionArgument = class extends makeBase("invalid") {}; + +declare function makeInvalidBase(value: number): number; +class InvalidConstructor extends makeInvalidBase("invalid") {} \ No newline at end of file diff --git a/tsc/testdata/tests/cases/compiler/enumMemberTypeCacheConsistency.ts b/tsc/testdata/tests/cases/compiler/enumMemberTypeCacheConsistency.ts new file mode 100644 index 0000000000000..74c113fe04cde --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/enumMemberTypeCacheConsistency.ts @@ -0,0 +1,11 @@ +// @target: esnext +// @strict: true +// @declaration: true + +enum E { + A = 0, + B = E.A.valueOf(), + C = 1, +} + +const member: Extract = E.C; \ No newline at end of file diff --git a/tsc/testdata/tests/cases/compiler/getterCircularityDiagnostics.ts b/tsc/testdata/tests/cases/compiler/getterCircularityDiagnostics.ts new file mode 100644 index 0000000000000..f5533c69336ad --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/getterCircularityDiagnostics.ts @@ -0,0 +1,14 @@ +// @target: es2015 +// @strict: true + +declare const props: Options; + +class Container { + get options() { + return { container: this, ...props } as Options; + } +} + +interface Options { + container?: Container; +} \ No newline at end of file diff --git a/tsc/testdata/tests/cases/compiler/jsExpandoIndexedAssignmentDiagnostic.ts b/tsc/testdata/tests/cases/compiler/jsExpandoIndexedAssignmentDiagnostic.ts new file mode 100644 index 0000000000000..33c25e649c64e --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/jsExpandoIndexedAssignmentDiagnostic.ts @@ -0,0 +1,13 @@ +// @target: esnext +// @checkJs: true +// @noImplicitAny: true +// @outDir: out +// @filename: file.js + +/** @param {any} axis @param {any} value */ +function updateElements(axis, value) { + const properties = {}; + const pixel = properties[axis] = value; + const otherPixel = properties[axis] = value; + properties.skip = isNaN(pixel) || isNaN(otherPixel); +} \ No newline at end of file From 893e77e5a31aa2be1d1ebc60e11338d1415acbc9 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 22 Oct 2026 00:43:32 -0700 Subject: [PATCH 048/194] Add test for a cycle through namespace spreads Spreading a module namespace whose export resolves back through the spread re-enters the namespace's members while they are still being resolved. Results computed against the incomplete members are cached anyway, so what each file's exports end up as depends on which file the checker happened to start from. --- ...eckOrderSpreadCycle(checkorder=default).js | 87 +++++++++++++++++++ ...derSpreadCycle(checkorder=default).symbols | 54 ++++++++++++ ...OrderSpreadCycle(checkorder=default).types | 68 +++++++++++++++ ...ckOrderSpreadCycle(checkorder=isolated).js | 87 +++++++++++++++++++ ...erSpreadCycle(checkorder=isolated).symbols | 54 ++++++++++++ ...rderSpreadCycle(checkorder=isolated).types | 68 +++++++++++++++ ...eckOrderSpreadCycle(checkorder=reverse).js | 87 +++++++++++++++++++ ...derSpreadCycle(checkorder=reverse).symbols | 54 ++++++++++++ ...OrderSpreadCycle(checkorder=reverse).types | 68 +++++++++++++++ ...OrderSpreadCycle(checkorder=typesfirst).js | 87 +++++++++++++++++++ ...SpreadCycle(checkorder=typesfirst).symbols | 54 ++++++++++++ ...erSpreadCycle(checkorder=typesfirst).types | 68 +++++++++++++++ .../cases/compiler/checkOrderSpreadCycle.ts | 31 +++++++ 13 files changed, 867 insertions(+) create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).types create mode 100644 tsc/testdata/tests/cases/compiler/checkOrderSpreadCycle.ts diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).js b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).js new file mode 100644 index 0000000000000..433d0bfbb69b5 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).js @@ -0,0 +1,87 @@ +//// [tests/cases/compiler/checkOrderSpreadCycle.ts] //// + +//// [ma.js] +export { v as pa } from "./xa"; +export const ma = 1; + +//// [mb.js] +export { v as pb } from "./xb"; +export const mb = 1; + +//// [xa.js] +/** @type {typeof import("./mb")} */ +const M = /** @type {any} */ (null); +module.exports = { v: { ...M } }; + +//// [xb.js] +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +module.exports = { v: { ...M } }; + +//// [ia.js] +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +module.exports = { v: { ...M } }; + + +//// [xb.js] +"use strict"; +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +module.exports = { v: { ...M } }; +//// [mb.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.mb = exports.pb = void 0; +var xb_1 = require("./xb"); +Object.defineProperty(exports, "pb", { enumerable: true, get: function () { return xb_1.v; } }); +exports.mb = 1; +//// [xa.js] +"use strict"; +/** @type {typeof import("./mb")} */ +const M = /** @type {any} */ (null); +module.exports = { v: { ...M } }; +//// [ma.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ma = exports.pa = void 0; +var xa_1 = require("./xa"); +Object.defineProperty(exports, "pa", { enumerable: true, get: function () { return xa_1.v; } }); +exports.ma = 1; +//// [ia.js] +"use strict"; +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +module.exports = { v: { ...M } }; + + +//// [xb.d.ts] +declare const _exports: { + v: {}; +}; +export = _exports; +//// [mb.d.ts] +export { v as pb } from "./xb"; +export declare const mb = 1; +//// [xa.d.ts] +declare const _exports: { + v: { + pb: {}; + mb: 1; + }; +}; +export = _exports; +//// [ma.d.ts] +export { v as pa } from "./xa"; +export declare const ma = 1; +//// [ia.d.ts] +declare const _exports: { + v: { + pa: { + pb: {}; + mb: 1; + }; + ma: 1; + }; +}; +export = _exports; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).symbols new file mode 100644 index 0000000000000..4359b0af3b06c --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).symbols @@ -0,0 +1,54 @@ +//// [tests/cases/compiler/checkOrderSpreadCycle.ts] //// + +=== /ia.js === +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +>M : Symbol(M, Decl(ia.js, 1, 5)) + +module.exports = { v: { ...M } }; +>module.exports : Symbol(exports, Decl(ia.js, 0, 0)) +>module : Symbol(module, Decl(ia.js, 0, 0)) +>exports : Symbol(exports, Decl(ia.js, 0, 0)) +>v : Symbol(v, Decl(ia.js, 2, 18)) +>M : Symbol(M, Decl(ia.js, 1, 5)) + +=== /ma.js === +export { v as pa } from "./xa"; +>v : Symbol(v, Decl(xa.js, 2, 18)) +>pa : Symbol(pa, Decl(ma.js, 0, 8)) + +export const ma = 1; +>ma : Symbol(ma, Decl(ma.js, 1, 12)) + +=== /mb.js === +export { v as pb } from "./xb"; +>v : Symbol(v, Decl(xb.js, 2, 18)) +>pb : Symbol(pb, Decl(mb.js, 0, 8)) + +export const mb = 1; +>mb : Symbol(mb, Decl(mb.js, 1, 12)) + +=== /xa.js === +/** @type {typeof import("./mb")} */ +const M = /** @type {any} */ (null); +>M : Symbol(M, Decl(xa.js, 1, 5)) + +module.exports = { v: { ...M } }; +>module.exports : Symbol(exports, Decl(xa.js, 0, 0)) +>module : Symbol(module, Decl(xa.js, 0, 0)) +>exports : Symbol(exports, Decl(xa.js, 0, 0)) +>v : Symbol(v, Decl(xa.js, 2, 18)) +>M : Symbol(M, Decl(xa.js, 1, 5)) + +=== /xb.js === +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +>M : Symbol(M, Decl(xb.js, 1, 5)) + +module.exports = { v: { ...M } }; +>module.exports : Symbol(exports, Decl(xb.js, 0, 0)) +>module : Symbol(module, Decl(xb.js, 0, 0)) +>exports : Symbol(exports, Decl(xb.js, 0, 0)) +>v : Symbol(v, Decl(xb.js, 2, 18)) +>M : Symbol(M, Decl(xb.js, 1, 5)) + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).types b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).types new file mode 100644 index 0000000000000..216ad9304dfd7 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).types @@ -0,0 +1,68 @@ +//// [tests/cases/compiler/checkOrderSpreadCycle.ts] //// + +=== /ia.js === +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +>M : typeof import("./ma") +>(null) : any + +module.exports = { v: { ...M } }; +>module.exports = { v: { ...M } } : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } +>module.exports : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } +>module : { exports: { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; }; } +>exports : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } +>{ v: { ...M } } : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } +>v : { pa: { pb: {}; mb: 1; }; ma: 1; } +>{ ...M } : { pa: { pb: {}; mb: 1; }; ma: 1; } +>M : typeof import("./ma") + +=== /ma.js === +export { v as pa } from "./xa"; +>v : { pb: {}; mb: 1; } +>pa : { pb: {}; mb: 1; } + +export const ma = 1; +>ma : 1 +>1 : 1 + +=== /mb.js === +export { v as pb } from "./xb"; +>v : {} +>pb : {} + +export const mb = 1; +>mb : 1 +>1 : 1 + +=== /xa.js === +/** @type {typeof import("./mb")} */ +const M = /** @type {any} */ (null); +>M : typeof import("./mb") +>(null) : any + +module.exports = { v: { ...M } }; +>module.exports = { v: { ...M } } : { v: { pb: {}; mb: 1; }; } +>module.exports : { v: { pb: {}; mb: 1; }; } +>module : { exports: { v: { pb: {}; mb: 1; }; }; } +>exports : { v: { pb: {}; mb: 1; }; } +>{ v: { ...M } } : { v: { pb: {}; mb: 1; }; } +>v : { pb: {}; mb: 1; } +>{ ...M } : { pb: {}; mb: 1; } +>M : typeof import("./mb") + +=== /xb.js === +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +>M : typeof import("./ma") +>(null) : any + +module.exports = { v: { ...M } }; +>module.exports = { v: { ...M } } : { v: {}; } +>module.exports : { v: {}; } +>module : { exports: { v: {}; }; } +>exports : { v: {}; } +>{ v: { ...M } } : { v: {}; } +>v : {} +>{ ...M } : {} +>M : typeof import("./ma") + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).js b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).js new file mode 100644 index 0000000000000..433d0bfbb69b5 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).js @@ -0,0 +1,87 @@ +//// [tests/cases/compiler/checkOrderSpreadCycle.ts] //// + +//// [ma.js] +export { v as pa } from "./xa"; +export const ma = 1; + +//// [mb.js] +export { v as pb } from "./xb"; +export const mb = 1; + +//// [xa.js] +/** @type {typeof import("./mb")} */ +const M = /** @type {any} */ (null); +module.exports = { v: { ...M } }; + +//// [xb.js] +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +module.exports = { v: { ...M } }; + +//// [ia.js] +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +module.exports = { v: { ...M } }; + + +//// [xb.js] +"use strict"; +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +module.exports = { v: { ...M } }; +//// [mb.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.mb = exports.pb = void 0; +var xb_1 = require("./xb"); +Object.defineProperty(exports, "pb", { enumerable: true, get: function () { return xb_1.v; } }); +exports.mb = 1; +//// [xa.js] +"use strict"; +/** @type {typeof import("./mb")} */ +const M = /** @type {any} */ (null); +module.exports = { v: { ...M } }; +//// [ma.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ma = exports.pa = void 0; +var xa_1 = require("./xa"); +Object.defineProperty(exports, "pa", { enumerable: true, get: function () { return xa_1.v; } }); +exports.ma = 1; +//// [ia.js] +"use strict"; +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +module.exports = { v: { ...M } }; + + +//// [xb.d.ts] +declare const _exports: { + v: {}; +}; +export = _exports; +//// [mb.d.ts] +export { v as pb } from "./xb"; +export declare const mb = 1; +//// [xa.d.ts] +declare const _exports: { + v: { + pb: {}; + mb: 1; + }; +}; +export = _exports; +//// [ma.d.ts] +export { v as pa } from "./xa"; +export declare const ma = 1; +//// [ia.d.ts] +declare const _exports: { + v: { + pa: { + pb: {}; + mb: 1; + }; + ma: 1; + }; +}; +export = _exports; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).symbols new file mode 100644 index 0000000000000..4359b0af3b06c --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).symbols @@ -0,0 +1,54 @@ +//// [tests/cases/compiler/checkOrderSpreadCycle.ts] //// + +=== /ia.js === +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +>M : Symbol(M, Decl(ia.js, 1, 5)) + +module.exports = { v: { ...M } }; +>module.exports : Symbol(exports, Decl(ia.js, 0, 0)) +>module : Symbol(module, Decl(ia.js, 0, 0)) +>exports : Symbol(exports, Decl(ia.js, 0, 0)) +>v : Symbol(v, Decl(ia.js, 2, 18)) +>M : Symbol(M, Decl(ia.js, 1, 5)) + +=== /ma.js === +export { v as pa } from "./xa"; +>v : Symbol(v, Decl(xa.js, 2, 18)) +>pa : Symbol(pa, Decl(ma.js, 0, 8)) + +export const ma = 1; +>ma : Symbol(ma, Decl(ma.js, 1, 12)) + +=== /mb.js === +export { v as pb } from "./xb"; +>v : Symbol(v, Decl(xb.js, 2, 18)) +>pb : Symbol(pb, Decl(mb.js, 0, 8)) + +export const mb = 1; +>mb : Symbol(mb, Decl(mb.js, 1, 12)) + +=== /xa.js === +/** @type {typeof import("./mb")} */ +const M = /** @type {any} */ (null); +>M : Symbol(M, Decl(xa.js, 1, 5)) + +module.exports = { v: { ...M } }; +>module.exports : Symbol(exports, Decl(xa.js, 0, 0)) +>module : Symbol(module, Decl(xa.js, 0, 0)) +>exports : Symbol(exports, Decl(xa.js, 0, 0)) +>v : Symbol(v, Decl(xa.js, 2, 18)) +>M : Symbol(M, Decl(xa.js, 1, 5)) + +=== /xb.js === +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +>M : Symbol(M, Decl(xb.js, 1, 5)) + +module.exports = { v: { ...M } }; +>module.exports : Symbol(exports, Decl(xb.js, 0, 0)) +>module : Symbol(module, Decl(xb.js, 0, 0)) +>exports : Symbol(exports, Decl(xb.js, 0, 0)) +>v : Symbol(v, Decl(xb.js, 2, 18)) +>M : Symbol(M, Decl(xb.js, 1, 5)) + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).types b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).types new file mode 100644 index 0000000000000..216ad9304dfd7 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).types @@ -0,0 +1,68 @@ +//// [tests/cases/compiler/checkOrderSpreadCycle.ts] //// + +=== /ia.js === +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +>M : typeof import("./ma") +>(null) : any + +module.exports = { v: { ...M } }; +>module.exports = { v: { ...M } } : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } +>module.exports : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } +>module : { exports: { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; }; } +>exports : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } +>{ v: { ...M } } : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } +>v : { pa: { pb: {}; mb: 1; }; ma: 1; } +>{ ...M } : { pa: { pb: {}; mb: 1; }; ma: 1; } +>M : typeof import("./ma") + +=== /ma.js === +export { v as pa } from "./xa"; +>v : { pb: {}; mb: 1; } +>pa : { pb: {}; mb: 1; } + +export const ma = 1; +>ma : 1 +>1 : 1 + +=== /mb.js === +export { v as pb } from "./xb"; +>v : {} +>pb : {} + +export const mb = 1; +>mb : 1 +>1 : 1 + +=== /xa.js === +/** @type {typeof import("./mb")} */ +const M = /** @type {any} */ (null); +>M : typeof import("./mb") +>(null) : any + +module.exports = { v: { ...M } }; +>module.exports = { v: { ...M } } : { v: { pb: {}; mb: 1; }; } +>module.exports : { v: { pb: {}; mb: 1; }; } +>module : { exports: { v: { pb: {}; mb: 1; }; }; } +>exports : { v: { pb: {}; mb: 1; }; } +>{ v: { ...M } } : { v: { pb: {}; mb: 1; }; } +>v : { pb: {}; mb: 1; } +>{ ...M } : { pb: {}; mb: 1; } +>M : typeof import("./mb") + +=== /xb.js === +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +>M : typeof import("./ma") +>(null) : any + +module.exports = { v: { ...M } }; +>module.exports = { v: { ...M } } : { v: {}; } +>module.exports : { v: {}; } +>module : { exports: { v: {}; }; } +>exports : { v: {}; } +>{ v: { ...M } } : { v: {}; } +>v : {} +>{ ...M } : {} +>M : typeof import("./ma") + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).js b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).js new file mode 100644 index 0000000000000..433d0bfbb69b5 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).js @@ -0,0 +1,87 @@ +//// [tests/cases/compiler/checkOrderSpreadCycle.ts] //// + +//// [ma.js] +export { v as pa } from "./xa"; +export const ma = 1; + +//// [mb.js] +export { v as pb } from "./xb"; +export const mb = 1; + +//// [xa.js] +/** @type {typeof import("./mb")} */ +const M = /** @type {any} */ (null); +module.exports = { v: { ...M } }; + +//// [xb.js] +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +module.exports = { v: { ...M } }; + +//// [ia.js] +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +module.exports = { v: { ...M } }; + + +//// [xb.js] +"use strict"; +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +module.exports = { v: { ...M } }; +//// [mb.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.mb = exports.pb = void 0; +var xb_1 = require("./xb"); +Object.defineProperty(exports, "pb", { enumerable: true, get: function () { return xb_1.v; } }); +exports.mb = 1; +//// [xa.js] +"use strict"; +/** @type {typeof import("./mb")} */ +const M = /** @type {any} */ (null); +module.exports = { v: { ...M } }; +//// [ma.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ma = exports.pa = void 0; +var xa_1 = require("./xa"); +Object.defineProperty(exports, "pa", { enumerable: true, get: function () { return xa_1.v; } }); +exports.ma = 1; +//// [ia.js] +"use strict"; +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +module.exports = { v: { ...M } }; + + +//// [xb.d.ts] +declare const _exports: { + v: {}; +}; +export = _exports; +//// [mb.d.ts] +export { v as pb } from "./xb"; +export declare const mb = 1; +//// [xa.d.ts] +declare const _exports: { + v: { + pb: {}; + mb: 1; + }; +}; +export = _exports; +//// [ma.d.ts] +export { v as pa } from "./xa"; +export declare const ma = 1; +//// [ia.d.ts] +declare const _exports: { + v: { + pa: { + pb: {}; + mb: 1; + }; + ma: 1; + }; +}; +export = _exports; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).symbols new file mode 100644 index 0000000000000..4359b0af3b06c --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).symbols @@ -0,0 +1,54 @@ +//// [tests/cases/compiler/checkOrderSpreadCycle.ts] //// + +=== /ia.js === +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +>M : Symbol(M, Decl(ia.js, 1, 5)) + +module.exports = { v: { ...M } }; +>module.exports : Symbol(exports, Decl(ia.js, 0, 0)) +>module : Symbol(module, Decl(ia.js, 0, 0)) +>exports : Symbol(exports, Decl(ia.js, 0, 0)) +>v : Symbol(v, Decl(ia.js, 2, 18)) +>M : Symbol(M, Decl(ia.js, 1, 5)) + +=== /ma.js === +export { v as pa } from "./xa"; +>v : Symbol(v, Decl(xa.js, 2, 18)) +>pa : Symbol(pa, Decl(ma.js, 0, 8)) + +export const ma = 1; +>ma : Symbol(ma, Decl(ma.js, 1, 12)) + +=== /mb.js === +export { v as pb } from "./xb"; +>v : Symbol(v, Decl(xb.js, 2, 18)) +>pb : Symbol(pb, Decl(mb.js, 0, 8)) + +export const mb = 1; +>mb : Symbol(mb, Decl(mb.js, 1, 12)) + +=== /xa.js === +/** @type {typeof import("./mb")} */ +const M = /** @type {any} */ (null); +>M : Symbol(M, Decl(xa.js, 1, 5)) + +module.exports = { v: { ...M } }; +>module.exports : Symbol(exports, Decl(xa.js, 0, 0)) +>module : Symbol(module, Decl(xa.js, 0, 0)) +>exports : Symbol(exports, Decl(xa.js, 0, 0)) +>v : Symbol(v, Decl(xa.js, 2, 18)) +>M : Symbol(M, Decl(xa.js, 1, 5)) + +=== /xb.js === +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +>M : Symbol(M, Decl(xb.js, 1, 5)) + +module.exports = { v: { ...M } }; +>module.exports : Symbol(exports, Decl(xb.js, 0, 0)) +>module : Symbol(module, Decl(xb.js, 0, 0)) +>exports : Symbol(exports, Decl(xb.js, 0, 0)) +>v : Symbol(v, Decl(xb.js, 2, 18)) +>M : Symbol(M, Decl(xb.js, 1, 5)) + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).types b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).types new file mode 100644 index 0000000000000..216ad9304dfd7 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).types @@ -0,0 +1,68 @@ +//// [tests/cases/compiler/checkOrderSpreadCycle.ts] //// + +=== /ia.js === +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +>M : typeof import("./ma") +>(null) : any + +module.exports = { v: { ...M } }; +>module.exports = { v: { ...M } } : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } +>module.exports : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } +>module : { exports: { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; }; } +>exports : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } +>{ v: { ...M } } : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } +>v : { pa: { pb: {}; mb: 1; }; ma: 1; } +>{ ...M } : { pa: { pb: {}; mb: 1; }; ma: 1; } +>M : typeof import("./ma") + +=== /ma.js === +export { v as pa } from "./xa"; +>v : { pb: {}; mb: 1; } +>pa : { pb: {}; mb: 1; } + +export const ma = 1; +>ma : 1 +>1 : 1 + +=== /mb.js === +export { v as pb } from "./xb"; +>v : {} +>pb : {} + +export const mb = 1; +>mb : 1 +>1 : 1 + +=== /xa.js === +/** @type {typeof import("./mb")} */ +const M = /** @type {any} */ (null); +>M : typeof import("./mb") +>(null) : any + +module.exports = { v: { ...M } }; +>module.exports = { v: { ...M } } : { v: { pb: {}; mb: 1; }; } +>module.exports : { v: { pb: {}; mb: 1; }; } +>module : { exports: { v: { pb: {}; mb: 1; }; }; } +>exports : { v: { pb: {}; mb: 1; }; } +>{ v: { ...M } } : { v: { pb: {}; mb: 1; }; } +>v : { pb: {}; mb: 1; } +>{ ...M } : { pb: {}; mb: 1; } +>M : typeof import("./mb") + +=== /xb.js === +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +>M : typeof import("./ma") +>(null) : any + +module.exports = { v: { ...M } }; +>module.exports = { v: { ...M } } : { v: {}; } +>module.exports : { v: {}; } +>module : { exports: { v: {}; }; } +>exports : { v: {}; } +>{ v: { ...M } } : { v: {}; } +>v : {} +>{ ...M } : {} +>M : typeof import("./ma") + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).js b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).js new file mode 100644 index 0000000000000..433d0bfbb69b5 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).js @@ -0,0 +1,87 @@ +//// [tests/cases/compiler/checkOrderSpreadCycle.ts] //// + +//// [ma.js] +export { v as pa } from "./xa"; +export const ma = 1; + +//// [mb.js] +export { v as pb } from "./xb"; +export const mb = 1; + +//// [xa.js] +/** @type {typeof import("./mb")} */ +const M = /** @type {any} */ (null); +module.exports = { v: { ...M } }; + +//// [xb.js] +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +module.exports = { v: { ...M } }; + +//// [ia.js] +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +module.exports = { v: { ...M } }; + + +//// [xb.js] +"use strict"; +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +module.exports = { v: { ...M } }; +//// [mb.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.mb = exports.pb = void 0; +var xb_1 = require("./xb"); +Object.defineProperty(exports, "pb", { enumerable: true, get: function () { return xb_1.v; } }); +exports.mb = 1; +//// [xa.js] +"use strict"; +/** @type {typeof import("./mb")} */ +const M = /** @type {any} */ (null); +module.exports = { v: { ...M } }; +//// [ma.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ma = exports.pa = void 0; +var xa_1 = require("./xa"); +Object.defineProperty(exports, "pa", { enumerable: true, get: function () { return xa_1.v; } }); +exports.ma = 1; +//// [ia.js] +"use strict"; +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +module.exports = { v: { ...M } }; + + +//// [xb.d.ts] +declare const _exports: { + v: {}; +}; +export = _exports; +//// [mb.d.ts] +export { v as pb } from "./xb"; +export declare const mb = 1; +//// [xa.d.ts] +declare const _exports: { + v: { + pb: {}; + mb: 1; + }; +}; +export = _exports; +//// [ma.d.ts] +export { v as pa } from "./xa"; +export declare const ma = 1; +//// [ia.d.ts] +declare const _exports: { + v: { + pa: { + pb: {}; + mb: 1; + }; + ma: 1; + }; +}; +export = _exports; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..4359b0af3b06c --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).symbols @@ -0,0 +1,54 @@ +//// [tests/cases/compiler/checkOrderSpreadCycle.ts] //// + +=== /ia.js === +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +>M : Symbol(M, Decl(ia.js, 1, 5)) + +module.exports = { v: { ...M } }; +>module.exports : Symbol(exports, Decl(ia.js, 0, 0)) +>module : Symbol(module, Decl(ia.js, 0, 0)) +>exports : Symbol(exports, Decl(ia.js, 0, 0)) +>v : Symbol(v, Decl(ia.js, 2, 18)) +>M : Symbol(M, Decl(ia.js, 1, 5)) + +=== /ma.js === +export { v as pa } from "./xa"; +>v : Symbol(v, Decl(xa.js, 2, 18)) +>pa : Symbol(pa, Decl(ma.js, 0, 8)) + +export const ma = 1; +>ma : Symbol(ma, Decl(ma.js, 1, 12)) + +=== /mb.js === +export { v as pb } from "./xb"; +>v : Symbol(v, Decl(xb.js, 2, 18)) +>pb : Symbol(pb, Decl(mb.js, 0, 8)) + +export const mb = 1; +>mb : Symbol(mb, Decl(mb.js, 1, 12)) + +=== /xa.js === +/** @type {typeof import("./mb")} */ +const M = /** @type {any} */ (null); +>M : Symbol(M, Decl(xa.js, 1, 5)) + +module.exports = { v: { ...M } }; +>module.exports : Symbol(exports, Decl(xa.js, 0, 0)) +>module : Symbol(module, Decl(xa.js, 0, 0)) +>exports : Symbol(exports, Decl(xa.js, 0, 0)) +>v : Symbol(v, Decl(xa.js, 2, 18)) +>M : Symbol(M, Decl(xa.js, 1, 5)) + +=== /xb.js === +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +>M : Symbol(M, Decl(xb.js, 1, 5)) + +module.exports = { v: { ...M } }; +>module.exports : Symbol(exports, Decl(xb.js, 0, 0)) +>module : Symbol(module, Decl(xb.js, 0, 0)) +>exports : Symbol(exports, Decl(xb.js, 0, 0)) +>v : Symbol(v, Decl(xb.js, 2, 18)) +>M : Symbol(M, Decl(xb.js, 1, 5)) + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).types new file mode 100644 index 0000000000000..216ad9304dfd7 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).types @@ -0,0 +1,68 @@ +//// [tests/cases/compiler/checkOrderSpreadCycle.ts] //// + +=== /ia.js === +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +>M : typeof import("./ma") +>(null) : any + +module.exports = { v: { ...M } }; +>module.exports = { v: { ...M } } : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } +>module.exports : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } +>module : { exports: { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; }; } +>exports : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } +>{ v: { ...M } } : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } +>v : { pa: { pb: {}; mb: 1; }; ma: 1; } +>{ ...M } : { pa: { pb: {}; mb: 1; }; ma: 1; } +>M : typeof import("./ma") + +=== /ma.js === +export { v as pa } from "./xa"; +>v : { pb: {}; mb: 1; } +>pa : { pb: {}; mb: 1; } + +export const ma = 1; +>ma : 1 +>1 : 1 + +=== /mb.js === +export { v as pb } from "./xb"; +>v : {} +>pb : {} + +export const mb = 1; +>mb : 1 +>1 : 1 + +=== /xa.js === +/** @type {typeof import("./mb")} */ +const M = /** @type {any} */ (null); +>M : typeof import("./mb") +>(null) : any + +module.exports = { v: { ...M } }; +>module.exports = { v: { ...M } } : { v: { pb: {}; mb: 1; }; } +>module.exports : { v: { pb: {}; mb: 1; }; } +>module : { exports: { v: { pb: {}; mb: 1; }; }; } +>exports : { v: { pb: {}; mb: 1; }; } +>{ v: { ...M } } : { v: { pb: {}; mb: 1; }; } +>v : { pb: {}; mb: 1; } +>{ ...M } : { pb: {}; mb: 1; } +>M : typeof import("./mb") + +=== /xb.js === +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +>M : typeof import("./ma") +>(null) : any + +module.exports = { v: { ...M } }; +>module.exports = { v: { ...M } } : { v: {}; } +>module.exports : { v: {}; } +>module : { exports: { v: {}; }; } +>exports : { v: {}; } +>{ v: { ...M } } : { v: {}; } +>v : {} +>{ ...M } : {} +>M : typeof import("./ma") + diff --git a/tsc/testdata/tests/cases/compiler/checkOrderSpreadCycle.ts b/tsc/testdata/tests/cases/compiler/checkOrderSpreadCycle.ts new file mode 100644 index 0000000000000..b9c220019d68b --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/checkOrderSpreadCycle.ts @@ -0,0 +1,31 @@ +// @checkOrder: default, reverse, isolated, typesfirst +// @strict: true +// @module: commonjs +// @target: es2020 +// @allowJs: true +// @declaration: true +// @outDir: /out +// @noImplicitReferences: true + +// @Filename: /ma.js +export { v as pa } from "./xa"; +export const ma = 1; + +// @Filename: /mb.js +export { v as pb } from "./xb"; +export const mb = 1; + +// @Filename: /xa.js +/** @type {typeof import("./mb")} */ +const M = /** @type {any} */ (null); +module.exports = { v: { ...M } }; + +// @Filename: /xb.js +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +module.exports = { v: { ...M } }; + +// @Filename: /ia.js +/** @type {typeof import("./ma")} */ +const M = /** @type {any} */ (null); +module.exports = { v: { ...M } }; From 39c95ba655927451bda1189d2c795d5e470efd03 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 22 Oct 2026 01:48:09 -0700 Subject: [PATCH 049/194] Add test for instantiation limit errors depending on check order An instantiation limit error is located at the node whose check reached the limit. When a result that reached it is computed while checking one file, a later file that reuses the result reports nothing, although checking it first reports the error there. --- ...dexedAccess(checkorder=default).errors.txt | 36 ++++++++++++ ...eIndexedAccess(checkorder=default).symbols | 58 +++++++++++++++++++ ...iveIndexedAccess(checkorder=default).types | 42 ++++++++++++++ ...exedAccess(checkorder=isolated).errors.txt | 36 ++++++++++++ ...IndexedAccess(checkorder=isolated).symbols | 58 +++++++++++++++++++ ...veIndexedAccess(checkorder=isolated).types | 42 ++++++++++++++ ...dexedAccess(checkorder=reverse).errors.txt | 36 ++++++++++++ ...eIndexedAccess(checkorder=reverse).symbols | 58 +++++++++++++++++++ ...iveIndexedAccess(checkorder=reverse).types | 42 ++++++++++++++ ...edAccess(checkorder=typesfirst).errors.txt | 36 ++++++++++++ ...dexedAccess(checkorder=typesfirst).symbols | 58 +++++++++++++++++++ ...IndexedAccess(checkorder=typesfirst).types | 42 ++++++++++++++ .../checkOrderRecursiveIndexedAccess.ts | 21 +++++++ 13 files changed, 565 insertions(+) create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=default).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=default).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=default).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=isolated).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=isolated).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=isolated).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=reverse).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=reverse).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=reverse).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=typesfirst).types create mode 100644 tsc/testdata/tests/cases/compiler/checkOrderRecursiveIndexedAccess.ts diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=default).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=default).errors.txt new file mode 100644 index 0000000000000..3fd3738f9b7f2 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=default).errors.txt @@ -0,0 +1,36 @@ +join.ts(3,5): error TS2322: Type '[string, ...Recur[]]' is not assignable to type 'Recur'. + Type '[string, ...Recur[]]' is not assignable to type 'Recur[number][]'. + Type 'string | Recur' is not assignable to type 'Recur[number] & (T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. + Type 'string' is not assignable to type 'Recur[number] & (T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. + Type 'string' is not assignable to type 'Recur[number] & (T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. + Type 'string' is not assignable to type '(T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. +recur.ts(3,9): error TS2536: Type 'number' cannot be used to index type 'Recur'. + + +==== recur.ts (1 errors) ==== + export type Recur = + (T extends (unknown[]) ? {} : { [K in keyof T]?: Recur}) | + [...Recur[number][]]; + ~~~~~~~~~~~~~~~~ +!!! error TS2536: Type 'number' cannot be used to index type 'Recur'. + +==== join.ts (1 errors) ==== + import { Recur } from "./recur"; + export function join(l: Recur[]): Recur { + return ['marker', ...l]; + ~~~~~~ +!!! error TS2322: Type '[string, ...Recur[]]' is not assignable to type 'Recur'. +!!! error TS2322: Type '[string, ...Recur[]]' is not assignable to type 'Recur[number][]'. +!!! error TS2322: Type 'string | Recur' is not assignable to type 'Recur[number] & (T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. +!!! error TS2322: Type 'string' is not assignable to type 'Recur[number] & (T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. +!!! error TS2322: Type 'string' is not assignable to type 'Recur[number] & (T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. +!!! error TS2322: Type 'string' is not assignable to type '(T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. + } + +==== a.ts (0 errors) ==== + import { Recur } from "./recur"; + import { join } from "./join"; + function a(l: Recur[]): void { + const x: Recur | undefined = join(l); + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=default).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=default).symbols new file mode 100644 index 0000000000000..d9f42dc0817f8 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=default).symbols @@ -0,0 +1,58 @@ +//// [tests/cases/compiler/checkOrderRecursiveIndexedAccess.ts] //// + +=== recur.ts === +export type Recur = +>Recur : Symbol(Recur, Decl(recur.ts, 0, 0)) +>T : Symbol(T, Decl(recur.ts, 0, 18)) + + (T extends (unknown[]) ? {} : { [K in keyof T]?: Recur}) | +>T : Symbol(T, Decl(recur.ts, 0, 18)) +>K : Symbol(K, Decl(recur.ts, 1, 38)) +>T : Symbol(T, Decl(recur.ts, 0, 18)) +>Recur : Symbol(Recur, Decl(recur.ts, 0, 0)) +>T : Symbol(T, Decl(recur.ts, 0, 18)) +>K : Symbol(K, Decl(recur.ts, 1, 38)) + + [...Recur[number][]]; +>Recur : Symbol(Recur, Decl(recur.ts, 0, 0)) +>T : Symbol(T, Decl(recur.ts, 0, 18)) + +=== join.ts === +import { Recur } from "./recur"; +>Recur : Symbol(Recur, Decl(join.ts, 0, 8)) + +export function join(l: Recur[]): Recur { +>join : Symbol(join, Decl(join.ts, 0, 32)) +>T : Symbol(T, Decl(join.ts, 1, 21)) +>l : Symbol(l, Decl(join.ts, 1, 24)) +>Recur : Symbol(Recur, Decl(join.ts, 0, 8)) +>T : Symbol(T, Decl(join.ts, 1, 21)) +>Recur : Symbol(Recur, Decl(join.ts, 0, 8)) +>T : Symbol(T, Decl(join.ts, 1, 21)) + + return ['marker', ...l]; +>l : Symbol(l, Decl(join.ts, 1, 24)) +} + +=== a.ts === +import { Recur } from "./recur"; +>Recur : Symbol(Recur, Decl(a.ts, 0, 8)) + +import { join } from "./join"; +>join : Symbol(join, Decl(a.ts, 1, 8)) + +function a(l: Recur[]): void { +>a : Symbol(a, Decl(a.ts, 1, 30)) +>T : Symbol(T, Decl(a.ts, 2, 11)) +>l : Symbol(l, Decl(a.ts, 2, 14)) +>Recur : Symbol(Recur, Decl(a.ts, 0, 8)) +>T : Symbol(T, Decl(a.ts, 2, 11)) + + const x: Recur | undefined = join(l); +>x : Symbol(x, Decl(a.ts, 3, 9)) +>Recur : Symbol(Recur, Decl(a.ts, 0, 8)) +>T : Symbol(T, Decl(a.ts, 2, 11)) +>join : Symbol(join, Decl(a.ts, 1, 8)) +>l : Symbol(l, Decl(a.ts, 2, 14)) +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=default).types b/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=default).types new file mode 100644 index 0000000000000..833609532a4c1 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=default).types @@ -0,0 +1,42 @@ +//// [tests/cases/compiler/checkOrderRecursiveIndexedAccess.ts] //// + +=== recur.ts === +export type Recur = +>Recur : Recur + + (T extends (unknown[]) ? {} : { [K in keyof T]?: Recur}) | + [...Recur[number][]]; + +=== join.ts === +import { Recur } from "./recur"; +>Recur : any + +export function join(l: Recur[]): Recur { +>join : (l: Recur[]) => Recur +>l : Recur[] + + return ['marker', ...l]; +>['marker', ...l] : [string, ...Recur[]] +>'marker' : "marker" +>...l : Recur +>l : Recur[] +} + +=== a.ts === +import { Recur } from "./recur"; +>Recur : any + +import { join } from "./join"; +>join : (l: Recur[]) => Recur + +function a(l: Recur[]): void { +>a : (l: Recur[]) => void +>l : Recur[] + + const x: Recur | undefined = join(l); +>x : Recur | undefined +>join(l) : Recur +>join : (l: Recur[]) => Recur +>l : Recur[] +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=isolated).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=isolated).errors.txt new file mode 100644 index 0000000000000..3fd3738f9b7f2 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=isolated).errors.txt @@ -0,0 +1,36 @@ +join.ts(3,5): error TS2322: Type '[string, ...Recur[]]' is not assignable to type 'Recur'. + Type '[string, ...Recur[]]' is not assignable to type 'Recur[number][]'. + Type 'string | Recur' is not assignable to type 'Recur[number] & (T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. + Type 'string' is not assignable to type 'Recur[number] & (T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. + Type 'string' is not assignable to type 'Recur[number] & (T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. + Type 'string' is not assignable to type '(T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. +recur.ts(3,9): error TS2536: Type 'number' cannot be used to index type 'Recur'. + + +==== recur.ts (1 errors) ==== + export type Recur = + (T extends (unknown[]) ? {} : { [K in keyof T]?: Recur}) | + [...Recur[number][]]; + ~~~~~~~~~~~~~~~~ +!!! error TS2536: Type 'number' cannot be used to index type 'Recur'. + +==== join.ts (1 errors) ==== + import { Recur } from "./recur"; + export function join(l: Recur[]): Recur { + return ['marker', ...l]; + ~~~~~~ +!!! error TS2322: Type '[string, ...Recur[]]' is not assignable to type 'Recur'. +!!! error TS2322: Type '[string, ...Recur[]]' is not assignable to type 'Recur[number][]'. +!!! error TS2322: Type 'string | Recur' is not assignable to type 'Recur[number] & (T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. +!!! error TS2322: Type 'string' is not assignable to type 'Recur[number] & (T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. +!!! error TS2322: Type 'string' is not assignable to type 'Recur[number] & (T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. +!!! error TS2322: Type 'string' is not assignable to type '(T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. + } + +==== a.ts (0 errors) ==== + import { Recur } from "./recur"; + import { join } from "./join"; + function a(l: Recur[]): void { + const x: Recur | undefined = join(l); + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=isolated).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=isolated).symbols new file mode 100644 index 0000000000000..d9f42dc0817f8 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=isolated).symbols @@ -0,0 +1,58 @@ +//// [tests/cases/compiler/checkOrderRecursiveIndexedAccess.ts] //// + +=== recur.ts === +export type Recur = +>Recur : Symbol(Recur, Decl(recur.ts, 0, 0)) +>T : Symbol(T, Decl(recur.ts, 0, 18)) + + (T extends (unknown[]) ? {} : { [K in keyof T]?: Recur}) | +>T : Symbol(T, Decl(recur.ts, 0, 18)) +>K : Symbol(K, Decl(recur.ts, 1, 38)) +>T : Symbol(T, Decl(recur.ts, 0, 18)) +>Recur : Symbol(Recur, Decl(recur.ts, 0, 0)) +>T : Symbol(T, Decl(recur.ts, 0, 18)) +>K : Symbol(K, Decl(recur.ts, 1, 38)) + + [...Recur[number][]]; +>Recur : Symbol(Recur, Decl(recur.ts, 0, 0)) +>T : Symbol(T, Decl(recur.ts, 0, 18)) + +=== join.ts === +import { Recur } from "./recur"; +>Recur : Symbol(Recur, Decl(join.ts, 0, 8)) + +export function join(l: Recur[]): Recur { +>join : Symbol(join, Decl(join.ts, 0, 32)) +>T : Symbol(T, Decl(join.ts, 1, 21)) +>l : Symbol(l, Decl(join.ts, 1, 24)) +>Recur : Symbol(Recur, Decl(join.ts, 0, 8)) +>T : Symbol(T, Decl(join.ts, 1, 21)) +>Recur : Symbol(Recur, Decl(join.ts, 0, 8)) +>T : Symbol(T, Decl(join.ts, 1, 21)) + + return ['marker', ...l]; +>l : Symbol(l, Decl(join.ts, 1, 24)) +} + +=== a.ts === +import { Recur } from "./recur"; +>Recur : Symbol(Recur, Decl(a.ts, 0, 8)) + +import { join } from "./join"; +>join : Symbol(join, Decl(a.ts, 1, 8)) + +function a(l: Recur[]): void { +>a : Symbol(a, Decl(a.ts, 1, 30)) +>T : Symbol(T, Decl(a.ts, 2, 11)) +>l : Symbol(l, Decl(a.ts, 2, 14)) +>Recur : Symbol(Recur, Decl(a.ts, 0, 8)) +>T : Symbol(T, Decl(a.ts, 2, 11)) + + const x: Recur | undefined = join(l); +>x : Symbol(x, Decl(a.ts, 3, 9)) +>Recur : Symbol(Recur, Decl(a.ts, 0, 8)) +>T : Symbol(T, Decl(a.ts, 2, 11)) +>join : Symbol(join, Decl(a.ts, 1, 8)) +>l : Symbol(l, Decl(a.ts, 2, 14)) +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=isolated).types b/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=isolated).types new file mode 100644 index 0000000000000..833609532a4c1 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=isolated).types @@ -0,0 +1,42 @@ +//// [tests/cases/compiler/checkOrderRecursiveIndexedAccess.ts] //// + +=== recur.ts === +export type Recur = +>Recur : Recur + + (T extends (unknown[]) ? {} : { [K in keyof T]?: Recur}) | + [...Recur[number][]]; + +=== join.ts === +import { Recur } from "./recur"; +>Recur : any + +export function join(l: Recur[]): Recur { +>join : (l: Recur[]) => Recur +>l : Recur[] + + return ['marker', ...l]; +>['marker', ...l] : [string, ...Recur[]] +>'marker' : "marker" +>...l : Recur +>l : Recur[] +} + +=== a.ts === +import { Recur } from "./recur"; +>Recur : any + +import { join } from "./join"; +>join : (l: Recur[]) => Recur + +function a(l: Recur[]): void { +>a : (l: Recur[]) => void +>l : Recur[] + + const x: Recur | undefined = join(l); +>x : Recur | undefined +>join(l) : Recur +>join : (l: Recur[]) => Recur +>l : Recur[] +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=reverse).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=reverse).errors.txt new file mode 100644 index 0000000000000..3fd3738f9b7f2 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=reverse).errors.txt @@ -0,0 +1,36 @@ +join.ts(3,5): error TS2322: Type '[string, ...Recur[]]' is not assignable to type 'Recur'. + Type '[string, ...Recur[]]' is not assignable to type 'Recur[number][]'. + Type 'string | Recur' is not assignable to type 'Recur[number] & (T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. + Type 'string' is not assignable to type 'Recur[number] & (T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. + Type 'string' is not assignable to type 'Recur[number] & (T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. + Type 'string' is not assignable to type '(T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. +recur.ts(3,9): error TS2536: Type 'number' cannot be used to index type 'Recur'. + + +==== recur.ts (1 errors) ==== + export type Recur = + (T extends (unknown[]) ? {} : { [K in keyof T]?: Recur}) | + [...Recur[number][]]; + ~~~~~~~~~~~~~~~~ +!!! error TS2536: Type 'number' cannot be used to index type 'Recur'. + +==== join.ts (1 errors) ==== + import { Recur } from "./recur"; + export function join(l: Recur[]): Recur { + return ['marker', ...l]; + ~~~~~~ +!!! error TS2322: Type '[string, ...Recur[]]' is not assignable to type 'Recur'. +!!! error TS2322: Type '[string, ...Recur[]]' is not assignable to type 'Recur[number][]'. +!!! error TS2322: Type 'string | Recur' is not assignable to type 'Recur[number] & (T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. +!!! error TS2322: Type 'string' is not assignable to type 'Recur[number] & (T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. +!!! error TS2322: Type 'string' is not assignable to type 'Recur[number] & (T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. +!!! error TS2322: Type 'string' is not assignable to type '(T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. + } + +==== a.ts (0 errors) ==== + import { Recur } from "./recur"; + import { join } from "./join"; + function a(l: Recur[]): void { + const x: Recur | undefined = join(l); + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=reverse).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=reverse).symbols new file mode 100644 index 0000000000000..d9f42dc0817f8 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=reverse).symbols @@ -0,0 +1,58 @@ +//// [tests/cases/compiler/checkOrderRecursiveIndexedAccess.ts] //// + +=== recur.ts === +export type Recur = +>Recur : Symbol(Recur, Decl(recur.ts, 0, 0)) +>T : Symbol(T, Decl(recur.ts, 0, 18)) + + (T extends (unknown[]) ? {} : { [K in keyof T]?: Recur}) | +>T : Symbol(T, Decl(recur.ts, 0, 18)) +>K : Symbol(K, Decl(recur.ts, 1, 38)) +>T : Symbol(T, Decl(recur.ts, 0, 18)) +>Recur : Symbol(Recur, Decl(recur.ts, 0, 0)) +>T : Symbol(T, Decl(recur.ts, 0, 18)) +>K : Symbol(K, Decl(recur.ts, 1, 38)) + + [...Recur[number][]]; +>Recur : Symbol(Recur, Decl(recur.ts, 0, 0)) +>T : Symbol(T, Decl(recur.ts, 0, 18)) + +=== join.ts === +import { Recur } from "./recur"; +>Recur : Symbol(Recur, Decl(join.ts, 0, 8)) + +export function join(l: Recur[]): Recur { +>join : Symbol(join, Decl(join.ts, 0, 32)) +>T : Symbol(T, Decl(join.ts, 1, 21)) +>l : Symbol(l, Decl(join.ts, 1, 24)) +>Recur : Symbol(Recur, Decl(join.ts, 0, 8)) +>T : Symbol(T, Decl(join.ts, 1, 21)) +>Recur : Symbol(Recur, Decl(join.ts, 0, 8)) +>T : Symbol(T, Decl(join.ts, 1, 21)) + + return ['marker', ...l]; +>l : Symbol(l, Decl(join.ts, 1, 24)) +} + +=== a.ts === +import { Recur } from "./recur"; +>Recur : Symbol(Recur, Decl(a.ts, 0, 8)) + +import { join } from "./join"; +>join : Symbol(join, Decl(a.ts, 1, 8)) + +function a(l: Recur[]): void { +>a : Symbol(a, Decl(a.ts, 1, 30)) +>T : Symbol(T, Decl(a.ts, 2, 11)) +>l : Symbol(l, Decl(a.ts, 2, 14)) +>Recur : Symbol(Recur, Decl(a.ts, 0, 8)) +>T : Symbol(T, Decl(a.ts, 2, 11)) + + const x: Recur | undefined = join(l); +>x : Symbol(x, Decl(a.ts, 3, 9)) +>Recur : Symbol(Recur, Decl(a.ts, 0, 8)) +>T : Symbol(T, Decl(a.ts, 2, 11)) +>join : Symbol(join, Decl(a.ts, 1, 8)) +>l : Symbol(l, Decl(a.ts, 2, 14)) +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=reverse).types b/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=reverse).types new file mode 100644 index 0000000000000..833609532a4c1 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=reverse).types @@ -0,0 +1,42 @@ +//// [tests/cases/compiler/checkOrderRecursiveIndexedAccess.ts] //// + +=== recur.ts === +export type Recur = +>Recur : Recur + + (T extends (unknown[]) ? {} : { [K in keyof T]?: Recur}) | + [...Recur[number][]]; + +=== join.ts === +import { Recur } from "./recur"; +>Recur : any + +export function join(l: Recur[]): Recur { +>join : (l: Recur[]) => Recur +>l : Recur[] + + return ['marker', ...l]; +>['marker', ...l] : [string, ...Recur[]] +>'marker' : "marker" +>...l : Recur +>l : Recur[] +} + +=== a.ts === +import { Recur } from "./recur"; +>Recur : any + +import { join } from "./join"; +>join : (l: Recur[]) => Recur + +function a(l: Recur[]): void { +>a : (l: Recur[]) => void +>l : Recur[] + + const x: Recur | undefined = join(l); +>x : Recur | undefined +>join(l) : Recur +>join : (l: Recur[]) => Recur +>l : Recur[] +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..3fd3738f9b7f2 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=typesfirst).errors.txt @@ -0,0 +1,36 @@ +join.ts(3,5): error TS2322: Type '[string, ...Recur[]]' is not assignable to type 'Recur'. + Type '[string, ...Recur[]]' is not assignable to type 'Recur[number][]'. + Type 'string | Recur' is not assignable to type 'Recur[number] & (T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. + Type 'string' is not assignable to type 'Recur[number] & (T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. + Type 'string' is not assignable to type 'Recur[number] & (T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. + Type 'string' is not assignable to type '(T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. +recur.ts(3,9): error TS2536: Type 'number' cannot be used to index type 'Recur'. + + +==== recur.ts (1 errors) ==== + export type Recur = + (T extends (unknown[]) ? {} : { [K in keyof T]?: Recur}) | + [...Recur[number][]]; + ~~~~~~~~~~~~~~~~ +!!! error TS2536: Type 'number' cannot be used to index type 'Recur'. + +==== join.ts (1 errors) ==== + import { Recur } from "./recur"; + export function join(l: Recur[]): Recur { + return ['marker', ...l]; + ~~~~~~ +!!! error TS2322: Type '[string, ...Recur[]]' is not assignable to type 'Recur'. +!!! error TS2322: Type '[string, ...Recur[]]' is not assignable to type 'Recur[number][]'. +!!! error TS2322: Type 'string | Recur' is not assignable to type 'Recur[number] & (T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. +!!! error TS2322: Type 'string' is not assignable to type 'Recur[number] & (T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. +!!! error TS2322: Type 'string' is not assignable to type 'Recur[number] & (T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. +!!! error TS2322: Type 'string' is not assignable to type '(T extends unknown[] ? {} : { [K in keyof T]?: Recur | undefined; })[number]'. + } + +==== a.ts (0 errors) ==== + import { Recur } from "./recur"; + import { join } from "./join"; + function a(l: Recur[]): void { + const x: Recur | undefined = join(l); + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..d9f42dc0817f8 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=typesfirst).symbols @@ -0,0 +1,58 @@ +//// [tests/cases/compiler/checkOrderRecursiveIndexedAccess.ts] //// + +=== recur.ts === +export type Recur = +>Recur : Symbol(Recur, Decl(recur.ts, 0, 0)) +>T : Symbol(T, Decl(recur.ts, 0, 18)) + + (T extends (unknown[]) ? {} : { [K in keyof T]?: Recur}) | +>T : Symbol(T, Decl(recur.ts, 0, 18)) +>K : Symbol(K, Decl(recur.ts, 1, 38)) +>T : Symbol(T, Decl(recur.ts, 0, 18)) +>Recur : Symbol(Recur, Decl(recur.ts, 0, 0)) +>T : Symbol(T, Decl(recur.ts, 0, 18)) +>K : Symbol(K, Decl(recur.ts, 1, 38)) + + [...Recur[number][]]; +>Recur : Symbol(Recur, Decl(recur.ts, 0, 0)) +>T : Symbol(T, Decl(recur.ts, 0, 18)) + +=== join.ts === +import { Recur } from "./recur"; +>Recur : Symbol(Recur, Decl(join.ts, 0, 8)) + +export function join(l: Recur[]): Recur { +>join : Symbol(join, Decl(join.ts, 0, 32)) +>T : Symbol(T, Decl(join.ts, 1, 21)) +>l : Symbol(l, Decl(join.ts, 1, 24)) +>Recur : Symbol(Recur, Decl(join.ts, 0, 8)) +>T : Symbol(T, Decl(join.ts, 1, 21)) +>Recur : Symbol(Recur, Decl(join.ts, 0, 8)) +>T : Symbol(T, Decl(join.ts, 1, 21)) + + return ['marker', ...l]; +>l : Symbol(l, Decl(join.ts, 1, 24)) +} + +=== a.ts === +import { Recur } from "./recur"; +>Recur : Symbol(Recur, Decl(a.ts, 0, 8)) + +import { join } from "./join"; +>join : Symbol(join, Decl(a.ts, 1, 8)) + +function a(l: Recur[]): void { +>a : Symbol(a, Decl(a.ts, 1, 30)) +>T : Symbol(T, Decl(a.ts, 2, 11)) +>l : Symbol(l, Decl(a.ts, 2, 14)) +>Recur : Symbol(Recur, Decl(a.ts, 0, 8)) +>T : Symbol(T, Decl(a.ts, 2, 11)) + + const x: Recur | undefined = join(l); +>x : Symbol(x, Decl(a.ts, 3, 9)) +>Recur : Symbol(Recur, Decl(a.ts, 0, 8)) +>T : Symbol(T, Decl(a.ts, 2, 11)) +>join : Symbol(join, Decl(a.ts, 1, 8)) +>l : Symbol(l, Decl(a.ts, 2, 14)) +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=typesfirst).types new file mode 100644 index 0000000000000..833609532a4c1 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderRecursiveIndexedAccess(checkorder=typesfirst).types @@ -0,0 +1,42 @@ +//// [tests/cases/compiler/checkOrderRecursiveIndexedAccess.ts] //// + +=== recur.ts === +export type Recur = +>Recur : Recur + + (T extends (unknown[]) ? {} : { [K in keyof T]?: Recur}) | + [...Recur[number][]]; + +=== join.ts === +import { Recur } from "./recur"; +>Recur : any + +export function join(l: Recur[]): Recur { +>join : (l: Recur[]) => Recur +>l : Recur[] + + return ['marker', ...l]; +>['marker', ...l] : [string, ...Recur[]] +>'marker' : "marker" +>...l : Recur +>l : Recur[] +} + +=== a.ts === +import { Recur } from "./recur"; +>Recur : any + +import { join } from "./join"; +>join : (l: Recur[]) => Recur + +function a(l: Recur[]): void { +>a : (l: Recur[]) => void +>l : Recur[] + + const x: Recur | undefined = join(l); +>x : Recur | undefined +>join(l) : Recur +>join : (l: Recur[]) => Recur +>l : Recur[] +} + diff --git a/tsc/testdata/tests/cases/compiler/checkOrderRecursiveIndexedAccess.ts b/tsc/testdata/tests/cases/compiler/checkOrderRecursiveIndexedAccess.ts new file mode 100644 index 0000000000000..68f93ef70343d --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/checkOrderRecursiveIndexedAccess.ts @@ -0,0 +1,21 @@ +// @noEmit: true +// @strict: true +// @checkOrder: default, reverse, isolated, typesfirst + +// @filename: recur.ts +export type Recur = + (T extends (unknown[]) ? {} : { [K in keyof T]?: Recur}) | + [...Recur[number][]]; + +// @filename: join.ts +import { Recur } from "./recur"; +export function join(l: Recur[]): Recur { + return ['marker', ...l]; +} + +// @filename: a.ts +import { Recur } from "./recur"; +import { join } from "./join"; +function a(l: Recur[]): void { + const x: Recur | undefined = join(l); +} From ff26fda73376cc20c4840de1cad439d50e80282d Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 22 Oct 2026 09:31:24 -0700 Subject: [PATCH 050/194] Add a test for check order with circular type parameter defaults When type parameter defaults form a cycle, the default found to be circular is whichever was resolved first. Checking files in a different order blames a different type parameter, and checking each file in isolation blames each in the other's file, so no error is reported at all. --- ...larDefaults(checkorder=default).errors.txt | 15 +++++++++ ...derCircularDefaults(checkorder=default).js | 31 ++++++++++++++++++ ...rcularDefaults(checkorder=default).symbols | 32 +++++++++++++++++++ ...CircularDefaults(checkorder=default).types | 22 +++++++++++++ ...erCircularDefaults(checkorder=isolated).js | 31 ++++++++++++++++++ ...cularDefaults(checkorder=isolated).symbols | 32 +++++++++++++++++++ ...ircularDefaults(checkorder=isolated).types | 22 +++++++++++++ ...larDefaults(checkorder=reverse).errors.txt | 15 +++++++++ ...derCircularDefaults(checkorder=reverse).js | 31 ++++++++++++++++++ ...rcularDefaults(checkorder=reverse).symbols | 32 +++++++++++++++++++ ...CircularDefaults(checkorder=reverse).types | 22 +++++++++++++ ...Defaults(checkorder=typesfirst).errors.txt | 15 +++++++++ ...CircularDefaults(checkorder=typesfirst).js | 31 ++++++++++++++++++ ...larDefaults(checkorder=typesfirst).symbols | 32 +++++++++++++++++++ ...cularDefaults(checkorder=typesfirst).types | 22 +++++++++++++ .../compiler/checkOrderCircularDefaults.ts | 16 ++++++++++ 16 files changed, 401 insertions(+) create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=isolated).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=isolated).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=isolated).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=typesfirst).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=typesfirst).types create mode 100644 tsc/testdata/tests/cases/compiler/checkOrderCircularDefaults.ts diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).errors.txt new file mode 100644 index 0000000000000..5c28d3ee0a214 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).errors.txt @@ -0,0 +1,15 @@ +a.ts(2,24): error TS2716: Type parameter 'T' has a circular default. + + +==== a.ts (1 errors) ==== + import type { B } from "./b"; + export interface A { a: T } + ~ +!!! error TS2716: Type parameter 'T' has a circular default. + export declare const a: A; + +==== b.ts (0 errors) ==== + import type { A } from "./a"; + export interface B { b: U } + export declare const b: B; + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).js b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).js new file mode 100644 index 0000000000000..8f10482f060d7 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).js @@ -0,0 +1,31 @@ +//// [tests/cases/compiler/checkOrderCircularDefaults.ts] //// + +//// [a.ts] +import type { B } from "./b"; +export interface A { a: T } +export declare const a: A; + +//// [b.ts] +import type { A } from "./a"; +export interface B { b: U } +export declare const b: B; + + +//// [b.js] +export {}; +//// [a.js] +export {}; + + +//// [b.d.ts] +import type { A } from "./a"; +export interface B { + b: U; +} +export declare const b: B; +//// [a.d.ts] +import type { B } from "./b"; +export interface A { + a: T; +} +export declare const a: A; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).symbols new file mode 100644 index 0000000000000..72d2e540fd379 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).symbols @@ -0,0 +1,32 @@ +//// [tests/cases/compiler/checkOrderCircularDefaults.ts] //// + +=== a.ts === +import type { B } from "./b"; +>B : Symbol(B, Decl(a.ts, 0, 13)) + +export interface A { a: T } +>A : Symbol(A, Decl(a.ts, 0, 29)) +>T : Symbol(T, Decl(a.ts, 1, 19)) +>B : Symbol(B, Decl(a.ts, 0, 13)) +>a : Symbol(A.a, Decl(a.ts, 1, 27)) +>T : Symbol(T, Decl(a.ts, 1, 19)) + +export declare const a: A; +>a : Symbol(a, Decl(a.ts, 2, 20)) +>A : Symbol(A, Decl(a.ts, 0, 29)) + +=== b.ts === +import type { A } from "./a"; +>A : Symbol(A, Decl(b.ts, 0, 13)) + +export interface B { b: U } +>B : Symbol(B, Decl(b.ts, 0, 29)) +>U : Symbol(U, Decl(b.ts, 1, 19)) +>A : Symbol(A, Decl(b.ts, 0, 13)) +>b : Symbol(B.b, Decl(b.ts, 1, 27)) +>U : Symbol(U, Decl(b.ts, 1, 19)) + +export declare const b: B; +>b : Symbol(b, Decl(b.ts, 2, 20)) +>B : Symbol(B, Decl(b.ts, 0, 29)) + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).types b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).types new file mode 100644 index 0000000000000..145f91d78caf3 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).types @@ -0,0 +1,22 @@ +//// [tests/cases/compiler/checkOrderCircularDefaults.ts] //// + +=== a.ts === +import type { B } from "./b"; +>B : B + +export interface A { a: T } +>a : T + +export declare const a: A; +>a : A + +=== b.ts === +import type { A } from "./a"; +>A : A + +export interface B { b: U } +>b : U + +export declare const b: B; +>b : B> + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=isolated).js b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=isolated).js new file mode 100644 index 0000000000000..8f10482f060d7 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=isolated).js @@ -0,0 +1,31 @@ +//// [tests/cases/compiler/checkOrderCircularDefaults.ts] //// + +//// [a.ts] +import type { B } from "./b"; +export interface A { a: T } +export declare const a: A; + +//// [b.ts] +import type { A } from "./a"; +export interface B { b: U } +export declare const b: B; + + +//// [b.js] +export {}; +//// [a.js] +export {}; + + +//// [b.d.ts] +import type { A } from "./a"; +export interface B { + b: U; +} +export declare const b: B; +//// [a.d.ts] +import type { B } from "./b"; +export interface A { + a: T; +} +export declare const a: A; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=isolated).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=isolated).symbols new file mode 100644 index 0000000000000..72d2e540fd379 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=isolated).symbols @@ -0,0 +1,32 @@ +//// [tests/cases/compiler/checkOrderCircularDefaults.ts] //// + +=== a.ts === +import type { B } from "./b"; +>B : Symbol(B, Decl(a.ts, 0, 13)) + +export interface A { a: T } +>A : Symbol(A, Decl(a.ts, 0, 29)) +>T : Symbol(T, Decl(a.ts, 1, 19)) +>B : Symbol(B, Decl(a.ts, 0, 13)) +>a : Symbol(A.a, Decl(a.ts, 1, 27)) +>T : Symbol(T, Decl(a.ts, 1, 19)) + +export declare const a: A; +>a : Symbol(a, Decl(a.ts, 2, 20)) +>A : Symbol(A, Decl(a.ts, 0, 29)) + +=== b.ts === +import type { A } from "./a"; +>A : Symbol(A, Decl(b.ts, 0, 13)) + +export interface B { b: U } +>B : Symbol(B, Decl(b.ts, 0, 29)) +>U : Symbol(U, Decl(b.ts, 1, 19)) +>A : Symbol(A, Decl(b.ts, 0, 13)) +>b : Symbol(B.b, Decl(b.ts, 1, 27)) +>U : Symbol(U, Decl(b.ts, 1, 19)) + +export declare const b: B; +>b : Symbol(b, Decl(b.ts, 2, 20)) +>B : Symbol(B, Decl(b.ts, 0, 29)) + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=isolated).types b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=isolated).types new file mode 100644 index 0000000000000..145f91d78caf3 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=isolated).types @@ -0,0 +1,22 @@ +//// [tests/cases/compiler/checkOrderCircularDefaults.ts] //// + +=== a.ts === +import type { B } from "./b"; +>B : B + +export interface A { a: T } +>a : T + +export declare const a: A; +>a : A + +=== b.ts === +import type { A } from "./a"; +>A : A + +export interface B { b: U } +>b : U + +export declare const b: B; +>b : B> + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).errors.txt new file mode 100644 index 0000000000000..4dee4171e029f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).errors.txt @@ -0,0 +1,15 @@ +b.ts(2,24): error TS2716: Type parameter 'U' has a circular default. + + +==== a.ts (0 errors) ==== + import type { B } from "./b"; + export interface A { a: T } + export declare const a: A; + +==== b.ts (1 errors) ==== + import type { A } from "./a"; + export interface B { b: U } + ~ +!!! error TS2716: Type parameter 'U' has a circular default. + export declare const b: B; + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).js b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).js new file mode 100644 index 0000000000000..8f10482f060d7 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).js @@ -0,0 +1,31 @@ +//// [tests/cases/compiler/checkOrderCircularDefaults.ts] //// + +//// [a.ts] +import type { B } from "./b"; +export interface A { a: T } +export declare const a: A; + +//// [b.ts] +import type { A } from "./a"; +export interface B { b: U } +export declare const b: B; + + +//// [b.js] +export {}; +//// [a.js] +export {}; + + +//// [b.d.ts] +import type { A } from "./a"; +export interface B { + b: U; +} +export declare const b: B; +//// [a.d.ts] +import type { B } from "./b"; +export interface A { + a: T; +} +export declare const a: A; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).symbols new file mode 100644 index 0000000000000..72d2e540fd379 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).symbols @@ -0,0 +1,32 @@ +//// [tests/cases/compiler/checkOrderCircularDefaults.ts] //// + +=== a.ts === +import type { B } from "./b"; +>B : Symbol(B, Decl(a.ts, 0, 13)) + +export interface A { a: T } +>A : Symbol(A, Decl(a.ts, 0, 29)) +>T : Symbol(T, Decl(a.ts, 1, 19)) +>B : Symbol(B, Decl(a.ts, 0, 13)) +>a : Symbol(A.a, Decl(a.ts, 1, 27)) +>T : Symbol(T, Decl(a.ts, 1, 19)) + +export declare const a: A; +>a : Symbol(a, Decl(a.ts, 2, 20)) +>A : Symbol(A, Decl(a.ts, 0, 29)) + +=== b.ts === +import type { A } from "./a"; +>A : Symbol(A, Decl(b.ts, 0, 13)) + +export interface B { b: U } +>B : Symbol(B, Decl(b.ts, 0, 29)) +>U : Symbol(U, Decl(b.ts, 1, 19)) +>A : Symbol(A, Decl(b.ts, 0, 13)) +>b : Symbol(B.b, Decl(b.ts, 1, 27)) +>U : Symbol(U, Decl(b.ts, 1, 19)) + +export declare const b: B; +>b : Symbol(b, Decl(b.ts, 2, 20)) +>B : Symbol(B, Decl(b.ts, 0, 29)) + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).types b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).types new file mode 100644 index 0000000000000..a88d998c374ec --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).types @@ -0,0 +1,22 @@ +//// [tests/cases/compiler/checkOrderCircularDefaults.ts] //// + +=== a.ts === +import type { B } from "./b"; +>B : B + +export interface A { a: T } +>a : T + +export declare const a: A; +>a : A> + +=== b.ts === +import type { A } from "./a"; +>A : A + +export interface B { b: U } +>b : U + +export declare const b: B; +>b : B + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..5c28d3ee0a214 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=typesfirst).errors.txt @@ -0,0 +1,15 @@ +a.ts(2,24): error TS2716: Type parameter 'T' has a circular default. + + +==== a.ts (1 errors) ==== + import type { B } from "./b"; + export interface A { a: T } + ~ +!!! error TS2716: Type parameter 'T' has a circular default. + export declare const a: A; + +==== b.ts (0 errors) ==== + import type { A } from "./a"; + export interface B { b: U } + export declare const b: B; + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=typesfirst).js b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=typesfirst).js new file mode 100644 index 0000000000000..8f10482f060d7 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=typesfirst).js @@ -0,0 +1,31 @@ +//// [tests/cases/compiler/checkOrderCircularDefaults.ts] //// + +//// [a.ts] +import type { B } from "./b"; +export interface A { a: T } +export declare const a: A; + +//// [b.ts] +import type { A } from "./a"; +export interface B { b: U } +export declare const b: B; + + +//// [b.js] +export {}; +//// [a.js] +export {}; + + +//// [b.d.ts] +import type { A } from "./a"; +export interface B { + b: U; +} +export declare const b: B; +//// [a.d.ts] +import type { B } from "./b"; +export interface A { + a: T; +} +export declare const a: A; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..72d2e540fd379 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=typesfirst).symbols @@ -0,0 +1,32 @@ +//// [tests/cases/compiler/checkOrderCircularDefaults.ts] //// + +=== a.ts === +import type { B } from "./b"; +>B : Symbol(B, Decl(a.ts, 0, 13)) + +export interface A { a: T } +>A : Symbol(A, Decl(a.ts, 0, 29)) +>T : Symbol(T, Decl(a.ts, 1, 19)) +>B : Symbol(B, Decl(a.ts, 0, 13)) +>a : Symbol(A.a, Decl(a.ts, 1, 27)) +>T : Symbol(T, Decl(a.ts, 1, 19)) + +export declare const a: A; +>a : Symbol(a, Decl(a.ts, 2, 20)) +>A : Symbol(A, Decl(a.ts, 0, 29)) + +=== b.ts === +import type { A } from "./a"; +>A : Symbol(A, Decl(b.ts, 0, 13)) + +export interface B { b: U } +>B : Symbol(B, Decl(b.ts, 0, 29)) +>U : Symbol(U, Decl(b.ts, 1, 19)) +>A : Symbol(A, Decl(b.ts, 0, 13)) +>b : Symbol(B.b, Decl(b.ts, 1, 27)) +>U : Symbol(U, Decl(b.ts, 1, 19)) + +export declare const b: B; +>b : Symbol(b, Decl(b.ts, 2, 20)) +>B : Symbol(B, Decl(b.ts, 0, 29)) + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=typesfirst).types new file mode 100644 index 0000000000000..145f91d78caf3 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=typesfirst).types @@ -0,0 +1,22 @@ +//// [tests/cases/compiler/checkOrderCircularDefaults.ts] //// + +=== a.ts === +import type { B } from "./b"; +>B : B + +export interface A { a: T } +>a : T + +export declare const a: A; +>a : A + +=== b.ts === +import type { A } from "./a"; +>A : A + +export interface B { b: U } +>b : U + +export declare const b: B; +>b : B> + diff --git a/tsc/testdata/tests/cases/compiler/checkOrderCircularDefaults.ts b/tsc/testdata/tests/cases/compiler/checkOrderCircularDefaults.ts new file mode 100644 index 0000000000000..0232579d1f4f7 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/checkOrderCircularDefaults.ts @@ -0,0 +1,16 @@ +// @strict: true +// @declaration: true +// @checkOrder: default, reverse, isolated, typesfirst + +// Which type parameter of a cycle of defaults is circular must not depend +// on which default is resolved first. + +// @filename: a.ts +import type { B } from "./b"; +export interface A { a: T } +export declare const a: A; + +// @filename: b.ts +import type { A } from "./a"; +export interface B { b: U } +export declare const b: B; From 23838257e87db268ac1f97288eb6758edafdfd99 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 22 Oct 2026 09:47:18 -0700 Subject: [PATCH 051/194] Add a test for check order with a circular constraint The location reported as the origin of a circular constraint is whichever use of the type parameter resolves its constraint first, so it differs between check orders even though the cycle is in the declaration itself. --- ...rConstraint(checkorder=default).errors.txt | 38 +++++++++++++++++ ...rCircularConstraint(checkorder=default).js | 30 ++++++++++++++ ...ularConstraint(checkorder=default).symbols | 36 ++++++++++++++++ ...rcularConstraint(checkorder=default).types | 41 +++++++++++++++++++ ...Constraint(checkorder=isolated).errors.txt | 37 +++++++++++++++++ ...CircularConstraint(checkorder=isolated).js | 30 ++++++++++++++ ...larConstraint(checkorder=isolated).symbols | 36 ++++++++++++++++ ...cularConstraint(checkorder=isolated).types | 41 +++++++++++++++++++ ...rConstraint(checkorder=reverse).errors.txt | 38 +++++++++++++++++ ...rCircularConstraint(checkorder=reverse).js | 30 ++++++++++++++ ...ularConstraint(checkorder=reverse).symbols | 36 ++++++++++++++++ ...rcularConstraint(checkorder=reverse).types | 41 +++++++++++++++++++ ...nstraint(checkorder=typesfirst).errors.txt | 38 +++++++++++++++++ ...rcularConstraint(checkorder=typesfirst).js | 30 ++++++++++++++ ...rConstraint(checkorder=typesfirst).symbols | 36 ++++++++++++++++ ...larConstraint(checkorder=typesfirst).types | 41 +++++++++++++++++++ .../compiler/checkOrderCircularConstraint.ts | 14 +++++++ 17 files changed, 593 insertions(+) create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=default).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=default).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=default).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=default).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=isolated).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=isolated).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=isolated).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=isolated).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=reverse).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=reverse).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=reverse).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=reverse).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=typesfirst).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=typesfirst).types create mode 100644 tsc/testdata/tests/cases/compiler/checkOrderCircularConstraint.ts diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=default).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=default).errors.txt new file mode 100644 index 0000000000000..938f4b7bb63d2 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=default).errors.txt @@ -0,0 +1,38 @@ +checkOrderCircularConstraint.ts(4,19): error TS2313: Type parameter 'T' has a circular constraint. +checkOrderCircularConstraint.ts(7,19): error TS2339: Property 'foo' does not exist on type 'T'. +checkOrderCircularConstraint.ts(8,21): error TS2351: This expression is not constructable. + Type 'unknown' has no construct signatures. +checkOrderCircularConstraint.ts(9,17): error TS7053: Element implicitly has an 'any' type because expression of type '1' can't be used to index type 'unknown'. + Property '1' does not exist on type 'unknown'. +checkOrderCircularConstraint.ts(10,17): error TS2349: This expression is not callable. + Type 'unknown' has no call signatures. + + +==== checkOrderCircularConstraint.ts (5 errors) ==== + // A circular constraint of a declared type parameter is reported at its + // declaration, regardless of which use resolves the constraint first. + + class A { + ~ +!!! error TS2313: Type parameter 'T' has a circular constraint. +!!! related TS2751 checkOrderCircularConstraint.ts:7:17: Circularity originates in type at this location. + foo() { + var x!: T; + var a = x.foo(); + ~~~ +!!! error TS2339: Property 'foo' does not exist on type 'T'. + var b = new x(123); + ~ +!!! error TS2351: This expression is not constructable. +!!! error TS2351: Type 'unknown' has no construct signatures. + var c = x[1]; + ~~~~ +!!! error TS7053: Element implicitly has an 'any' type because expression of type '1' can't be used to index type 'unknown'. +!!! error TS7053: Property '1' does not exist on type 'unknown'. + var d = x(); + ~ +!!! error TS2349: This expression is not callable. +!!! error TS2349: Type 'unknown' has no call signatures. + } + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=default).js b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=default).js new file mode 100644 index 0000000000000..3c72daa68bbd3 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=default).js @@ -0,0 +1,30 @@ +//// [tests/cases/compiler/checkOrderCircularConstraint.ts] //// + +//// [checkOrderCircularConstraint.ts] +// A circular constraint of a declared type parameter is reported at its +// declaration, regardless of which use resolves the constraint first. + +class A { + foo() { + var x!: T; + var a = x.foo(); + var b = new x(123); + var c = x[1]; + var d = x(); + } +} + + +//// [checkOrderCircularConstraint.js] +"use strict"; +// A circular constraint of a declared type parameter is reported at its +// declaration, regardless of which use resolves the constraint first. +class A { + foo() { + var x; + var a = x.foo(); + var b = new x(123); + var c = x[1]; + var d = x(); + } +} diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=default).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=default).symbols new file mode 100644 index 0000000000000..9b87b04754b9f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=default).symbols @@ -0,0 +1,36 @@ +//// [tests/cases/compiler/checkOrderCircularConstraint.ts] //// + +=== checkOrderCircularConstraint.ts === +// A circular constraint of a declared type parameter is reported at its +// declaration, regardless of which use resolves the constraint first. + +class A { +>A : Symbol(A, Decl(checkOrderCircularConstraint.ts, 0, 0)) +>T : Symbol(T, Decl(checkOrderCircularConstraint.ts, 3, 8)) +>T : Symbol(T, Decl(checkOrderCircularConstraint.ts, 3, 8)) + + foo() { +>foo : Symbol(A.foo, Decl(checkOrderCircularConstraint.ts, 3, 22)) + + var x!: T; +>x : Symbol(x, Decl(checkOrderCircularConstraint.ts, 5, 11)) +>T : Symbol(T, Decl(checkOrderCircularConstraint.ts, 3, 8)) + + var a = x.foo(); +>a : Symbol(a, Decl(checkOrderCircularConstraint.ts, 6, 11)) +>x : Symbol(x, Decl(checkOrderCircularConstraint.ts, 5, 11)) + + var b = new x(123); +>b : Symbol(b, Decl(checkOrderCircularConstraint.ts, 7, 11)) +>x : Symbol(x, Decl(checkOrderCircularConstraint.ts, 5, 11)) + + var c = x[1]; +>c : Symbol(c, Decl(checkOrderCircularConstraint.ts, 8, 11)) +>x : Symbol(x, Decl(checkOrderCircularConstraint.ts, 5, 11)) + + var d = x(); +>d : Symbol(d, Decl(checkOrderCircularConstraint.ts, 9, 11)) +>x : Symbol(x, Decl(checkOrderCircularConstraint.ts, 5, 11)) + } +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=default).types b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=default).types new file mode 100644 index 0000000000000..370c13c086d5a --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=default).types @@ -0,0 +1,41 @@ +//// [tests/cases/compiler/checkOrderCircularConstraint.ts] //// + +=== checkOrderCircularConstraint.ts === +// A circular constraint of a declared type parameter is reported at its +// declaration, regardless of which use resolves the constraint first. + +class A { +>A : A + + foo() { +>foo : () => void + + var x!: T; +>x : T + + var a = x.foo(); +>a : any +>x.foo() : any +>x.foo : any +>x : T +>foo : any + + var b = new x(123); +>b : any +>new x(123) : any +>x : T +>123 : 123 + + var c = x[1]; +>c : any +>x[1] : any +>x : T +>1 : 1 + + var d = x(); +>d : any +>x() : any +>x : T + } +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=isolated).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=isolated).errors.txt new file mode 100644 index 0000000000000..9309ae4c7eb15 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=isolated).errors.txt @@ -0,0 +1,37 @@ +checkOrderCircularConstraint.ts(4,19): error TS2313: Type parameter 'T' has a circular constraint. +checkOrderCircularConstraint.ts(7,19): error TS2339: Property 'foo' does not exist on type 'T'. +checkOrderCircularConstraint.ts(8,21): error TS2351: This expression is not constructable. + Type 'unknown' has no construct signatures. +checkOrderCircularConstraint.ts(9,17): error TS7053: Element implicitly has an 'any' type because expression of type '1' can't be used to index type 'unknown'. + Property '1' does not exist on type 'unknown'. +checkOrderCircularConstraint.ts(10,17): error TS2349: This expression is not callable. + Type 'unknown' has no call signatures. + + +==== checkOrderCircularConstraint.ts (5 errors) ==== + // A circular constraint of a declared type parameter is reported at its + // declaration, regardless of which use resolves the constraint first. + + class A { + ~ +!!! error TS2313: Type parameter 'T' has a circular constraint. + foo() { + var x!: T; + var a = x.foo(); + ~~~ +!!! error TS2339: Property 'foo' does not exist on type 'T'. + var b = new x(123); + ~ +!!! error TS2351: This expression is not constructable. +!!! error TS2351: Type 'unknown' has no construct signatures. + var c = x[1]; + ~~~~ +!!! error TS7053: Element implicitly has an 'any' type because expression of type '1' can't be used to index type 'unknown'. +!!! error TS7053: Property '1' does not exist on type 'unknown'. + var d = x(); + ~ +!!! error TS2349: This expression is not callable. +!!! error TS2349: Type 'unknown' has no call signatures. + } + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=isolated).js b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=isolated).js new file mode 100644 index 0000000000000..3c72daa68bbd3 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=isolated).js @@ -0,0 +1,30 @@ +//// [tests/cases/compiler/checkOrderCircularConstraint.ts] //// + +//// [checkOrderCircularConstraint.ts] +// A circular constraint of a declared type parameter is reported at its +// declaration, regardless of which use resolves the constraint first. + +class A { + foo() { + var x!: T; + var a = x.foo(); + var b = new x(123); + var c = x[1]; + var d = x(); + } +} + + +//// [checkOrderCircularConstraint.js] +"use strict"; +// A circular constraint of a declared type parameter is reported at its +// declaration, regardless of which use resolves the constraint first. +class A { + foo() { + var x; + var a = x.foo(); + var b = new x(123); + var c = x[1]; + var d = x(); + } +} diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=isolated).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=isolated).symbols new file mode 100644 index 0000000000000..9b87b04754b9f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=isolated).symbols @@ -0,0 +1,36 @@ +//// [tests/cases/compiler/checkOrderCircularConstraint.ts] //// + +=== checkOrderCircularConstraint.ts === +// A circular constraint of a declared type parameter is reported at its +// declaration, regardless of which use resolves the constraint first. + +class A { +>A : Symbol(A, Decl(checkOrderCircularConstraint.ts, 0, 0)) +>T : Symbol(T, Decl(checkOrderCircularConstraint.ts, 3, 8)) +>T : Symbol(T, Decl(checkOrderCircularConstraint.ts, 3, 8)) + + foo() { +>foo : Symbol(A.foo, Decl(checkOrderCircularConstraint.ts, 3, 22)) + + var x!: T; +>x : Symbol(x, Decl(checkOrderCircularConstraint.ts, 5, 11)) +>T : Symbol(T, Decl(checkOrderCircularConstraint.ts, 3, 8)) + + var a = x.foo(); +>a : Symbol(a, Decl(checkOrderCircularConstraint.ts, 6, 11)) +>x : Symbol(x, Decl(checkOrderCircularConstraint.ts, 5, 11)) + + var b = new x(123); +>b : Symbol(b, Decl(checkOrderCircularConstraint.ts, 7, 11)) +>x : Symbol(x, Decl(checkOrderCircularConstraint.ts, 5, 11)) + + var c = x[1]; +>c : Symbol(c, Decl(checkOrderCircularConstraint.ts, 8, 11)) +>x : Symbol(x, Decl(checkOrderCircularConstraint.ts, 5, 11)) + + var d = x(); +>d : Symbol(d, Decl(checkOrderCircularConstraint.ts, 9, 11)) +>x : Symbol(x, Decl(checkOrderCircularConstraint.ts, 5, 11)) + } +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=isolated).types b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=isolated).types new file mode 100644 index 0000000000000..370c13c086d5a --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=isolated).types @@ -0,0 +1,41 @@ +//// [tests/cases/compiler/checkOrderCircularConstraint.ts] //// + +=== checkOrderCircularConstraint.ts === +// A circular constraint of a declared type parameter is reported at its +// declaration, regardless of which use resolves the constraint first. + +class A { +>A : A + + foo() { +>foo : () => void + + var x!: T; +>x : T + + var a = x.foo(); +>a : any +>x.foo() : any +>x.foo : any +>x : T +>foo : any + + var b = new x(123); +>b : any +>new x(123) : any +>x : T +>123 : 123 + + var c = x[1]; +>c : any +>x[1] : any +>x : T +>1 : 1 + + var d = x(); +>d : any +>x() : any +>x : T + } +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=reverse).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=reverse).errors.txt new file mode 100644 index 0000000000000..938f4b7bb63d2 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=reverse).errors.txt @@ -0,0 +1,38 @@ +checkOrderCircularConstraint.ts(4,19): error TS2313: Type parameter 'T' has a circular constraint. +checkOrderCircularConstraint.ts(7,19): error TS2339: Property 'foo' does not exist on type 'T'. +checkOrderCircularConstraint.ts(8,21): error TS2351: This expression is not constructable. + Type 'unknown' has no construct signatures. +checkOrderCircularConstraint.ts(9,17): error TS7053: Element implicitly has an 'any' type because expression of type '1' can't be used to index type 'unknown'. + Property '1' does not exist on type 'unknown'. +checkOrderCircularConstraint.ts(10,17): error TS2349: This expression is not callable. + Type 'unknown' has no call signatures. + + +==== checkOrderCircularConstraint.ts (5 errors) ==== + // A circular constraint of a declared type parameter is reported at its + // declaration, regardless of which use resolves the constraint first. + + class A { + ~ +!!! error TS2313: Type parameter 'T' has a circular constraint. +!!! related TS2751 checkOrderCircularConstraint.ts:7:17: Circularity originates in type at this location. + foo() { + var x!: T; + var a = x.foo(); + ~~~ +!!! error TS2339: Property 'foo' does not exist on type 'T'. + var b = new x(123); + ~ +!!! error TS2351: This expression is not constructable. +!!! error TS2351: Type 'unknown' has no construct signatures. + var c = x[1]; + ~~~~ +!!! error TS7053: Element implicitly has an 'any' type because expression of type '1' can't be used to index type 'unknown'. +!!! error TS7053: Property '1' does not exist on type 'unknown'. + var d = x(); + ~ +!!! error TS2349: This expression is not callable. +!!! error TS2349: Type 'unknown' has no call signatures. + } + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=reverse).js b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=reverse).js new file mode 100644 index 0000000000000..3c72daa68bbd3 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=reverse).js @@ -0,0 +1,30 @@ +//// [tests/cases/compiler/checkOrderCircularConstraint.ts] //// + +//// [checkOrderCircularConstraint.ts] +// A circular constraint of a declared type parameter is reported at its +// declaration, regardless of which use resolves the constraint first. + +class A { + foo() { + var x!: T; + var a = x.foo(); + var b = new x(123); + var c = x[1]; + var d = x(); + } +} + + +//// [checkOrderCircularConstraint.js] +"use strict"; +// A circular constraint of a declared type parameter is reported at its +// declaration, regardless of which use resolves the constraint first. +class A { + foo() { + var x; + var a = x.foo(); + var b = new x(123); + var c = x[1]; + var d = x(); + } +} diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=reverse).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=reverse).symbols new file mode 100644 index 0000000000000..9b87b04754b9f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=reverse).symbols @@ -0,0 +1,36 @@ +//// [tests/cases/compiler/checkOrderCircularConstraint.ts] //// + +=== checkOrderCircularConstraint.ts === +// A circular constraint of a declared type parameter is reported at its +// declaration, regardless of which use resolves the constraint first. + +class A { +>A : Symbol(A, Decl(checkOrderCircularConstraint.ts, 0, 0)) +>T : Symbol(T, Decl(checkOrderCircularConstraint.ts, 3, 8)) +>T : Symbol(T, Decl(checkOrderCircularConstraint.ts, 3, 8)) + + foo() { +>foo : Symbol(A.foo, Decl(checkOrderCircularConstraint.ts, 3, 22)) + + var x!: T; +>x : Symbol(x, Decl(checkOrderCircularConstraint.ts, 5, 11)) +>T : Symbol(T, Decl(checkOrderCircularConstraint.ts, 3, 8)) + + var a = x.foo(); +>a : Symbol(a, Decl(checkOrderCircularConstraint.ts, 6, 11)) +>x : Symbol(x, Decl(checkOrderCircularConstraint.ts, 5, 11)) + + var b = new x(123); +>b : Symbol(b, Decl(checkOrderCircularConstraint.ts, 7, 11)) +>x : Symbol(x, Decl(checkOrderCircularConstraint.ts, 5, 11)) + + var c = x[1]; +>c : Symbol(c, Decl(checkOrderCircularConstraint.ts, 8, 11)) +>x : Symbol(x, Decl(checkOrderCircularConstraint.ts, 5, 11)) + + var d = x(); +>d : Symbol(d, Decl(checkOrderCircularConstraint.ts, 9, 11)) +>x : Symbol(x, Decl(checkOrderCircularConstraint.ts, 5, 11)) + } +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=reverse).types b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=reverse).types new file mode 100644 index 0000000000000..370c13c086d5a --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=reverse).types @@ -0,0 +1,41 @@ +//// [tests/cases/compiler/checkOrderCircularConstraint.ts] //// + +=== checkOrderCircularConstraint.ts === +// A circular constraint of a declared type parameter is reported at its +// declaration, regardless of which use resolves the constraint first. + +class A { +>A : A + + foo() { +>foo : () => void + + var x!: T; +>x : T + + var a = x.foo(); +>a : any +>x.foo() : any +>x.foo : any +>x : T +>foo : any + + var b = new x(123); +>b : any +>new x(123) : any +>x : T +>123 : 123 + + var c = x[1]; +>c : any +>x[1] : any +>x : T +>1 : 1 + + var d = x(); +>d : any +>x() : any +>x : T + } +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..938f4b7bb63d2 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=typesfirst).errors.txt @@ -0,0 +1,38 @@ +checkOrderCircularConstraint.ts(4,19): error TS2313: Type parameter 'T' has a circular constraint. +checkOrderCircularConstraint.ts(7,19): error TS2339: Property 'foo' does not exist on type 'T'. +checkOrderCircularConstraint.ts(8,21): error TS2351: This expression is not constructable. + Type 'unknown' has no construct signatures. +checkOrderCircularConstraint.ts(9,17): error TS7053: Element implicitly has an 'any' type because expression of type '1' can't be used to index type 'unknown'. + Property '1' does not exist on type 'unknown'. +checkOrderCircularConstraint.ts(10,17): error TS2349: This expression is not callable. + Type 'unknown' has no call signatures. + + +==== checkOrderCircularConstraint.ts (5 errors) ==== + // A circular constraint of a declared type parameter is reported at its + // declaration, regardless of which use resolves the constraint first. + + class A { + ~ +!!! error TS2313: Type parameter 'T' has a circular constraint. +!!! related TS2751 checkOrderCircularConstraint.ts:7:17: Circularity originates in type at this location. + foo() { + var x!: T; + var a = x.foo(); + ~~~ +!!! error TS2339: Property 'foo' does not exist on type 'T'. + var b = new x(123); + ~ +!!! error TS2351: This expression is not constructable. +!!! error TS2351: Type 'unknown' has no construct signatures. + var c = x[1]; + ~~~~ +!!! error TS7053: Element implicitly has an 'any' type because expression of type '1' can't be used to index type 'unknown'. +!!! error TS7053: Property '1' does not exist on type 'unknown'. + var d = x(); + ~ +!!! error TS2349: This expression is not callable. +!!! error TS2349: Type 'unknown' has no call signatures. + } + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=typesfirst).js b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=typesfirst).js new file mode 100644 index 0000000000000..3c72daa68bbd3 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=typesfirst).js @@ -0,0 +1,30 @@ +//// [tests/cases/compiler/checkOrderCircularConstraint.ts] //// + +//// [checkOrderCircularConstraint.ts] +// A circular constraint of a declared type parameter is reported at its +// declaration, regardless of which use resolves the constraint first. + +class A { + foo() { + var x!: T; + var a = x.foo(); + var b = new x(123); + var c = x[1]; + var d = x(); + } +} + + +//// [checkOrderCircularConstraint.js] +"use strict"; +// A circular constraint of a declared type parameter is reported at its +// declaration, regardless of which use resolves the constraint first. +class A { + foo() { + var x; + var a = x.foo(); + var b = new x(123); + var c = x[1]; + var d = x(); + } +} diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..9b87b04754b9f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=typesfirst).symbols @@ -0,0 +1,36 @@ +//// [tests/cases/compiler/checkOrderCircularConstraint.ts] //// + +=== checkOrderCircularConstraint.ts === +// A circular constraint of a declared type parameter is reported at its +// declaration, regardless of which use resolves the constraint first. + +class A { +>A : Symbol(A, Decl(checkOrderCircularConstraint.ts, 0, 0)) +>T : Symbol(T, Decl(checkOrderCircularConstraint.ts, 3, 8)) +>T : Symbol(T, Decl(checkOrderCircularConstraint.ts, 3, 8)) + + foo() { +>foo : Symbol(A.foo, Decl(checkOrderCircularConstraint.ts, 3, 22)) + + var x!: T; +>x : Symbol(x, Decl(checkOrderCircularConstraint.ts, 5, 11)) +>T : Symbol(T, Decl(checkOrderCircularConstraint.ts, 3, 8)) + + var a = x.foo(); +>a : Symbol(a, Decl(checkOrderCircularConstraint.ts, 6, 11)) +>x : Symbol(x, Decl(checkOrderCircularConstraint.ts, 5, 11)) + + var b = new x(123); +>b : Symbol(b, Decl(checkOrderCircularConstraint.ts, 7, 11)) +>x : Symbol(x, Decl(checkOrderCircularConstraint.ts, 5, 11)) + + var c = x[1]; +>c : Symbol(c, Decl(checkOrderCircularConstraint.ts, 8, 11)) +>x : Symbol(x, Decl(checkOrderCircularConstraint.ts, 5, 11)) + + var d = x(); +>d : Symbol(d, Decl(checkOrderCircularConstraint.ts, 9, 11)) +>x : Symbol(x, Decl(checkOrderCircularConstraint.ts, 5, 11)) + } +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=typesfirst).types new file mode 100644 index 0000000000000..370c13c086d5a --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=typesfirst).types @@ -0,0 +1,41 @@ +//// [tests/cases/compiler/checkOrderCircularConstraint.ts] //// + +=== checkOrderCircularConstraint.ts === +// A circular constraint of a declared type parameter is reported at its +// declaration, regardless of which use resolves the constraint first. + +class A { +>A : A + + foo() { +>foo : () => void + + var x!: T; +>x : T + + var a = x.foo(); +>a : any +>x.foo() : any +>x.foo : any +>x : T +>foo : any + + var b = new x(123); +>b : any +>new x(123) : any +>x : T +>123 : 123 + + var c = x[1]; +>c : any +>x[1] : any +>x : T +>1 : 1 + + var d = x(); +>d : any +>x() : any +>x : T + } +} + diff --git a/tsc/testdata/tests/cases/compiler/checkOrderCircularConstraint.ts b/tsc/testdata/tests/cases/compiler/checkOrderCircularConstraint.ts new file mode 100644 index 0000000000000..efca8e2390569 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/checkOrderCircularConstraint.ts @@ -0,0 +1,14 @@ +// @checkOrder: default, reverse, isolated, typesfirst + +// A circular constraint of a declared type parameter is reported at its +// declaration, regardless of which use resolves the constraint first. + +class A { + foo() { + var x!: T; + var a = x.foo(); + var b = new x(123); + var c = x[1]; + var d = x(); + } +} From b2a0cf049290c66b7ef741a9e23e9907a4dff5f5 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 22 Oct 2026 10:41:40 -0700 Subject: [PATCH 052/194] Add a test for emitting before checking Import elision computes types for emit. When a program emits before it is checked, the default baselines report a circularity at the use that import elision visited instead of where checking finds it. --- ...BeforeCheck(checkorder=default).errors.txt | 25 ++++++++++ ...rderEmitBeforeCheck(checkorder=default).js | 37 ++++++++++++++ ...mitBeforeCheck(checkorder=default).symbols | 49 +++++++++++++++++++ ...rEmitBeforeCheck(checkorder=default).types | 31 ++++++++++++ ...eforeCheck(checkorder=isolated).errors.txt | 25 ++++++++++ ...derEmitBeforeCheck(checkorder=isolated).js | 37 ++++++++++++++ ...itBeforeCheck(checkorder=isolated).symbols | 49 +++++++++++++++++++ ...EmitBeforeCheck(checkorder=isolated).types | 31 ++++++++++++ .../compiler/checkOrderEmitBeforeCheck.ts | 19 +++++++ 9 files changed, 303 insertions(+) create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=default).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=default).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=default).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=default).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=isolated).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=isolated).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=isolated).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=isolated).types create mode 100644 tsc/testdata/tests/cases/compiler/checkOrderEmitBeforeCheck.ts diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=default).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=default).errors.txt new file mode 100644 index 0000000000000..0570bff3e21f0 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=default).errors.txt @@ -0,0 +1,25 @@ +checkOrderEmitBeforeCheck.ts(9,5): error TS2502: '"each"' is referenced directly or indirectly in its own type annotation. +checkOrderEmitBeforeCheck.ts(15,1): error TS2615: Type of property '"each"' circularly references itself in mapped type '{ [P in keyof ListWidget]: undefined extends ListWidget[P] ? never : P; }'. + + +==== checkOrderEmitBeforeCheck.ts (2 errors) ==== + // The circularity in the mapped type is found by checking the annotation of + // "each". Emitting first must not instead report it at the use import + // elision visits, nor cache the result without the error. + type NonOptionalKeys = { [P in keyof T]: undefined extends T[P] ? never : P }[keyof T]; + type Child = { [P in NonOptionalKeys]: T[P] } + + export interface ListWidget { + "type": "list", + "each": Child; + ~~~~~~ +!!! error TS2502: '"each"' is referenced directly or indirectly in its own type annotation. + } + + type ListChild = Child + + declare let x: ListChild; + x.type; + ~ +!!! error TS2615: Type of property '"each"' circularly references itself in mapped type '{ [P in keyof ListWidget]: undefined extends ListWidget[P] ? never : P; }'. + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=default).js b/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=default).js new file mode 100644 index 0000000000000..0ceb03c6477d2 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=default).js @@ -0,0 +1,37 @@ +//// [tests/cases/compiler/checkOrderEmitBeforeCheck.ts] //// + +//// [checkOrderEmitBeforeCheck.ts] +// The circularity in the mapped type is found by checking the annotation of +// "each". Emitting first must not instead report it at the use import +// elision visits, nor cache the result without the error. +type NonOptionalKeys = { [P in keyof T]: undefined extends T[P] ? never : P }[keyof T]; +type Child = { [P in NonOptionalKeys]: T[P] } + +export interface ListWidget { + "type": "list", + "each": Child; +} + +type ListChild = Child + +declare let x: ListChild; +x.type; + + +//// [checkOrderEmitBeforeCheck.js] +x.type; +export {}; + + +//// [checkOrderEmitBeforeCheck.d.ts] +type NonOptionalKeys = { + [P in keyof T]: undefined extends T[P] ? never : P; +}[keyof T]; +type Child = { + [P in NonOptionalKeys]: T[P]; +}; +export interface ListWidget { + "type": "list"; + "each": Child; +} +export {}; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=default).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=default).symbols new file mode 100644 index 0000000000000..9de1daaccd55e --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=default).symbols @@ -0,0 +1,49 @@ +//// [tests/cases/compiler/checkOrderEmitBeforeCheck.ts] //// + +=== checkOrderEmitBeforeCheck.ts === +// The circularity in the mapped type is found by checking the annotation of +// "each". Emitting first must not instead report it at the use import +// elision visits, nor cache the result without the error. +type NonOptionalKeys = { [P in keyof T]: undefined extends T[P] ? never : P }[keyof T]; +>NonOptionalKeys : Symbol(NonOptionalKeys, Decl(checkOrderEmitBeforeCheck.ts, 0, 0)) +>T : Symbol(T, Decl(checkOrderEmitBeforeCheck.ts, 3, 21)) +>P : Symbol(P, Decl(checkOrderEmitBeforeCheck.ts, 3, 29)) +>T : Symbol(T, Decl(checkOrderEmitBeforeCheck.ts, 3, 21)) +>T : Symbol(T, Decl(checkOrderEmitBeforeCheck.ts, 3, 21)) +>P : Symbol(P, Decl(checkOrderEmitBeforeCheck.ts, 3, 29)) +>P : Symbol(P, Decl(checkOrderEmitBeforeCheck.ts, 3, 29)) +>T : Symbol(T, Decl(checkOrderEmitBeforeCheck.ts, 3, 21)) + +type Child = { [P in NonOptionalKeys]: T[P] } +>Child : Symbol(Child, Decl(checkOrderEmitBeforeCheck.ts, 3, 90)) +>T : Symbol(T, Decl(checkOrderEmitBeforeCheck.ts, 4, 11)) +>P : Symbol(P, Decl(checkOrderEmitBeforeCheck.ts, 4, 19)) +>NonOptionalKeys : Symbol(NonOptionalKeys, Decl(checkOrderEmitBeforeCheck.ts, 0, 0)) +>T : Symbol(T, Decl(checkOrderEmitBeforeCheck.ts, 4, 11)) +>T : Symbol(T, Decl(checkOrderEmitBeforeCheck.ts, 4, 11)) +>P : Symbol(P, Decl(checkOrderEmitBeforeCheck.ts, 4, 19)) + +export interface ListWidget { +>ListWidget : Symbol(ListWidget, Decl(checkOrderEmitBeforeCheck.ts, 4, 51)) + + "type": "list", +>"type" : Symbol(ListWidget["type"], Decl(checkOrderEmitBeforeCheck.ts, 6, 29)) + + "each": Child; +>"each" : Symbol(ListWidget["each"], Decl(checkOrderEmitBeforeCheck.ts, 7, 19)) +>Child : Symbol(Child, Decl(checkOrderEmitBeforeCheck.ts, 3, 90)) +>ListWidget : Symbol(ListWidget, Decl(checkOrderEmitBeforeCheck.ts, 4, 51)) +} + +type ListChild = Child +>ListChild : Symbol(ListChild, Decl(checkOrderEmitBeforeCheck.ts, 9, 1)) +>Child : Symbol(Child, Decl(checkOrderEmitBeforeCheck.ts, 3, 90)) +>ListWidget : Symbol(ListWidget, Decl(checkOrderEmitBeforeCheck.ts, 4, 51)) + +declare let x: ListChild; +>x : Symbol(x, Decl(checkOrderEmitBeforeCheck.ts, 13, 11)) +>ListChild : Symbol(ListChild, Decl(checkOrderEmitBeforeCheck.ts, 9, 1)) + +x.type; +>x : Symbol(x, Decl(checkOrderEmitBeforeCheck.ts, 13, 11)) + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=default).types b/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=default).types new file mode 100644 index 0000000000000..dfa8cb7adbabd --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=default).types @@ -0,0 +1,31 @@ +//// [tests/cases/compiler/checkOrderEmitBeforeCheck.ts] //// + +=== checkOrderEmitBeforeCheck.ts === +// The circularity in the mapped type is found by checking the annotation of +// "each". Emitting first must not instead report it at the use import +// elision visits, nor cache the result without the error. +type NonOptionalKeys = { [P in keyof T]: undefined extends T[P] ? never : P }[keyof T]; +>NonOptionalKeys : NonOptionalKeys + +type Child = { [P in NonOptionalKeys]: T[P] } +>Child : Child + +export interface ListWidget { + "type": "list", +>"type" : "list" + + "each": Child; +>"each" : any +} + +type ListChild = Child +>ListChild : ListChild + +declare let x: ListChild; +>x : ListChild + +x.type; +>x.type : any +>x : ListChild +>type : any + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=isolated).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=isolated).errors.txt new file mode 100644 index 0000000000000..c220c7e1092af --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=isolated).errors.txt @@ -0,0 +1,25 @@ +checkOrderEmitBeforeCheck.ts(9,5): error TS2502: '"each"' is referenced directly or indirectly in its own type annotation. +checkOrderEmitBeforeCheck.ts(9,13): error TS2615: Type of property '"each"' circularly references itself in mapped type '{ [P in keyof ListWidget]: undefined extends ListWidget[P] ? never : P; }'. + + +==== checkOrderEmitBeforeCheck.ts (2 errors) ==== + // The circularity in the mapped type is found by checking the annotation of + // "each". Emitting first must not instead report it at the use import + // elision visits, nor cache the result without the error. + type NonOptionalKeys = { [P in keyof T]: undefined extends T[P] ? never : P }[keyof T]; + type Child = { [P in NonOptionalKeys]: T[P] } + + export interface ListWidget { + "type": "list", + "each": Child; + ~~~~~~ +!!! error TS2502: '"each"' is referenced directly or indirectly in its own type annotation. + ~~~~~~~~~~~~~~~~~ +!!! error TS2615: Type of property '"each"' circularly references itself in mapped type '{ [P in keyof ListWidget]: undefined extends ListWidget[P] ? never : P; }'. + } + + type ListChild = Child + + declare let x: ListChild; + x.type; + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=isolated).js b/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=isolated).js new file mode 100644 index 0000000000000..0ceb03c6477d2 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=isolated).js @@ -0,0 +1,37 @@ +//// [tests/cases/compiler/checkOrderEmitBeforeCheck.ts] //// + +//// [checkOrderEmitBeforeCheck.ts] +// The circularity in the mapped type is found by checking the annotation of +// "each". Emitting first must not instead report it at the use import +// elision visits, nor cache the result without the error. +type NonOptionalKeys = { [P in keyof T]: undefined extends T[P] ? never : P }[keyof T]; +type Child = { [P in NonOptionalKeys]: T[P] } + +export interface ListWidget { + "type": "list", + "each": Child; +} + +type ListChild = Child + +declare let x: ListChild; +x.type; + + +//// [checkOrderEmitBeforeCheck.js] +x.type; +export {}; + + +//// [checkOrderEmitBeforeCheck.d.ts] +type NonOptionalKeys = { + [P in keyof T]: undefined extends T[P] ? never : P; +}[keyof T]; +type Child = { + [P in NonOptionalKeys]: T[P]; +}; +export interface ListWidget { + "type": "list"; + "each": Child; +} +export {}; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=isolated).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=isolated).symbols new file mode 100644 index 0000000000000..9de1daaccd55e --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=isolated).symbols @@ -0,0 +1,49 @@ +//// [tests/cases/compiler/checkOrderEmitBeforeCheck.ts] //// + +=== checkOrderEmitBeforeCheck.ts === +// The circularity in the mapped type is found by checking the annotation of +// "each". Emitting first must not instead report it at the use import +// elision visits, nor cache the result without the error. +type NonOptionalKeys = { [P in keyof T]: undefined extends T[P] ? never : P }[keyof T]; +>NonOptionalKeys : Symbol(NonOptionalKeys, Decl(checkOrderEmitBeforeCheck.ts, 0, 0)) +>T : Symbol(T, Decl(checkOrderEmitBeforeCheck.ts, 3, 21)) +>P : Symbol(P, Decl(checkOrderEmitBeforeCheck.ts, 3, 29)) +>T : Symbol(T, Decl(checkOrderEmitBeforeCheck.ts, 3, 21)) +>T : Symbol(T, Decl(checkOrderEmitBeforeCheck.ts, 3, 21)) +>P : Symbol(P, Decl(checkOrderEmitBeforeCheck.ts, 3, 29)) +>P : Symbol(P, Decl(checkOrderEmitBeforeCheck.ts, 3, 29)) +>T : Symbol(T, Decl(checkOrderEmitBeforeCheck.ts, 3, 21)) + +type Child = { [P in NonOptionalKeys]: T[P] } +>Child : Symbol(Child, Decl(checkOrderEmitBeforeCheck.ts, 3, 90)) +>T : Symbol(T, Decl(checkOrderEmitBeforeCheck.ts, 4, 11)) +>P : Symbol(P, Decl(checkOrderEmitBeforeCheck.ts, 4, 19)) +>NonOptionalKeys : Symbol(NonOptionalKeys, Decl(checkOrderEmitBeforeCheck.ts, 0, 0)) +>T : Symbol(T, Decl(checkOrderEmitBeforeCheck.ts, 4, 11)) +>T : Symbol(T, Decl(checkOrderEmitBeforeCheck.ts, 4, 11)) +>P : Symbol(P, Decl(checkOrderEmitBeforeCheck.ts, 4, 19)) + +export interface ListWidget { +>ListWidget : Symbol(ListWidget, Decl(checkOrderEmitBeforeCheck.ts, 4, 51)) + + "type": "list", +>"type" : Symbol(ListWidget["type"], Decl(checkOrderEmitBeforeCheck.ts, 6, 29)) + + "each": Child; +>"each" : Symbol(ListWidget["each"], Decl(checkOrderEmitBeforeCheck.ts, 7, 19)) +>Child : Symbol(Child, Decl(checkOrderEmitBeforeCheck.ts, 3, 90)) +>ListWidget : Symbol(ListWidget, Decl(checkOrderEmitBeforeCheck.ts, 4, 51)) +} + +type ListChild = Child +>ListChild : Symbol(ListChild, Decl(checkOrderEmitBeforeCheck.ts, 9, 1)) +>Child : Symbol(Child, Decl(checkOrderEmitBeforeCheck.ts, 3, 90)) +>ListWidget : Symbol(ListWidget, Decl(checkOrderEmitBeforeCheck.ts, 4, 51)) + +declare let x: ListChild; +>x : Symbol(x, Decl(checkOrderEmitBeforeCheck.ts, 13, 11)) +>ListChild : Symbol(ListChild, Decl(checkOrderEmitBeforeCheck.ts, 9, 1)) + +x.type; +>x : Symbol(x, Decl(checkOrderEmitBeforeCheck.ts, 13, 11)) + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=isolated).types b/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=isolated).types new file mode 100644 index 0000000000000..dfa8cb7adbabd --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=isolated).types @@ -0,0 +1,31 @@ +//// [tests/cases/compiler/checkOrderEmitBeforeCheck.ts] //// + +=== checkOrderEmitBeforeCheck.ts === +// The circularity in the mapped type is found by checking the annotation of +// "each". Emitting first must not instead report it at the use import +// elision visits, nor cache the result without the error. +type NonOptionalKeys = { [P in keyof T]: undefined extends T[P] ? never : P }[keyof T]; +>NonOptionalKeys : NonOptionalKeys + +type Child = { [P in NonOptionalKeys]: T[P] } +>Child : Child + +export interface ListWidget { + "type": "list", +>"type" : "list" + + "each": Child; +>"each" : any +} + +type ListChild = Child +>ListChild : ListChild + +declare let x: ListChild; +>x : ListChild + +x.type; +>x.type : any +>x : ListChild +>type : any + diff --git a/tsc/testdata/tests/cases/compiler/checkOrderEmitBeforeCheck.ts b/tsc/testdata/tests/cases/compiler/checkOrderEmitBeforeCheck.ts new file mode 100644 index 0000000000000..fd86103b859d3 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/checkOrderEmitBeforeCheck.ts @@ -0,0 +1,19 @@ +// @target: es2015 +// @declaration: true +// @checkOrder: default, isolated + +// The circularity in the mapped type is found by checking the annotation of +// "each". Emitting first must not instead report it at the use import +// elision visits, nor cache the result without the error. +type NonOptionalKeys = { [P in keyof T]: undefined extends T[P] ? never : P }[keyof T]; +type Child = { [P in NonOptionalKeys]: T[P] } + +export interface ListWidget { + "type": "list", + "each": Child; +} + +type ListChild = Child + +declare let x: ListChild; +x.type; From 665abeda1dfd3fa76469673f0cff3a59e5d7ddb6 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 12:17:17 -0700 Subject: [PATCH 053/194] Order symbols derived from the same declaration without ids The members of a mapped type share the declaration and name of the property they map, so compareSymbols ordered them against that property by symbol id. Symbol ids are assigned when a symbol is first used, so which symbol came first depended on check order, and with it which mapped type a circularity was reported in. Order such symbols by whether the checker made them and by their check flags before falling back to ids. This showed up in checkOrderEmitBeforeCheck once the test harness stopped sharing parsed test files, and with them symbol ids, between runs. --- tsc/internal/checker/utilities.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tsc/internal/checker/utilities.go b/tsc/internal/checker/utilities.go index 4cb680be0a6ef..89800889a2732 100644 --- a/tsc/internal/checker/utilities.go +++ b/tsc/internal/checker/utilities.go @@ -375,6 +375,15 @@ func (c *Checker) compareSymbolsWorker(s1, s2 *ast.Symbol) int { if r := c.compareSymbolDeclarationsAndNames(s1, s2); r != 0 { return r } + // Symbols the checker derives from a declared one, such as the members of + // mapped types, share its declaration and name. Symbol IDs are assigned in + // the order symbols are first used, so order those by how they were made. + if r := cmp.Compare(s1.Flags()&ast.SymbolFlagsTransient, s2.Flags()&ast.SymbolFlagsTransient); r != 0 { + return r + } + if r := cmp.Compare(s1.CheckFlags(), s2.CheckFlags()); r != 0 { + return r + } // Fall back to symbol IDs. This is a last resort that should happen only when symbols have // no declaration and duplicate names. return cmp.Compare(ast.GetSymbolId(s1), ast.GetSymbolId(s2)) From 2e15f38178f15a084e2e57dfe37a84c9b6277c80 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 22 Oct 2026 11:09:36 -0700 Subject: [PATCH 054/194] Add a test for check order with aliased module.exports members Asking for the type of a CommonJS export that aliases another export, before anything has resolved the members of module.exports, makes the alias circular, so the isolated baselines give it type any. --- ...rModuleExportsAlias(checkorder=default).js | 16 ++++++++++++ ...leExportsAlias(checkorder=default).symbols | 23 ++++++++++++++++ ...duleExportsAlias(checkorder=default).types | 26 +++++++++++++++++++ ...ModuleExportsAlias(checkorder=isolated).js | 16 ++++++++++++ ...eExportsAlias(checkorder=isolated).symbols | 23 ++++++++++++++++ ...uleExportsAlias(checkorder=isolated).types | 26 +++++++++++++++++++ ...rModuleExportsAlias(checkorder=reverse).js | 16 ++++++++++++ ...leExportsAlias(checkorder=reverse).symbols | 23 ++++++++++++++++ ...duleExportsAlias(checkorder=reverse).types | 26 +++++++++++++++++++ ...duleExportsAlias(checkorder=typesfirst).js | 16 ++++++++++++ ...xportsAlias(checkorder=typesfirst).symbols | 23 ++++++++++++++++ ...eExportsAlias(checkorder=typesfirst).types | 26 +++++++++++++++++++ .../compiler/checkOrderModuleExportsAlias.ts | 8 ++++++ 13 files changed, 268 insertions(+) create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=default).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=default).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=default).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=isolated).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=isolated).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=isolated).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=reverse).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=reverse).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=reverse).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=typesfirst).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=typesfirst).types create mode 100644 tsc/testdata/tests/cases/compiler/checkOrderModuleExportsAlias.ts diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=default).js b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=default).js new file mode 100644 index 0000000000000..1d37a15bf23bd --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=default).js @@ -0,0 +1,16 @@ +//// [tests/cases/compiler/checkOrderModuleExportsAlias.ts] //// + +//// [index.js] +module.exports.i = function i() {} +module.exports.ii = module.exports.i; + + +//// [index.js] +"use strict"; +module.exports.i = function i() { }; +module.exports.ii = module.exports.i; + + +//// [index.d.ts] +export declare var i: () => void; +export declare var ii: () => void; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=default).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=default).symbols new file mode 100644 index 0000000000000..f14879d6cea9a --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=default).symbols @@ -0,0 +1,23 @@ +//// [tests/cases/compiler/checkOrderModuleExportsAlias.ts] //// + +=== index.js === +module.exports.i = function i() {} +>module.exports.i : Symbol(i, Decl(index.js, 0, 0)) +>module.exports : Symbol(exports, Decl(index.js, 0, 0)) +>module : Symbol(module, Decl(index.js, 0, 0)) +>exports : Symbol(exports, Decl(index.js, 0, 0)) +>i : Symbol(i, Decl(index.js, 0, 0)) +>i : Symbol(i, Decl(index.js, 0, 18)) + +module.exports.ii = module.exports.i; +>module.exports.ii : Symbol(ii, Decl(index.js, 0, 34)) +>module.exports : Symbol(exports, Decl(index.js, 0, 0)) +>module : Symbol(module, Decl(index.js, 0, 0)) +>exports : Symbol(exports, Decl(index.js, 0, 0)) +>ii : Symbol(ii, Decl(index.js, 0, 34)) +>module.exports.i : Symbol(i, Decl(index.js, 0, 0)) +>module.exports : Symbol(exports, Decl(index.js, 0, 0)) +>module : Symbol(module, Decl(index.js, 0, 0)) +>exports : Symbol(exports, Decl(index.js, 0, 0)) +>i : Symbol(i, Decl(index.js, 0, 0)) + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=default).types b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=default).types new file mode 100644 index 0000000000000..f940f148c6541 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=default).types @@ -0,0 +1,26 @@ +//// [tests/cases/compiler/checkOrderModuleExportsAlias.ts] //// + +=== index.js === +module.exports.i = function i() {} +>module.exports.i = function i() {} : () => void +>module.exports.i : () => void +>module.exports : typeof import(".") +>module : { exports: typeof import("."); } +>exports : typeof import(".") +>i : () => void +>function i() {} : () => void +>i : () => void + +module.exports.ii = module.exports.i; +>module.exports.ii = module.exports.i : () => void +>module.exports.ii : () => void +>module.exports : typeof import(".") +>module : { exports: typeof import("."); } +>exports : typeof import(".") +>ii : () => void +>module.exports.i : () => void +>module.exports : typeof import(".") +>module : { exports: typeof import("."); } +>exports : typeof import(".") +>i : () => void + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=isolated).js b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=isolated).js new file mode 100644 index 0000000000000..1d37a15bf23bd --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=isolated).js @@ -0,0 +1,16 @@ +//// [tests/cases/compiler/checkOrderModuleExportsAlias.ts] //// + +//// [index.js] +module.exports.i = function i() {} +module.exports.ii = module.exports.i; + + +//// [index.js] +"use strict"; +module.exports.i = function i() { }; +module.exports.ii = module.exports.i; + + +//// [index.d.ts] +export declare var i: () => void; +export declare var ii: () => void; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=isolated).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=isolated).symbols new file mode 100644 index 0000000000000..f14879d6cea9a --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=isolated).symbols @@ -0,0 +1,23 @@ +//// [tests/cases/compiler/checkOrderModuleExportsAlias.ts] //// + +=== index.js === +module.exports.i = function i() {} +>module.exports.i : Symbol(i, Decl(index.js, 0, 0)) +>module.exports : Symbol(exports, Decl(index.js, 0, 0)) +>module : Symbol(module, Decl(index.js, 0, 0)) +>exports : Symbol(exports, Decl(index.js, 0, 0)) +>i : Symbol(i, Decl(index.js, 0, 0)) +>i : Symbol(i, Decl(index.js, 0, 18)) + +module.exports.ii = module.exports.i; +>module.exports.ii : Symbol(ii, Decl(index.js, 0, 34)) +>module.exports : Symbol(exports, Decl(index.js, 0, 0)) +>module : Symbol(module, Decl(index.js, 0, 0)) +>exports : Symbol(exports, Decl(index.js, 0, 0)) +>ii : Symbol(ii, Decl(index.js, 0, 34)) +>module.exports.i : Symbol(i, Decl(index.js, 0, 0)) +>module.exports : Symbol(exports, Decl(index.js, 0, 0)) +>module : Symbol(module, Decl(index.js, 0, 0)) +>exports : Symbol(exports, Decl(index.js, 0, 0)) +>i : Symbol(i, Decl(index.js, 0, 0)) + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=isolated).types b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=isolated).types new file mode 100644 index 0000000000000..f940f148c6541 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=isolated).types @@ -0,0 +1,26 @@ +//// [tests/cases/compiler/checkOrderModuleExportsAlias.ts] //// + +=== index.js === +module.exports.i = function i() {} +>module.exports.i = function i() {} : () => void +>module.exports.i : () => void +>module.exports : typeof import(".") +>module : { exports: typeof import("."); } +>exports : typeof import(".") +>i : () => void +>function i() {} : () => void +>i : () => void + +module.exports.ii = module.exports.i; +>module.exports.ii = module.exports.i : () => void +>module.exports.ii : () => void +>module.exports : typeof import(".") +>module : { exports: typeof import("."); } +>exports : typeof import(".") +>ii : () => void +>module.exports.i : () => void +>module.exports : typeof import(".") +>module : { exports: typeof import("."); } +>exports : typeof import(".") +>i : () => void + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=reverse).js b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=reverse).js new file mode 100644 index 0000000000000..1d37a15bf23bd --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=reverse).js @@ -0,0 +1,16 @@ +//// [tests/cases/compiler/checkOrderModuleExportsAlias.ts] //// + +//// [index.js] +module.exports.i = function i() {} +module.exports.ii = module.exports.i; + + +//// [index.js] +"use strict"; +module.exports.i = function i() { }; +module.exports.ii = module.exports.i; + + +//// [index.d.ts] +export declare var i: () => void; +export declare var ii: () => void; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=reverse).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=reverse).symbols new file mode 100644 index 0000000000000..f14879d6cea9a --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=reverse).symbols @@ -0,0 +1,23 @@ +//// [tests/cases/compiler/checkOrderModuleExportsAlias.ts] //// + +=== index.js === +module.exports.i = function i() {} +>module.exports.i : Symbol(i, Decl(index.js, 0, 0)) +>module.exports : Symbol(exports, Decl(index.js, 0, 0)) +>module : Symbol(module, Decl(index.js, 0, 0)) +>exports : Symbol(exports, Decl(index.js, 0, 0)) +>i : Symbol(i, Decl(index.js, 0, 0)) +>i : Symbol(i, Decl(index.js, 0, 18)) + +module.exports.ii = module.exports.i; +>module.exports.ii : Symbol(ii, Decl(index.js, 0, 34)) +>module.exports : Symbol(exports, Decl(index.js, 0, 0)) +>module : Symbol(module, Decl(index.js, 0, 0)) +>exports : Symbol(exports, Decl(index.js, 0, 0)) +>ii : Symbol(ii, Decl(index.js, 0, 34)) +>module.exports.i : Symbol(i, Decl(index.js, 0, 0)) +>module.exports : Symbol(exports, Decl(index.js, 0, 0)) +>module : Symbol(module, Decl(index.js, 0, 0)) +>exports : Symbol(exports, Decl(index.js, 0, 0)) +>i : Symbol(i, Decl(index.js, 0, 0)) + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=reverse).types b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=reverse).types new file mode 100644 index 0000000000000..f940f148c6541 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=reverse).types @@ -0,0 +1,26 @@ +//// [tests/cases/compiler/checkOrderModuleExportsAlias.ts] //// + +=== index.js === +module.exports.i = function i() {} +>module.exports.i = function i() {} : () => void +>module.exports.i : () => void +>module.exports : typeof import(".") +>module : { exports: typeof import("."); } +>exports : typeof import(".") +>i : () => void +>function i() {} : () => void +>i : () => void + +module.exports.ii = module.exports.i; +>module.exports.ii = module.exports.i : () => void +>module.exports.ii : () => void +>module.exports : typeof import(".") +>module : { exports: typeof import("."); } +>exports : typeof import(".") +>ii : () => void +>module.exports.i : () => void +>module.exports : typeof import(".") +>module : { exports: typeof import("."); } +>exports : typeof import(".") +>i : () => void + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=typesfirst).js b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=typesfirst).js new file mode 100644 index 0000000000000..1d37a15bf23bd --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=typesfirst).js @@ -0,0 +1,16 @@ +//// [tests/cases/compiler/checkOrderModuleExportsAlias.ts] //// + +//// [index.js] +module.exports.i = function i() {} +module.exports.ii = module.exports.i; + + +//// [index.js] +"use strict"; +module.exports.i = function i() { }; +module.exports.ii = module.exports.i; + + +//// [index.d.ts] +export declare var i: () => void; +export declare var ii: () => void; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..f14879d6cea9a --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=typesfirst).symbols @@ -0,0 +1,23 @@ +//// [tests/cases/compiler/checkOrderModuleExportsAlias.ts] //// + +=== index.js === +module.exports.i = function i() {} +>module.exports.i : Symbol(i, Decl(index.js, 0, 0)) +>module.exports : Symbol(exports, Decl(index.js, 0, 0)) +>module : Symbol(module, Decl(index.js, 0, 0)) +>exports : Symbol(exports, Decl(index.js, 0, 0)) +>i : Symbol(i, Decl(index.js, 0, 0)) +>i : Symbol(i, Decl(index.js, 0, 18)) + +module.exports.ii = module.exports.i; +>module.exports.ii : Symbol(ii, Decl(index.js, 0, 34)) +>module.exports : Symbol(exports, Decl(index.js, 0, 0)) +>module : Symbol(module, Decl(index.js, 0, 0)) +>exports : Symbol(exports, Decl(index.js, 0, 0)) +>ii : Symbol(ii, Decl(index.js, 0, 34)) +>module.exports.i : Symbol(i, Decl(index.js, 0, 0)) +>module.exports : Symbol(exports, Decl(index.js, 0, 0)) +>module : Symbol(module, Decl(index.js, 0, 0)) +>exports : Symbol(exports, Decl(index.js, 0, 0)) +>i : Symbol(i, Decl(index.js, 0, 0)) + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=typesfirst).types new file mode 100644 index 0000000000000..f940f148c6541 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=typesfirst).types @@ -0,0 +1,26 @@ +//// [tests/cases/compiler/checkOrderModuleExportsAlias.ts] //// + +=== index.js === +module.exports.i = function i() {} +>module.exports.i = function i() {} : () => void +>module.exports.i : () => void +>module.exports : typeof import(".") +>module : { exports: typeof import("."); } +>exports : typeof import(".") +>i : () => void +>function i() {} : () => void +>i : () => void + +module.exports.ii = module.exports.i; +>module.exports.ii = module.exports.i : () => void +>module.exports.ii : () => void +>module.exports : typeof import(".") +>module : { exports: typeof import("."); } +>exports : typeof import(".") +>ii : () => void +>module.exports.i : () => void +>module.exports : typeof import(".") +>module : { exports: typeof import("."); } +>exports : typeof import(".") +>i : () => void + diff --git a/tsc/testdata/tests/cases/compiler/checkOrderModuleExportsAlias.ts b/tsc/testdata/tests/cases/compiler/checkOrderModuleExportsAlias.ts new file mode 100644 index 0000000000000..08d9142ed1bff --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/checkOrderModuleExportsAlias.ts @@ -0,0 +1,8 @@ +// @checkOrder: default, reverse, isolated, typesfirst +// @allowJs: true +// @checkJs: true +// @declaration: true +// @outDir: ./out +// @filename: index.js +module.exports.i = function i() {} +module.exports.ii = module.exports.i; From bd1da67b95d38e2f7c00d87d94554b8b9031ce76 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 22 Oct 2026 16:07:36 -0700 Subject: [PATCH 055/194] Add a test for check order with excessively deep instantiations Two files instantiate the same excessively deep type alias. The error is reported only in whichever file is checked first, because the second reuses the cached instantiation, so the default and reverse baselines disagree about which file has the error. --- ...ationErrors(checkorder=default).errors.txt | 21 ++++++++ ...InstantiationErrors(checkorder=default).js | 25 ++++++++++ ...ntiationErrors(checkorder=default).symbols | 48 +++++++++++++++++++ ...tantiationErrors(checkorder=default).types | 28 +++++++++++ ...ationErrors(checkorder=reverse).errors.txt | 21 ++++++++ ...InstantiationErrors(checkorder=reverse).js | 25 ++++++++++ ...ntiationErrors(checkorder=reverse).symbols | 48 +++++++++++++++++++ ...tantiationErrors(checkorder=reverse).types | 28 +++++++++++ .../checkOrderStableInstantiationErrors.ts | 16 +++++++ 9 files changed, 260 insertions(+) create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).types create mode 100644 tsc/testdata/tests/cases/compiler/checkOrderStableInstantiationErrors.ts diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).errors.txt new file mode 100644 index 0000000000000..4bc1c8c683ddc --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).errors.txt @@ -0,0 +1,21 @@ +a.ts(2,15): error TS2589: Type instantiation is excessively deep and possibly infinite. + + +==== lib.ts (0 errors) ==== + export type Dec = + N extends 5 ? 4 : N extends 4 ? 3 : N extends 3 ? 2 : + N extends 2 ? any : + N extends 1 ? 0 : 0; + export type Recur = + N extends 0 ? S : Recur, `${S}_${S}`>; + +==== a.ts (1 errors) ==== + import { Recur } from "./lib"; + export let a: Recur<5, "a">; + ~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. + +==== b.ts (0 errors) ==== + import { Recur } from "./lib"; + export let b: Recur<5, "a">; + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).js b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).js new file mode 100644 index 0000000000000..98320f4bda717 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).js @@ -0,0 +1,25 @@ +//// [tests/cases/compiler/checkOrderStableInstantiationErrors.ts] //// + +//// [lib.ts] +export type Dec = + N extends 5 ? 4 : N extends 4 ? 3 : N extends 3 ? 2 : + N extends 2 ? any : + N extends 1 ? 0 : 0; +export type Recur = + N extends 0 ? S : Recur, `${S}_${S}`>; + +//// [a.ts] +import { Recur } from "./lib"; +export let a: Recur<5, "a">; + +//// [b.ts] +import { Recur } from "./lib"; +export let b: Recur<5, "a">; + + +//// [lib.js] +export {}; +//// [a.js] +export let a; +//// [b.js] +export let b; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).symbols new file mode 100644 index 0000000000000..a64ce59423174 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).symbols @@ -0,0 +1,48 @@ +//// [tests/cases/compiler/checkOrderStableInstantiationErrors.ts] //// + +=== lib.ts === +export type Dec = +>Dec : Symbol(Dec, Decl(lib.ts, 0, 0)) +>N : Symbol(N, Decl(lib.ts, 0, 16)) + + N extends 5 ? 4 : N extends 4 ? 3 : N extends 3 ? 2 : +>N : Symbol(N, Decl(lib.ts, 0, 16)) +>N : Symbol(N, Decl(lib.ts, 0, 16)) +>N : Symbol(N, Decl(lib.ts, 0, 16)) + + N extends 2 ? any : +>N : Symbol(N, Decl(lib.ts, 0, 16)) + + N extends 1 ? 0 : 0; +>N : Symbol(N, Decl(lib.ts, 0, 16)) + +export type Recur = +>Recur : Symbol(Recur, Decl(lib.ts, 3, 24)) +>N : Symbol(N, Decl(lib.ts, 4, 18)) +>S : Symbol(S, Decl(lib.ts, 4, 35)) + + N extends 0 ? S : Recur, `${S}_${S}`>; +>N : Symbol(N, Decl(lib.ts, 4, 18)) +>S : Symbol(S, Decl(lib.ts, 4, 35)) +>Recur : Symbol(Recur, Decl(lib.ts, 3, 24)) +>Dec : Symbol(Dec, Decl(lib.ts, 0, 0)) +>N : Symbol(N, Decl(lib.ts, 4, 18)) +>S : Symbol(S, Decl(lib.ts, 4, 35)) +>S : Symbol(S, Decl(lib.ts, 4, 35)) + +=== a.ts === +import { Recur } from "./lib"; +>Recur : Symbol(Recur, Decl(a.ts, 0, 8)) + +export let a: Recur<5, "a">; +>a : Symbol(a, Decl(a.ts, 1, 10)) +>Recur : Symbol(Recur, Decl(a.ts, 0, 8)) + +=== b.ts === +import { Recur } from "./lib"; +>Recur : Symbol(Recur, Decl(b.ts, 0, 8)) + +export let b: Recur<5, "a">; +>b : Symbol(b, Decl(b.ts, 1, 10)) +>Recur : Symbol(Recur, Decl(b.ts, 0, 8)) + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).types b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).types new file mode 100644 index 0000000000000..fb92d29504f6c --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).types @@ -0,0 +1,28 @@ +//// [tests/cases/compiler/checkOrderStableInstantiationErrors.ts] //// + +=== lib.ts === +export type Dec = +>Dec : Dec + + N extends 5 ? 4 : N extends 4 ? 3 : N extends 3 ? 2 : + N extends 2 ? any : + N extends 1 ? 0 : 0; +export type Recur = +>Recur : Recur + + N extends 0 ? S : Recur, `${S}_${S}`>; + +=== a.ts === +import { Recur } from "./lib"; +>Recur : any + +export let a: Recur<5, "a">; +>a : any + +=== b.ts === +import { Recur } from "./lib"; +>Recur : any + +export let b: Recur<5, "a">; +>b : any + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).errors.txt new file mode 100644 index 0000000000000..2af51180b6250 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).errors.txt @@ -0,0 +1,21 @@ +b.ts(2,15): error TS2589: Type instantiation is excessively deep and possibly infinite. + + +==== lib.ts (0 errors) ==== + export type Dec = + N extends 5 ? 4 : N extends 4 ? 3 : N extends 3 ? 2 : + N extends 2 ? any : + N extends 1 ? 0 : 0; + export type Recur = + N extends 0 ? S : Recur, `${S}_${S}`>; + +==== a.ts (0 errors) ==== + import { Recur } from "./lib"; + export let a: Recur<5, "a">; + +==== b.ts (1 errors) ==== + import { Recur } from "./lib"; + export let b: Recur<5, "a">; + ~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).js b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).js new file mode 100644 index 0000000000000..98320f4bda717 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).js @@ -0,0 +1,25 @@ +//// [tests/cases/compiler/checkOrderStableInstantiationErrors.ts] //// + +//// [lib.ts] +export type Dec = + N extends 5 ? 4 : N extends 4 ? 3 : N extends 3 ? 2 : + N extends 2 ? any : + N extends 1 ? 0 : 0; +export type Recur = + N extends 0 ? S : Recur, `${S}_${S}`>; + +//// [a.ts] +import { Recur } from "./lib"; +export let a: Recur<5, "a">; + +//// [b.ts] +import { Recur } from "./lib"; +export let b: Recur<5, "a">; + + +//// [lib.js] +export {}; +//// [a.js] +export let a; +//// [b.js] +export let b; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).symbols new file mode 100644 index 0000000000000..a64ce59423174 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).symbols @@ -0,0 +1,48 @@ +//// [tests/cases/compiler/checkOrderStableInstantiationErrors.ts] //// + +=== lib.ts === +export type Dec = +>Dec : Symbol(Dec, Decl(lib.ts, 0, 0)) +>N : Symbol(N, Decl(lib.ts, 0, 16)) + + N extends 5 ? 4 : N extends 4 ? 3 : N extends 3 ? 2 : +>N : Symbol(N, Decl(lib.ts, 0, 16)) +>N : Symbol(N, Decl(lib.ts, 0, 16)) +>N : Symbol(N, Decl(lib.ts, 0, 16)) + + N extends 2 ? any : +>N : Symbol(N, Decl(lib.ts, 0, 16)) + + N extends 1 ? 0 : 0; +>N : Symbol(N, Decl(lib.ts, 0, 16)) + +export type Recur = +>Recur : Symbol(Recur, Decl(lib.ts, 3, 24)) +>N : Symbol(N, Decl(lib.ts, 4, 18)) +>S : Symbol(S, Decl(lib.ts, 4, 35)) + + N extends 0 ? S : Recur, `${S}_${S}`>; +>N : Symbol(N, Decl(lib.ts, 4, 18)) +>S : Symbol(S, Decl(lib.ts, 4, 35)) +>Recur : Symbol(Recur, Decl(lib.ts, 3, 24)) +>Dec : Symbol(Dec, Decl(lib.ts, 0, 0)) +>N : Symbol(N, Decl(lib.ts, 4, 18)) +>S : Symbol(S, Decl(lib.ts, 4, 35)) +>S : Symbol(S, Decl(lib.ts, 4, 35)) + +=== a.ts === +import { Recur } from "./lib"; +>Recur : Symbol(Recur, Decl(a.ts, 0, 8)) + +export let a: Recur<5, "a">; +>a : Symbol(a, Decl(a.ts, 1, 10)) +>Recur : Symbol(Recur, Decl(a.ts, 0, 8)) + +=== b.ts === +import { Recur } from "./lib"; +>Recur : Symbol(Recur, Decl(b.ts, 0, 8)) + +export let b: Recur<5, "a">; +>b : Symbol(b, Decl(b.ts, 1, 10)) +>Recur : Symbol(Recur, Decl(b.ts, 0, 8)) + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).types b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).types new file mode 100644 index 0000000000000..fb92d29504f6c --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).types @@ -0,0 +1,28 @@ +//// [tests/cases/compiler/checkOrderStableInstantiationErrors.ts] //// + +=== lib.ts === +export type Dec = +>Dec : Dec + + N extends 5 ? 4 : N extends 4 ? 3 : N extends 3 ? 2 : + N extends 2 ? any : + N extends 1 ? 0 : 0; +export type Recur = +>Recur : Recur + + N extends 0 ? S : Recur, `${S}_${S}`>; + +=== a.ts === +import { Recur } from "./lib"; +>Recur : any + +export let a: Recur<5, "a">; +>a : any + +=== b.ts === +import { Recur } from "./lib"; +>Recur : any + +export let b: Recur<5, "a">; +>b : any + diff --git a/tsc/testdata/tests/cases/compiler/checkOrderStableInstantiationErrors.ts b/tsc/testdata/tests/cases/compiler/checkOrderStableInstantiationErrors.ts new file mode 100644 index 0000000000000..02ad1167da820 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/checkOrderStableInstantiationErrors.ts @@ -0,0 +1,16 @@ +// @checkOrder: default, reverse +// @filename: lib.ts +export type Dec = + N extends 5 ? 4 : N extends 4 ? 3 : N extends 3 ? 2 : + N extends 2 ? any : + N extends 1 ? 0 : 0; +export type Recur = + N extends 0 ? S : Recur, `${S}_${S}`>; + +// @filename: a.ts +import { Recur } from "./lib"; +export let a: Recur<5, "a">; + +// @filename: b.ts +import { Recur } from "./lib"; +export let b: Recur<5, "a">; From 73591dad7b4f6dfe95577427546b7abf5bfd6516 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 23 Oct 2026 00:53:52 -0700 Subject: [PATCH 056/194] Add a test of awaiting a promise type that refers back to itself Whether an await of such a promise reports the circularity depends on which await is checked first: only the first reports it. --- ...waitedCycle(checkorder=default).errors.txt | 24 +++++++++++++ ...erAwaitedCycle(checkorder=default).symbols | 34 +++++++++++++++++++ ...rderAwaitedCycle(checkorder=default).types | 31 +++++++++++++++++ ...aitedCycle(checkorder=isolated).errors.txt | 27 +++++++++++++++ ...rAwaitedCycle(checkorder=isolated).symbols | 34 +++++++++++++++++++ ...derAwaitedCycle(checkorder=isolated).types | 31 +++++++++++++++++ ...waitedCycle(checkorder=reverse).errors.txt | 24 +++++++++++++ ...erAwaitedCycle(checkorder=reverse).symbols | 34 +++++++++++++++++++ ...rderAwaitedCycle(checkorder=reverse).types | 31 +++++++++++++++++ ...tedCycle(checkorder=typesfirst).errors.txt | 24 +++++++++++++ ...waitedCycle(checkorder=typesfirst).symbols | 34 +++++++++++++++++++ ...rAwaitedCycle(checkorder=typesfirst).types | 31 +++++++++++++++++ .../cases/compiler/checkOrderAwaitedCycle.ts | 21 ++++++++++++ 13 files changed, 380 insertions(+) create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=default).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=default).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=default).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=isolated).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=isolated).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=isolated).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=reverse).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=reverse).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=reverse).types create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=typesfirst).types create mode 100644 tsc/testdata/tests/cases/compiler/checkOrderAwaitedCycle.ts diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=default).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=default).errors.txt new file mode 100644 index 0000000000000..fbdc7623ca157 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=default).errors.txt @@ -0,0 +1,24 @@ +a.ts(5,11): error TS2322: Type 'string' is not assignable to type 'number'. +a.ts(5,23): error TS1062: Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method. +b.ts(2,11): error TS2322: Type 'string' is not assignable to type 'number'. + + +==== a.ts (2 errors) ==== + type S = string | Promise; + declare const s: S; + declare const p: Promise; + async function f1() { + const a: number = await p; + ~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. + ~~~~~~~ +!!! error TS1062: Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method. + } + +==== b.ts (1 errors) ==== + async function f2() { + const b: number = await s; + ~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=default).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=default).symbols new file mode 100644 index 0000000000000..9bdecefb54f4f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=default).symbols @@ -0,0 +1,34 @@ +//// [tests/cases/compiler/checkOrderAwaitedCycle.ts] //// + +=== a.ts === +type S = string | Promise; +>S : Symbol(S, Decl(a.ts, 0, 0)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +>S : Symbol(S, Decl(a.ts, 0, 0)) + +declare const s: S; +>s : Symbol(s, Decl(a.ts, 1, 13)) +>S : Symbol(S, Decl(a.ts, 0, 0)) + +declare const p: Promise; +>p : Symbol(p, Decl(a.ts, 2, 13)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +>S : Symbol(S, Decl(a.ts, 0, 0)) + +async function f1() { +>f1 : Symbol(f1, Decl(a.ts, 2, 28)) + + const a: number = await p; +>a : Symbol(a, Decl(a.ts, 4, 9)) +>p : Symbol(p, Decl(a.ts, 2, 13)) +} + +=== b.ts === +async function f2() { +>f2 : Symbol(f2, Decl(b.ts, 0, 0)) + + const b: number = await s; +>b : Symbol(b, Decl(b.ts, 1, 9)) +>s : Symbol(s, Decl(a.ts, 1, 13)) +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=default).types b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=default).types new file mode 100644 index 0000000000000..6cbf09f81f2c8 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=default).types @@ -0,0 +1,31 @@ +//// [tests/cases/compiler/checkOrderAwaitedCycle.ts] //// + +=== a.ts === +type S = string | Promise; +>S : S + +declare const s: S; +>s : S + +declare const p: Promise; +>p : Promise + +async function f1() { +>f1 : () => Promise + + const a: number = await p; +>a : number +>await p : string +>p : Promise +} + +=== b.ts === +async function f2() { +>f2 : () => Promise + + const b: number = await s; +>b : number +>await s : string +>s : S +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=isolated).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=isolated).errors.txt new file mode 100644 index 0000000000000..126b9485926f5 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=isolated).errors.txt @@ -0,0 +1,27 @@ +a.ts(5,11): error TS2322: Type 'string' is not assignable to type 'number'. +a.ts(5,23): error TS1062: Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method. +b.ts(2,11): error TS2322: Type 'string' is not assignable to type 'number'. +b.ts(2,23): error TS1062: Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method. + + +==== a.ts (2 errors) ==== + type S = string | Promise; + declare const s: S; + declare const p: Promise; + async function f1() { + const a: number = await p; + ~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. + ~~~~~~~ +!!! error TS1062: Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method. + } + +==== b.ts (2 errors) ==== + async function f2() { + const b: number = await s; + ~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. + ~~~~~~~ +!!! error TS1062: Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method. + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=isolated).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=isolated).symbols new file mode 100644 index 0000000000000..9bdecefb54f4f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=isolated).symbols @@ -0,0 +1,34 @@ +//// [tests/cases/compiler/checkOrderAwaitedCycle.ts] //// + +=== a.ts === +type S = string | Promise; +>S : Symbol(S, Decl(a.ts, 0, 0)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +>S : Symbol(S, Decl(a.ts, 0, 0)) + +declare const s: S; +>s : Symbol(s, Decl(a.ts, 1, 13)) +>S : Symbol(S, Decl(a.ts, 0, 0)) + +declare const p: Promise; +>p : Symbol(p, Decl(a.ts, 2, 13)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +>S : Symbol(S, Decl(a.ts, 0, 0)) + +async function f1() { +>f1 : Symbol(f1, Decl(a.ts, 2, 28)) + + const a: number = await p; +>a : Symbol(a, Decl(a.ts, 4, 9)) +>p : Symbol(p, Decl(a.ts, 2, 13)) +} + +=== b.ts === +async function f2() { +>f2 : Symbol(f2, Decl(b.ts, 0, 0)) + + const b: number = await s; +>b : Symbol(b, Decl(b.ts, 1, 9)) +>s : Symbol(s, Decl(a.ts, 1, 13)) +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=isolated).types b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=isolated).types new file mode 100644 index 0000000000000..6cbf09f81f2c8 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=isolated).types @@ -0,0 +1,31 @@ +//// [tests/cases/compiler/checkOrderAwaitedCycle.ts] //// + +=== a.ts === +type S = string | Promise; +>S : S + +declare const s: S; +>s : S + +declare const p: Promise; +>p : Promise + +async function f1() { +>f1 : () => Promise + + const a: number = await p; +>a : number +>await p : string +>p : Promise +} + +=== b.ts === +async function f2() { +>f2 : () => Promise + + const b: number = await s; +>b : number +>await s : string +>s : S +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=reverse).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=reverse).errors.txt new file mode 100644 index 0000000000000..55a3e6d752ab1 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=reverse).errors.txt @@ -0,0 +1,24 @@ +a.ts(5,11): error TS2322: Type 'string' is not assignable to type 'number'. +b.ts(2,11): error TS2322: Type 'string' is not assignable to type 'number'. +b.ts(2,23): error TS1062: Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method. + + +==== a.ts (1 errors) ==== + type S = string | Promise; + declare const s: S; + declare const p: Promise; + async function f1() { + const a: number = await p; + ~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. + } + +==== b.ts (2 errors) ==== + async function f2() { + const b: number = await s; + ~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. + ~~~~~~~ +!!! error TS1062: Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method. + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=reverse).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=reverse).symbols new file mode 100644 index 0000000000000..9bdecefb54f4f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=reverse).symbols @@ -0,0 +1,34 @@ +//// [tests/cases/compiler/checkOrderAwaitedCycle.ts] //// + +=== a.ts === +type S = string | Promise; +>S : Symbol(S, Decl(a.ts, 0, 0)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +>S : Symbol(S, Decl(a.ts, 0, 0)) + +declare const s: S; +>s : Symbol(s, Decl(a.ts, 1, 13)) +>S : Symbol(S, Decl(a.ts, 0, 0)) + +declare const p: Promise; +>p : Symbol(p, Decl(a.ts, 2, 13)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +>S : Symbol(S, Decl(a.ts, 0, 0)) + +async function f1() { +>f1 : Symbol(f1, Decl(a.ts, 2, 28)) + + const a: number = await p; +>a : Symbol(a, Decl(a.ts, 4, 9)) +>p : Symbol(p, Decl(a.ts, 2, 13)) +} + +=== b.ts === +async function f2() { +>f2 : Symbol(f2, Decl(b.ts, 0, 0)) + + const b: number = await s; +>b : Symbol(b, Decl(b.ts, 1, 9)) +>s : Symbol(s, Decl(a.ts, 1, 13)) +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=reverse).types b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=reverse).types new file mode 100644 index 0000000000000..6cbf09f81f2c8 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=reverse).types @@ -0,0 +1,31 @@ +//// [tests/cases/compiler/checkOrderAwaitedCycle.ts] //// + +=== a.ts === +type S = string | Promise; +>S : S + +declare const s: S; +>s : S + +declare const p: Promise; +>p : Promise + +async function f1() { +>f1 : () => Promise + + const a: number = await p; +>a : number +>await p : string +>p : Promise +} + +=== b.ts === +async function f2() { +>f2 : () => Promise + + const b: number = await s; +>b : number +>await s : string +>s : S +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..55a3e6d752ab1 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=typesfirst).errors.txt @@ -0,0 +1,24 @@ +a.ts(5,11): error TS2322: Type 'string' is not assignable to type 'number'. +b.ts(2,11): error TS2322: Type 'string' is not assignable to type 'number'. +b.ts(2,23): error TS1062: Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method. + + +==== a.ts (1 errors) ==== + type S = string | Promise; + declare const s: S; + declare const p: Promise; + async function f1() { + const a: number = await p; + ~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. + } + +==== b.ts (2 errors) ==== + async function f2() { + const b: number = await s; + ~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. + ~~~~~~~ +!!! error TS1062: Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method. + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..9bdecefb54f4f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=typesfirst).symbols @@ -0,0 +1,34 @@ +//// [tests/cases/compiler/checkOrderAwaitedCycle.ts] //// + +=== a.ts === +type S = string | Promise; +>S : Symbol(S, Decl(a.ts, 0, 0)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +>S : Symbol(S, Decl(a.ts, 0, 0)) + +declare const s: S; +>s : Symbol(s, Decl(a.ts, 1, 13)) +>S : Symbol(S, Decl(a.ts, 0, 0)) + +declare const p: Promise; +>p : Symbol(p, Decl(a.ts, 2, 13)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +>S : Symbol(S, Decl(a.ts, 0, 0)) + +async function f1() { +>f1 : Symbol(f1, Decl(a.ts, 2, 28)) + + const a: number = await p; +>a : Symbol(a, Decl(a.ts, 4, 9)) +>p : Symbol(p, Decl(a.ts, 2, 13)) +} + +=== b.ts === +async function f2() { +>f2 : Symbol(f2, Decl(b.ts, 0, 0)) + + const b: number = await s; +>b : Symbol(b, Decl(b.ts, 1, 9)) +>s : Symbol(s, Decl(a.ts, 1, 13)) +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=typesfirst).types new file mode 100644 index 0000000000000..6cbf09f81f2c8 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=typesfirst).types @@ -0,0 +1,31 @@ +//// [tests/cases/compiler/checkOrderAwaitedCycle.ts] //// + +=== a.ts === +type S = string | Promise; +>S : S + +declare const s: S; +>s : S + +declare const p: Promise; +>p : Promise + +async function f1() { +>f1 : () => Promise + + const a: number = await p; +>a : number +>await p : string +>p : Promise +} + +=== b.ts === +async function f2() { +>f2 : () => Promise + + const b: number = await s; +>b : number +>await s : string +>s : S +} + diff --git a/tsc/testdata/tests/cases/compiler/checkOrderAwaitedCycle.ts b/tsc/testdata/tests/cases/compiler/checkOrderAwaitedCycle.ts new file mode 100644 index 0000000000000..f39f63e9c1f54 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/checkOrderAwaitedCycle.ts @@ -0,0 +1,21 @@ +// @strict: true +// @target: esnext +// @lib: esnext +// @noEmit: true +// @checkOrder: default, reverse, isolated, typesfirst + +// Awaiting a promise whose promised type refers back to it reports a +// circularity wherever it is awaited, whichever is awaited first. + +// @filename: a.ts +type S = string | Promise; +declare const s: S; +declare const p: Promise; +async function f1() { + const a: number = await p; +} + +// @filename: b.ts +async function f2() { + const b: number = await s; +} From f480d71a1d940c1d2f1e6aea0e90b77c973169b8 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 22 Oct 2026 17:01:43 -0700 Subject: [PATCH 057/194] Test check order for errors reused within the node reporting them A class whose type arguments instantiate infinitely reports the error at the class, and the members resolved while doing so are cached until the class has been checked. A property access in one of its methods reaches the same members, but only reports the error when it is checked before the class, as it is when types are computed first. --- ...ationErrors(checkorder=default).errors.txt | 14 +++ ...InstantiationErrors(checkorder=default).js | 24 +++++ ...ntiationErrors(checkorder=default).symbols | 42 +++++++++ ...tantiationErrors(checkorder=default).types | 36 ++++++++ ...ationErrors(checkorder=reverse).errors.txt | 14 +++ ...InstantiationErrors(checkorder=reverse).js | 24 +++++ ...ntiationErrors(checkorder=reverse).symbols | 42 +++++++++ ...tantiationErrors(checkorder=reverse).types | 36 ++++++++ ...onErrors(checkorder=typesfirst).errors.txt | 34 +++++++ ...tantiationErrors(checkorder=typesfirst).js | 49 ++++++++++ ...ationErrors(checkorder=typesfirst).symbols | 90 +++++++++++++++++++ ...tiationErrors(checkorder=typesfirst).types | 64 +++++++++++++ .../checkOrderStableInstantiationErrors.ts | 16 +++- 13 files changed, 484 insertions(+), 1 deletion(-) create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).js create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).types diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).errors.txt index 4bc1c8c683ddc..735d4e676a17d 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).errors.txt @@ -18,4 +18,18 @@ a.ts(2,15): error TS2589: Type instantiation is excessively deep and possibly in ==== b.ts (0 errors) ==== import { Recur } from "./lib"; export let b: Recur<5, "a">; + +==== c.ts (0 errors) ==== + class T { + declare a: A; + declare b: any; + } + class L extends T {} + export class X extends L { + declare a: 'a' | 'b'; + declare b: number; + m() { + this.a; + } + } \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).js b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).js index 98320f4bda717..854a59f625301 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).js +++ b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).js @@ -16,6 +16,20 @@ export let a: Recur<5, "a">; import { Recur } from "./lib"; export let b: Recur<5, "a">; +//// [c.ts] +class T { + declare a: A; + declare b: any; +} +class L extends T {} +export class X extends L { + declare a: 'a' | 'b'; + declare b: number; + m() { + this.a; + } +} + //// [lib.js] export {}; @@ -23,3 +37,13 @@ export {}; export let a; //// [b.js] export let b; +//// [c.js] +class T { +} +class L extends T { +} +export class X extends L { + m() { + this.a; + } +} diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).symbols index a64ce59423174..c98e5279b2d56 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).symbols +++ b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).symbols @@ -46,3 +46,45 @@ export let b: Recur<5, "a">; >b : Symbol(b, Decl(b.ts, 1, 10)) >Recur : Symbol(Recur, Decl(b.ts, 0, 8)) +=== c.ts === +class T { +>T : Symbol(T, Decl(c.ts, 0, 0)) +>A : Symbol(A, Decl(c.ts, 0, 8)) + + declare a: A; +>a : Symbol(T.a, Decl(c.ts, 0, 12)) +>A : Symbol(A, Decl(c.ts, 0, 8)) + + declare b: any; +>b : Symbol(T.b, Decl(c.ts, 1, 17)) +} +class L extends T {} +>L : Symbol(L, Decl(c.ts, 3, 1)) +>RT : Symbol(RT, Decl(c.ts, 4, 8)) +>a : Symbol(a, Decl(c.ts, 4, 20)) +>b : Symbol(b, Decl(c.ts, 4, 34)) +>T : Symbol(T, Decl(c.ts, 0, 0)) +>RT : Symbol(RT, Decl(c.ts, 4, 8)) +>RT : Symbol(RT, Decl(c.ts, 4, 8)) + +export class X extends L { +>X : Symbol(X, Decl(c.ts, 4, 70)) +>L : Symbol(L, Decl(c.ts, 3, 1)) +>X : Symbol(X, Decl(c.ts, 4, 70)) + + declare a: 'a' | 'b'; +>a : Symbol(X.a, Decl(c.ts, 5, 29)) + + declare b: number; +>b : Symbol(X.b, Decl(c.ts, 6, 25)) + + m() { +>m : Symbol(X.m, Decl(c.ts, 7, 22)) + + this.a; +>this.a : Symbol(X.a, Decl(c.ts, 5, 29)) +>this : Symbol(X, Decl(c.ts, 4, 70)) +>a : Symbol(X.a, Decl(c.ts, 5, 29)) + } +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).types b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).types index fb92d29504f6c..8c9592f59bc30 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).types +++ b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).types @@ -26,3 +26,39 @@ import { Recur } from "./lib"; export let b: Recur<5, "a">; >b : any +=== c.ts === +class T { +>T : T + + declare a: A; +>a : A + + declare b: any; +>b : any +} +class L extends T {} +>L : L +>a : "a" | "b" +>b : any +>T : T + +export class X extends L { +>X : X +>L : L + + declare a: 'a' | 'b'; +>a : "a" | "b" + + declare b: number; +>b : number + + m() { +>m : () => void + + this.a; +>this.a : "a" | "b" +>this : this +>a : "a" | "b" + } +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).errors.txt index 2af51180b6250..6e370b78d30f9 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).errors.txt @@ -18,4 +18,18 @@ b.ts(2,15): error TS2589: Type instantiation is excessively deep and possibly in export let b: Recur<5, "a">; ~~~~~~~~~~~~~ !!! error TS2589: Type instantiation is excessively deep and possibly infinite. + +==== c.ts (0 errors) ==== + class T { + declare a: A; + declare b: any; + } + class L extends T {} + export class X extends L { + declare a: 'a' | 'b'; + declare b: number; + m() { + this.a; + } + } \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).js b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).js index 98320f4bda717..854a59f625301 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).js +++ b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).js @@ -16,6 +16,20 @@ export let a: Recur<5, "a">; import { Recur } from "./lib"; export let b: Recur<5, "a">; +//// [c.ts] +class T { + declare a: A; + declare b: any; +} +class L extends T {} +export class X extends L { + declare a: 'a' | 'b'; + declare b: number; + m() { + this.a; + } +} + //// [lib.js] export {}; @@ -23,3 +37,13 @@ export {}; export let a; //// [b.js] export let b; +//// [c.js] +class T { +} +class L extends T { +} +export class X extends L { + m() { + this.a; + } +} diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).symbols index a64ce59423174..c98e5279b2d56 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).symbols +++ b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).symbols @@ -46,3 +46,45 @@ export let b: Recur<5, "a">; >b : Symbol(b, Decl(b.ts, 1, 10)) >Recur : Symbol(Recur, Decl(b.ts, 0, 8)) +=== c.ts === +class T { +>T : Symbol(T, Decl(c.ts, 0, 0)) +>A : Symbol(A, Decl(c.ts, 0, 8)) + + declare a: A; +>a : Symbol(T.a, Decl(c.ts, 0, 12)) +>A : Symbol(A, Decl(c.ts, 0, 8)) + + declare b: any; +>b : Symbol(T.b, Decl(c.ts, 1, 17)) +} +class L extends T {} +>L : Symbol(L, Decl(c.ts, 3, 1)) +>RT : Symbol(RT, Decl(c.ts, 4, 8)) +>a : Symbol(a, Decl(c.ts, 4, 20)) +>b : Symbol(b, Decl(c.ts, 4, 34)) +>T : Symbol(T, Decl(c.ts, 0, 0)) +>RT : Symbol(RT, Decl(c.ts, 4, 8)) +>RT : Symbol(RT, Decl(c.ts, 4, 8)) + +export class X extends L { +>X : Symbol(X, Decl(c.ts, 4, 70)) +>L : Symbol(L, Decl(c.ts, 3, 1)) +>X : Symbol(X, Decl(c.ts, 4, 70)) + + declare a: 'a' | 'b'; +>a : Symbol(X.a, Decl(c.ts, 5, 29)) + + declare b: number; +>b : Symbol(X.b, Decl(c.ts, 6, 25)) + + m() { +>m : Symbol(X.m, Decl(c.ts, 7, 22)) + + this.a; +>this.a : Symbol(X.a, Decl(c.ts, 5, 29)) +>this : Symbol(X, Decl(c.ts, 4, 70)) +>a : Symbol(X.a, Decl(c.ts, 5, 29)) + } +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).types b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).types index fb92d29504f6c..8c9592f59bc30 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).types +++ b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).types @@ -26,3 +26,39 @@ import { Recur } from "./lib"; export let b: Recur<5, "a">; >b : any +=== c.ts === +class T { +>T : T + + declare a: A; +>a : A + + declare b: any; +>b : any +} +class L extends T {} +>L : L +>a : "a" | "b" +>b : any +>T : T + +export class X extends L { +>X : X +>L : L + + declare a: 'a' | 'b'; +>a : "a" | "b" + + declare b: number; +>b : number + + m() { +>m : () => void + + this.a; +>this.a : "a" | "b" +>this : this +>a : "a" | "b" + } +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..9b99a0b62969b --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).errors.txt @@ -0,0 +1,34 @@ +error TS2589: Type instantiation is excessively deep and possibly infinite. + + +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. +==== lib.ts (0 errors) ==== + export type Dec = + N extends 5 ? 4 : N extends 4 ? 3 : N extends 3 ? 2 : + N extends 2 ? any : + N extends 1 ? 0 : 0; + export type Recur = + N extends 0 ? S : Recur, `${S}_${S}`>; + +==== a.ts (0 errors) ==== + import { Recur } from "./lib"; + export let a: Recur<5, "a">; + +==== b.ts (0 errors) ==== + import { Recur } from "./lib"; + export let b: Recur<5, "a">; + +==== c.ts (0 errors) ==== + class T { + declare a: A; + declare b: any; + } + class L extends T {} + export class X extends L { + declare a: 'a' | 'b'; + declare b: number; + m() { + this.a; + } + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).js b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).js new file mode 100644 index 0000000000000..854a59f625301 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).js @@ -0,0 +1,49 @@ +//// [tests/cases/compiler/checkOrderStableInstantiationErrors.ts] //// + +//// [lib.ts] +export type Dec = + N extends 5 ? 4 : N extends 4 ? 3 : N extends 3 ? 2 : + N extends 2 ? any : + N extends 1 ? 0 : 0; +export type Recur = + N extends 0 ? S : Recur, `${S}_${S}`>; + +//// [a.ts] +import { Recur } from "./lib"; +export let a: Recur<5, "a">; + +//// [b.ts] +import { Recur } from "./lib"; +export let b: Recur<5, "a">; + +//// [c.ts] +class T { + declare a: A; + declare b: any; +} +class L extends T {} +export class X extends L { + declare a: 'a' | 'b'; + declare b: number; + m() { + this.a; + } +} + + +//// [lib.js] +export {}; +//// [a.js] +export let a; +//// [b.js] +export let b; +//// [c.js] +class T { +} +class L extends T { +} +export class X extends L { + m() { + this.a; + } +} diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..c98e5279b2d56 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).symbols @@ -0,0 +1,90 @@ +//// [tests/cases/compiler/checkOrderStableInstantiationErrors.ts] //// + +=== lib.ts === +export type Dec = +>Dec : Symbol(Dec, Decl(lib.ts, 0, 0)) +>N : Symbol(N, Decl(lib.ts, 0, 16)) + + N extends 5 ? 4 : N extends 4 ? 3 : N extends 3 ? 2 : +>N : Symbol(N, Decl(lib.ts, 0, 16)) +>N : Symbol(N, Decl(lib.ts, 0, 16)) +>N : Symbol(N, Decl(lib.ts, 0, 16)) + + N extends 2 ? any : +>N : Symbol(N, Decl(lib.ts, 0, 16)) + + N extends 1 ? 0 : 0; +>N : Symbol(N, Decl(lib.ts, 0, 16)) + +export type Recur = +>Recur : Symbol(Recur, Decl(lib.ts, 3, 24)) +>N : Symbol(N, Decl(lib.ts, 4, 18)) +>S : Symbol(S, Decl(lib.ts, 4, 35)) + + N extends 0 ? S : Recur, `${S}_${S}`>; +>N : Symbol(N, Decl(lib.ts, 4, 18)) +>S : Symbol(S, Decl(lib.ts, 4, 35)) +>Recur : Symbol(Recur, Decl(lib.ts, 3, 24)) +>Dec : Symbol(Dec, Decl(lib.ts, 0, 0)) +>N : Symbol(N, Decl(lib.ts, 4, 18)) +>S : Symbol(S, Decl(lib.ts, 4, 35)) +>S : Symbol(S, Decl(lib.ts, 4, 35)) + +=== a.ts === +import { Recur } from "./lib"; +>Recur : Symbol(Recur, Decl(a.ts, 0, 8)) + +export let a: Recur<5, "a">; +>a : Symbol(a, Decl(a.ts, 1, 10)) +>Recur : Symbol(Recur, Decl(a.ts, 0, 8)) + +=== b.ts === +import { Recur } from "./lib"; +>Recur : Symbol(Recur, Decl(b.ts, 0, 8)) + +export let b: Recur<5, "a">; +>b : Symbol(b, Decl(b.ts, 1, 10)) +>Recur : Symbol(Recur, Decl(b.ts, 0, 8)) + +=== c.ts === +class T { +>T : Symbol(T, Decl(c.ts, 0, 0)) +>A : Symbol(A, Decl(c.ts, 0, 8)) + + declare a: A; +>a : Symbol(T.a, Decl(c.ts, 0, 12)) +>A : Symbol(A, Decl(c.ts, 0, 8)) + + declare b: any; +>b : Symbol(T.b, Decl(c.ts, 1, 17)) +} +class L extends T {} +>L : Symbol(L, Decl(c.ts, 3, 1)) +>RT : Symbol(RT, Decl(c.ts, 4, 8)) +>a : Symbol(a, Decl(c.ts, 4, 20)) +>b : Symbol(b, Decl(c.ts, 4, 34)) +>T : Symbol(T, Decl(c.ts, 0, 0)) +>RT : Symbol(RT, Decl(c.ts, 4, 8)) +>RT : Symbol(RT, Decl(c.ts, 4, 8)) + +export class X extends L { +>X : Symbol(X, Decl(c.ts, 4, 70)) +>L : Symbol(L, Decl(c.ts, 3, 1)) +>X : Symbol(X, Decl(c.ts, 4, 70)) + + declare a: 'a' | 'b'; +>a : Symbol(X.a, Decl(c.ts, 5, 29)) + + declare b: number; +>b : Symbol(X.b, Decl(c.ts, 6, 25)) + + m() { +>m : Symbol(X.m, Decl(c.ts, 7, 22)) + + this.a; +>this.a : Symbol(X.a, Decl(c.ts, 5, 29)) +>this : Symbol(X, Decl(c.ts, 4, 70)) +>a : Symbol(X.a, Decl(c.ts, 5, 29)) + } +} + diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).types new file mode 100644 index 0000000000000..8c9592f59bc30 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).types @@ -0,0 +1,64 @@ +//// [tests/cases/compiler/checkOrderStableInstantiationErrors.ts] //// + +=== lib.ts === +export type Dec = +>Dec : Dec + + N extends 5 ? 4 : N extends 4 ? 3 : N extends 3 ? 2 : + N extends 2 ? any : + N extends 1 ? 0 : 0; +export type Recur = +>Recur : Recur + + N extends 0 ? S : Recur, `${S}_${S}`>; + +=== a.ts === +import { Recur } from "./lib"; +>Recur : any + +export let a: Recur<5, "a">; +>a : any + +=== b.ts === +import { Recur } from "./lib"; +>Recur : any + +export let b: Recur<5, "a">; +>b : any + +=== c.ts === +class T { +>T : T + + declare a: A; +>a : A + + declare b: any; +>b : any +} +class L extends T {} +>L : L +>a : "a" | "b" +>b : any +>T : T + +export class X extends L { +>X : X +>L : L + + declare a: 'a' | 'b'; +>a : "a" | "b" + + declare b: number; +>b : number + + m() { +>m : () => void + + this.a; +>this.a : "a" | "b" +>this : this +>a : "a" | "b" + } +} + diff --git a/tsc/testdata/tests/cases/compiler/checkOrderStableInstantiationErrors.ts b/tsc/testdata/tests/cases/compiler/checkOrderStableInstantiationErrors.ts index 02ad1167da820..1cdffd661c908 100644 --- a/tsc/testdata/tests/cases/compiler/checkOrderStableInstantiationErrors.ts +++ b/tsc/testdata/tests/cases/compiler/checkOrderStableInstantiationErrors.ts @@ -1,4 +1,4 @@ -// @checkOrder: default, reverse +// @checkOrder: default, reverse, typesfirst // @filename: lib.ts export type Dec = N extends 5 ? 4 : N extends 4 ? 3 : N extends 3 ? 2 : @@ -14,3 +14,17 @@ export let a: Recur<5, "a">; // @filename: b.ts import { Recur } from "./lib"; export let b: Recur<5, "a">; + +// @filename: c.ts +class T { + declare a: A; + declare b: any; +} +class L extends T {} +export class X extends L { + declare a: 'a' | 'b'; + declare b: number; + m() { + this.a; + } +} From 436ea7163a39a09505482a78f2216c0515aaac28 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 18 Oct 2026 15:29:55 -0700 Subject: [PATCH 058/194] Split checker into shared store and per-checker state MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The checker mixes two kinds of state: memoized facts about the program (links, caches, interned types, diagnostics) and transient state that exists only while a computation is running (resolution stacks, inference contexts, flow stacks, arenas, bound closures). Because both live in one struct, the only way to get independent checking is to build an entirely separate checker, duplicating every cache. Separating them lets multiple checkers run against one store, which is the foundation for cloneable checkers, sharing results across concurrent checks, and eventually treating the store as a database that can be pruned or spilled. │ before.txt │ after.txt │ │ sec/op │ sec/op vs base │ Compiler 1.995 ± 3% 2.010 ± 2% ~ (p=0.167 n=10) │ before.txt │ after.txt │ │ peak-RSS-bytes │ peak-RSS-bytes vs base │ Compiler 366.2Mi ± 6% 361.7Mi ± 7% ~ (p=0.105 n=10) --- tsc/internal/checker/checker.go | 493 +++++++++++++++-------------- tsc/internal/checker/types_test.go | 30 +- 2 files changed, 278 insertions(+), 245 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 52d776229175b..791cfbc23178f 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -594,102 +594,26 @@ type Host interface { var nextCheckerID atomic.Uint32 +// Checker is a checker: the per-computation state (resolution stacks, scratch +// buffers, allocation arenas, and closures bound to this checker) layered +// over a memoStore that holds all memoized, shareable state. Multiple +// checkers may share one store; see Clone. type Checker struct { - id uint32 - program Program - compilerOptions *core.CompilerOptions - files []*ast.SourceFile - fileIndexMap map[*ast.SourceFile]int + *memoStore compareSymbols func(*ast.Symbol, *ast.Symbol) int compareSymbolChains func([]*ast.Symbol, []*ast.Symbol) int - TypeCount uint32 - SymbolCount uint32 - SignatureCount uint32 - TotalInstantiationCount uint32 instantiationCount uint32 - memberLayoutCount uint32 instantiationStack []*Type conditionalConstraintDepth uint32 inlineLevel int serializationLevel int currentNode *ast.Node varianceTypeParameter *Type - languageVersion core.ScriptTarget - moduleKind core.ModuleKind - moduleResolutionKind core.ModuleResolutionKind isInferencePartiallyBlocked bool - legacyDecorators bool - emitStandardClassFields bool - strictNullChecks bool - strictFunctionTypes bool - strictBindCallApply bool - strictPropertyInitialization bool - strictBuiltinIteratorReturn bool - noImplicitAny bool - noImplicitThis bool - useUnknownInCatchVariables bool - exactOptionalPropertyTypes bool - canCollectSymbolAliasAccessibilityData bool wasCanceled bool - arrayVariances []VarianceFlags - globals ast.SymbolTable evaluate evaluator.Evaluator - stringLiteralTypes map[string]*Type - numberLiteralTypes map[jsnum.Number]*Type - nanType *Type - bigintLiteralTypes map[jsnum.PseudoBigInt]*Type - enumLiteralTypes map[EnumLiteralKey]*Type - enumNaNLiteralTypes map[*ast.Symbol]*Type - indexedAccessTypes map[CacheHashKey]*Type - templateLiteralTypes map[CacheHashKey]*Type - stringMappingTypes map[StringMappingKey]*Type - uniqueESSymbolTypes map[*ast.Symbol]*Type - thisExpandoKinds map[*ast.Symbol]thisAssignmentDeclarationKind - thisExpandoLocations map[*ast.Symbol]*ast.Node - subtypeReductionCache map[CacheHashKey][]*Type - cachedTypes map[CachedTypeKey]*Type - cachedSignatures map[CachedSignatureKey]*Signature - undefinedProperties map[*ast.Symbol]*ast.Symbol - narrowedTypes map[NarrowedTypeKey]*Type - assignmentReducedTypes map[AssignmentReducedKey]*Type - discriminatedContextualTypes map[DiscriminatedContextualTypeKey]*Type - instantiationExpressionTypes map[InstantiationExpressionKey]*Type - substitutionTypes map[SubstitutionTypeKey]*Type - reverseMappedCache map[ReverseMappedTypeKey]*Type - reverseHomomorphicMappedCache map[ReverseMappedTypeKey]*Type - iterationTypesCache map[IterationTypesKey]IterationTypes - memberLayoutCache map[CacheHashKey]*MemberLayout - markerTypes collections.Set[*Type] - resolvingExplicitTypeOfSymbol collections.Set[*ast.Symbol] - resolvingAssertionOperands collections.Set[*ast.Node] - constructorOrFunctionChecked collections.Set[*ast.Symbol] - undefinedSymbol *ast.Symbol - argumentsSymbol *ast.Symbol - requireSymbol *ast.Symbol - unknownSymbol *ast.Symbol - unresolvedSymbols map[string]*ast.Symbol - errorTypes map[CacheHashKey]*Type - moduleSymbols map[*ast.Node]*ast.Symbol - globalThisSymbol *ast.Symbol - symbolTableAliasCache map[symbolTableID][]*ast.Symbol - classExpressionNameTables map[ast.NodeId]ast.SymbolTable resolveName func(location *ast.Node, name string, meaning ast.SymbolFlags, nameNotFoundMessage *diagnostics.Message, isUse bool, excludeGlobals bool) *ast.Symbol resolveNameForSymbolSuggestion func(location *ast.Node, name string, meaning ast.SymbolFlags, nameNotFoundMessage *diagnostics.Message, isUse bool, excludeGlobals bool) *ast.Symbol - tupleTypes map[CacheHashKey]*Type - unionTypes map[CacheHashKey]*Type - objectLiteralTypes map[CacheHashKey]*Type - spreadTypes map[CacheHashKey]*Type - objectContentTypes map[CacheHashKey]*Type - spreadSymbols map[spreadSymbolKey]*ast.Symbol - symbolsWithType map[symbolWithTypeKey]*ast.Symbol - paddedProperties map[symbolWithTypeKey]*ast.Symbol - bindingPatternTypes map[CacheHashKey]*Type - unionOfUnionTypes map[UnionOfUnionKey]*Type - intersectionTypes map[CacheHashKey]*Type - intersectionContentTypes map[CacheHashKey]*Type - propertiesTypes map[PropertiesTypesKey]*Type - diagnostics ast.DiagnosticsCollection - suggestionDiagnostics ast.DiagnosticsCollection symbolArena core.Arena[ast.Symbol] symbolWithDataArena core.Arena[ast.SymbolWithData] symbolExtraArena ast.SymbolExtraArena @@ -715,130 +639,15 @@ type Checker struct { layoutMemberInfos map[string]MemberInfo freeTypeSets *temporaryTypeSet freePropertyCounts *temporaryPropertyCounts - mergedSymbols symbolLinkStore[*ast.Symbol] - mergedExportsChecked collections.Set[*ast.Symbol] factory ast.NodeFactory - nodeLinks core.LinkStore[*ast.Node, NodeLinks] - signatureLinks nodeLinkStore[SignatureLinks] - symbolNodeLinks nodeLinkStore[SymbolNodeLinks] - typeNodeLinks nodeLinkStore[TypeNodeLinks] - enumMemberLinks core.LinkStore[*ast.Node, EnumMemberLinks] - arrayLiteralLinks core.LinkStore[*ast.Node, ArrayLiteralLinks] - switchStatementLinks core.LinkStore[*ast.Node, SwitchStatementLinks] - jsxElementLinks core.LinkStore[*ast.Node, JsxElementLinks] - computedNameLinks core.LinkStore[*ast.Node, ComputedNameNodeLinks] - symbolReferenceLinks core.LinkStore[*ast.Symbol, SymbolReferenceLinks] - valueSymbolLinks symbolLinkStore[ValueSymbolLinks] - mappedSymbolLinks core.LinkStore[*ast.Symbol, MappedSymbolLinks] - deferredSymbolLinks core.LinkStore[*ast.Symbol, DeferredSymbolLinks] - aliasSymbolLinks core.LinkStore[*ast.Symbol, AliasSymbolLinks] - moduleSymbolLinks core.LinkStore[*ast.Symbol, ModuleSymbolLinks] - lateBoundLinks core.LinkStore[*ast.Symbol, LateBoundLinks] - exportTypeLinks core.LinkStore[*ast.Symbol, ExportTypeLinks] - membersAndExportsLinks core.LinkStore[*ast.Symbol, MembersAndExportsLinks] - typeAliasLinks core.LinkStore[*ast.Symbol, TypeAliasLinks] - declaredTypeLinks core.LinkStore[*ast.Symbol, DeclaredTypeLinks] - spreadLinks core.LinkStore[*ast.Symbol, SpreadLinks] - varianceLinks core.LinkStore[*ast.Symbol, VarianceLinks] - ReverseMappedSymbolLinks core.LinkStore[*ast.Symbol, ReverseMappedSymbolLinks] - markedAssignmentSymbolLinks core.LinkStore[*ast.Symbol, MarkedAssignmentSymbolLinks] - symbolContainerLinks core.LinkStore[*ast.Symbol, ContainingSymbolLinks] - externalModuleContainers *externalModuleContainerIndex - sourceFileLinks core.LinkStore[*ast.SourceFile, SourceFileLinks] regExpScanner *scanner.Scanner - patternForType map[*Type]*ast.Node - contextFreeTypes map[*ast.Node]*Type - anyType *Type - autoType *Type - wildcardType *Type - blockedStringType *Type - errorType *Type - unresolvedType *Type - nonInferrableAnyType *Type - intrinsicMarkerType *Type - unknownType *Type - undefinedType *Type - undefinedWideningType *Type - missingType *Type - undefinedOrMissingType *Type - optionalType *Type - nullType *Type - nullWideningType *Type - stringType *Type - numberType *Type - bigintType *Type - regularFalseType *Type - falseType *Type - regularTrueType *Type - trueType *Type - booleanType *Type - esSymbolType *Type - voidType *Type - neverType *Type - silentNeverType *Type - implicitNeverType *Type - unreachableNeverType *Type - nonPrimitiveType *Type - stringOrNumberType *Type - stringNumberSymbolType *Type - numberOrBigIntType *Type - templateConstraintType *Type - numericStringType *Type - uniqueLiteralType *Type uniqueLiteralMapper *TypeMapper reliabilityFlags RelationComparisonResult reportUnreliableMapper *TypeMapper reportUnmeasurableMapper *TypeMapper restrictiveMapper *TypeMapper permissiveMapper *TypeMapper - emptyObjectType *Type - emptyJsxObjectType *Type - emptyFreshJsxObjectType *Type - emptyTypeLiteralType *Type - unknownEmptyObjectType *Type - unknownUnionType *Type - emptyGenericType *Type - anyFunctionType *Type - noConstraintType *Type - circularConstraintType *Type - resolvingDefaultType *Type - markerSuperType *Type - markerSubType *Type - markerOtherType *Type - markerSuperTypeForCheck *Type - markerSubTypeForCheck *Type - noTypePredicate *TypePredicate - anySignature *Signature - unknownSignature *Signature - resolvingSignature *Signature - silentNeverSignature *Signature - cachedArgumentsReferenced map[*ast.Node]bool - enumNumberIndexInfo *IndexInfo - anyBaseTypeIndexInfo *IndexInfo - patternAmbientModules []*ast.PatternAmbientModule - patternAmbientModuleAugmentations ast.SymbolTable - patternAmbientModuleAugmentationTargets ast.SymbolTable - moduleImportAttributesTypes map[*ast.Symbol]*Type - globalObjectType *Type - globalFunctionType *Type - globalCallableFunctionType *Type - globalNewableFunctionType *Type - globalArrayType *Type - globalReadonlyArrayType *Type - globalStringType *Type - globalNumberType *Type - globalBooleanType *Type - globalRegExpType *Type - globalThisType *Type - anyArrayType *Type - autoArrayType *Type - anyReadonlyArrayType *Type - deferredGlobalImportMetaExpressionType *Type contextualBindingPatterns []*ast.Node - emptyStringType *Type - zeroType *Type - zeroBigIntType *Type - typeofType *Type typeResolutions []TypeResolution resolutionStart int varianceStack []VarianceStackEntry @@ -850,7 +659,6 @@ type Checker struct { lastGetCombinedModifierFlagsResult ast.ModifierFlags freeinferenceState *InferenceState freeFlowState *FlowState - flowLoopCache map[FlowLoopKey]*Type flowLoopStack []FlowLoopInfo sharedFlows []SharedFlow flowLoopFrameCount uint64 @@ -859,8 +667,6 @@ type Checker struct { flowTypeCache map[*ast.Node]*Type lastFlowNode *ast.FlowNode lastFlowNodeReachable bool - flowNodeReachable map[*ast.FlowNode]bool - flowNodePostSuper map[*ast.FlowNode]bool renamedBindingElementsInTypes []*ast.Node contextualInfos []ContextualInfo inferenceContextInfos []InferenceContextInfo @@ -870,12 +676,6 @@ type Checker struct { resolvingObjectTypeStack []ResolvingObjectType reverseExpandingFlags ExpandingFlags freeRelater *Relater - subtypeRelation *Relation - strictSubtypeRelation *Relation - assignableRelation *Relation - comparableRelation *Relation - identityRelation *Relation - enumRelation map[EnumRelationKey]RelationComparisonResult getGlobalESSymbolType func() *Type getGlobalBigIntType func() *Type getGlobalImportMetaType func() *Type @@ -936,38 +736,249 @@ type Checker struct { isStringIndexSignatureOnlyType func(*Type) bool markNodeAssignments func(*ast.Node) bool compareTypesAssignable TypeComparer - emitResolverLinks EmitResolverLinks - _jsxNamespace string - _jsxFactoryEntity *ast.Node skipDirectInferenceNodes collections.Set[*ast.Node] ctx context.Context - packagesMap map[string]bool activeMappers []*TypeMapper activeTypeMappersCaches []clearableMap[*Type] - ambientModulesOnce sync.Once - ambientModules []*ast.Symbol withinUnreachableCode bool - reportedUnreachableNodes collections.Set[*ast.Node] - nonExistentProperties collections.Set[NonExistentPropertyKey] - deferredDiagnosticCallbacks []func() typeToStringNodebuilder *NodeBuilder - - mu sync.Mutex - tracer *Tracer // Optional tracer for trace events and type recording (for --generateTrace) + tracer *Tracer // Optional tracer for trace events and type recording (for --generateTrace) +} + +// memoStore holds the memoized state of a checker: interned types, links, +// relation caches, and collected diagnostics. Every checker sharing a store +// observes the same results. +type memoStore struct { + root *Checker // The checker that created this store; owns type back-pointers. + id uint32 + program Program + compilerOptions *core.CompilerOptions + files []*ast.SourceFile + fileIndexMap map[*ast.SourceFile]int + TypeCount uint32 + memberLayoutCount uint32 + SymbolCount uint32 + SignatureCount uint32 + TotalInstantiationCount uint32 + languageVersion core.ScriptTarget + moduleKind core.ModuleKind + moduleResolutionKind core.ModuleResolutionKind + legacyDecorators bool + emitStandardClassFields bool + strictNullChecks bool + strictFunctionTypes bool + strictBindCallApply bool + strictPropertyInitialization bool + strictBuiltinIteratorReturn bool + noImplicitAny bool + noImplicitThis bool + useUnknownInCatchVariables bool + exactOptionalPropertyTypes bool + canCollectSymbolAliasAccessibilityData bool + arrayVariances []VarianceFlags + globals ast.SymbolTable + stringLiteralTypes map[string]*Type + numberLiteralTypes map[jsnum.Number]*Type + nanType *Type + bigintLiteralTypes map[jsnum.PseudoBigInt]*Type + enumLiteralTypes map[EnumLiteralKey]*Type + enumNaNLiteralTypes map[*ast.Symbol]*Type + indexedAccessTypes map[CacheHashKey]*Type + templateLiteralTypes map[CacheHashKey]*Type + stringMappingTypes map[StringMappingKey]*Type + uniqueESSymbolTypes map[*ast.Symbol]*Type + thisExpandoKinds map[*ast.Symbol]thisAssignmentDeclarationKind + thisExpandoLocations map[*ast.Symbol]*ast.Node + subtypeReductionCache map[CacheHashKey][]*Type + cachedTypes map[CachedTypeKey]*Type + cachedSignatures map[CachedSignatureKey]*Signature + undefinedProperties map[*ast.Symbol]*ast.Symbol + narrowedTypes map[NarrowedTypeKey]*Type + assignmentReducedTypes map[AssignmentReducedKey]*Type + discriminatedContextualTypes map[DiscriminatedContextualTypeKey]*Type + instantiationExpressionTypes map[InstantiationExpressionKey]*Type + substitutionTypes map[SubstitutionTypeKey]*Type + reverseMappedCache map[ReverseMappedTypeKey]*Type + reverseHomomorphicMappedCache map[ReverseMappedTypeKey]*Type + iterationTypesCache map[IterationTypesKey]IterationTypes + memberLayoutCache map[CacheHashKey]*MemberLayout + markerTypes collections.Set[*Type] + resolvingExplicitTypeOfSymbol collections.Set[*ast.Symbol] + resolvingAssertionOperands collections.Set[*ast.Node] + constructorOrFunctionChecked collections.Set[*ast.Symbol] + undefinedSymbol *ast.Symbol + argumentsSymbol *ast.Symbol + requireSymbol *ast.Symbol + unknownSymbol *ast.Symbol + unresolvedSymbols map[string]*ast.Symbol + errorTypes map[CacheHashKey]*Type + moduleSymbols map[*ast.Node]*ast.Symbol + globalThisSymbol *ast.Symbol + symbolTableAliasCache map[symbolTableID][]*ast.Symbol + classExpressionNameTables map[ast.NodeId]ast.SymbolTable + tupleTypes map[CacheHashKey]*Type + unionTypes map[CacheHashKey]*Type + objectLiteralTypes map[CacheHashKey]*Type + spreadTypes map[CacheHashKey]*Type + objectContentTypes map[CacheHashKey]*Type + spreadSymbols map[spreadSymbolKey]*ast.Symbol + symbolsWithType map[symbolWithTypeKey]*ast.Symbol + paddedProperties map[symbolWithTypeKey]*ast.Symbol + bindingPatternTypes map[CacheHashKey]*Type + unionOfUnionTypes map[UnionOfUnionKey]*Type + intersectionTypes map[CacheHashKey]*Type + intersectionContentTypes map[CacheHashKey]*Type + propertiesTypes map[PropertiesTypesKey]*Type + diagnostics ast.DiagnosticsCollection + suggestionDiagnostics ast.DiagnosticsCollection + mergedSymbols symbolLinkStore[*ast.Symbol] + mergedExportsChecked collections.Set[*ast.Symbol] + nodeLinks core.LinkStore[*ast.Node, NodeLinks] + signatureLinks nodeLinkStore[SignatureLinks] + symbolNodeLinks nodeLinkStore[SymbolNodeLinks] + typeNodeLinks nodeLinkStore[TypeNodeLinks] + enumMemberLinks core.LinkStore[*ast.Node, EnumMemberLinks] + arrayLiteralLinks core.LinkStore[*ast.Node, ArrayLiteralLinks] + switchStatementLinks core.LinkStore[*ast.Node, SwitchStatementLinks] + jsxElementLinks core.LinkStore[*ast.Node, JsxElementLinks] + computedNameLinks core.LinkStore[*ast.Node, ComputedNameNodeLinks] + symbolReferenceLinks core.LinkStore[*ast.Symbol, SymbolReferenceLinks] + valueSymbolLinks symbolLinkStore[ValueSymbolLinks] + mappedSymbolLinks core.LinkStore[*ast.Symbol, MappedSymbolLinks] + deferredSymbolLinks core.LinkStore[*ast.Symbol, DeferredSymbolLinks] + aliasSymbolLinks core.LinkStore[*ast.Symbol, AliasSymbolLinks] + moduleSymbolLinks core.LinkStore[*ast.Symbol, ModuleSymbolLinks] + lateBoundLinks core.LinkStore[*ast.Symbol, LateBoundLinks] + exportTypeLinks core.LinkStore[*ast.Symbol, ExportTypeLinks] + membersAndExportsLinks core.LinkStore[*ast.Symbol, MembersAndExportsLinks] + typeAliasLinks core.LinkStore[*ast.Symbol, TypeAliasLinks] + declaredTypeLinks core.LinkStore[*ast.Symbol, DeclaredTypeLinks] + spreadLinks core.LinkStore[*ast.Symbol, SpreadLinks] + varianceLinks core.LinkStore[*ast.Symbol, VarianceLinks] + ReverseMappedSymbolLinks core.LinkStore[*ast.Symbol, ReverseMappedSymbolLinks] + markedAssignmentSymbolLinks core.LinkStore[*ast.Symbol, MarkedAssignmentSymbolLinks] + symbolContainerLinks core.LinkStore[*ast.Symbol, ContainingSymbolLinks] + externalModuleContainers *externalModuleContainerIndex + sourceFileLinks core.LinkStore[*ast.SourceFile, SourceFileLinks] + patternForType map[*Type]*ast.Node + contextFreeTypes map[*ast.Node]*Type + anyType *Type + autoType *Type + wildcardType *Type + blockedStringType *Type + errorType *Type + unresolvedType *Type + nonInferrableAnyType *Type + intrinsicMarkerType *Type + unknownType *Type + undefinedType *Type + undefinedWideningType *Type + missingType *Type + undefinedOrMissingType *Type + optionalType *Type + nullType *Type + nullWideningType *Type + stringType *Type + numberType *Type + bigintType *Type + regularFalseType *Type + falseType *Type + regularTrueType *Type + trueType *Type + booleanType *Type + esSymbolType *Type + voidType *Type + neverType *Type + silentNeverType *Type + implicitNeverType *Type + unreachableNeverType *Type + nonPrimitiveType *Type + stringOrNumberType *Type + stringNumberSymbolType *Type + numberOrBigIntType *Type + templateConstraintType *Type + numericStringType *Type + uniqueLiteralType *Type + emptyObjectType *Type + emptyJsxObjectType *Type + emptyFreshJsxObjectType *Type + emptyTypeLiteralType *Type + unknownEmptyObjectType *Type + unknownUnionType *Type + emptyGenericType *Type + anyFunctionType *Type + noConstraintType *Type + circularConstraintType *Type + resolvingDefaultType *Type + markerSuperType *Type + markerSubType *Type + markerOtherType *Type + markerSuperTypeForCheck *Type + markerSubTypeForCheck *Type + noTypePredicate *TypePredicate + anySignature *Signature + unknownSignature *Signature + resolvingSignature *Signature + silentNeverSignature *Signature + cachedArgumentsReferenced map[*ast.Node]bool + enumNumberIndexInfo *IndexInfo + anyBaseTypeIndexInfo *IndexInfo + patternAmbientModules []*ast.PatternAmbientModule + patternAmbientModuleAugmentations ast.SymbolTable + patternAmbientModuleAugmentationTargets ast.SymbolTable + moduleImportAttributesTypes map[*ast.Symbol]*Type + globalObjectType *Type + globalFunctionType *Type + globalCallableFunctionType *Type + globalNewableFunctionType *Type + globalArrayType *Type + globalReadonlyArrayType *Type + globalStringType *Type + globalNumberType *Type + globalBooleanType *Type + globalRegExpType *Type + globalThisType *Type + anyArrayType *Type + autoArrayType *Type + anyReadonlyArrayType *Type + deferredGlobalImportMetaExpressionType *Type + emptyStringType *Type + zeroType *Type + zeroBigIntType *Type + typeofType *Type + flowLoopCache map[FlowLoopKey]*Type + flowNodeReachable map[*ast.FlowNode]bool + flowNodePostSuper map[*ast.FlowNode]bool + subtypeRelation *Relation + strictSubtypeRelation *Relation + assignableRelation *Relation + comparableRelation *Relation + identityRelation *Relation + enumRelation map[EnumRelationKey]RelationComparisonResult + emitResolverLinks EmitResolverLinks + _jsxNamespace string + _jsxFactoryEntity *ast.Node + packagesMap map[string]bool + ambientModulesOnce sync.Once + ambientModules []*ast.Symbol + reportedUnreachableNodes collections.Set[*ast.Node] + nonExistentProperties collections.Set[NonExistentPropertyKey] + deferredDiagnosticCallbacks []func() + + mu sync.Mutex } func NewChecker(program Program, tracer *Tracer) (*Checker, *sync.Mutex) { program.BindSourceFiles() - c := &Checker{} + c := &Checker{memoStore: &memoStore{}} + c.root = c c.id = nextCheckerID.Add(1) c.tracer = tracer c.program = program c.compilerOptions = program.Options() c.files = program.SourceFiles() c.fileIndexMap = createFileIndexMap(c.files) - c.compareSymbols = c.compareSymbolsWorker // Closure optimization - c.compareSymbolChains = c.compareSymbolChainsWorker // Closure optimization c.languageVersion = c.compilerOptions.GetEmitScriptTarget() c.moduleKind = c.compilerOptions.GetEmitModuleKind() c.moduleResolutionKind = c.compilerOptions.GetModuleResolutionKind() @@ -985,7 +996,6 @@ func NewChecker(program Program, tracer *Tracer) (*Checker, *sync.Mutex) { c.canCollectSymbolAliasAccessibilityData = c.compilerOptions.VerbatimModuleSyntax.IsFalseOrUnknown() c.arrayVariances = []VarianceFlags{VarianceFlagsCovariant} c.globals = ast.NewSymbolTableWithCapacity(countGlobalSymbols(c.files)) - c.evaluate = evaluator.NewEvaluator(c.evaluateEntity, ast.OEKParentheses) c.stringLiteralTypes = make(map[string]*Type) c.numberLiteralTypes = make(map[jsnum.Number]*Type) c.bigintLiteralTypes = make(map[jsnum.PseudoBigInt]*Type) @@ -1019,8 +1029,7 @@ func NewChecker(program Program, tracer *Tracer) (*Checker, *sync.Mutex) { c.globalThisSymbol = c.newSymbolEx(ast.SymbolFlagsModule, "globalThis", ast.CheckFlagsReadonly) c.globalThisSymbol.SetExports(c.globals, &c.symbolExtraArena) c.globals.Set(c.globalThisSymbol.Name(), c.globalThisSymbol) - c.resolveName = c.createNameResolver().Resolve - c.resolveNameForSymbolSuggestion = c.createNameResolverForSuggestion().Resolve + c.initCheckerState() c.tupleTypes = make(map[CacheHashKey]*Type) c.unionTypes = make(map[CacheHashKey]*Type) c.objectLiteralTypes = make(map[CacheHashKey]*Type) @@ -1077,11 +1086,6 @@ func NewChecker(program Program, tracer *Tracer) (*Checker, *sync.Mutex) { c.numericStringType = c.getTemplateLiteralType([]string{"", ""}, []*Type{c.numberType}) // The `${number}` type c.templateConstraintType = c.getUnionType([]*Type{c.stringType, c.numberType, c.booleanType, c.bigintType, c.nullType, c.undefinedType}) c.uniqueLiteralType = c.newIntrinsicType(TypeFlagsNever, "never") // Special `never` flagged by union reduction to behave as a literal - c.uniqueLiteralMapper = newFunctionTypeMapper(c.getUniqueLiteralTypeForTypeParameter) - c.reportUnreliableMapper = newFunctionTypeMapper(c.reportUnreliableWorker) - c.reportUnmeasurableMapper = newFunctionTypeMapper(c.reportUnmeasurableWorker) - c.restrictiveMapper = newFunctionTypeMapper(c.restrictiveMapperWorker) - c.permissiveMapper = newFunctionTypeMapper(c.permissiveMapperWorker) c.emptyObjectType = c.newAnonymousType(nil /*symbol*/, nil, nil, nil, nil) c.emptyJsxObjectType = c.newAnonymousType(nil /*symbol*/, nil, nil, nil, nil) c.emptyFreshJsxObjectType = c.newAnonymousType(nil /*symbol*/, nil, nil, nil, nil) @@ -1124,6 +1128,23 @@ func NewChecker(program Program, tracer *Tracer) (*Checker, *sync.Mutex) { c.identityRelation = &Relation{} c.enumRelation = make(map[EnumRelationKey]RelationComparisonResult) c.moduleImportAttributesTypes = make(map[*ast.Symbol]*Type) + c.initializeChecker() + return c, &c.mu +} + +// initCheckerState initializes the per-checker state of c, including closures +// that must be bound to this checker rather than the store. +func (c *Checker) initCheckerState() { + c.compareSymbols = c.compareSymbolsWorker // Closure optimization + c.compareSymbolChains = c.compareSymbolChainsWorker // Closure optimization + c.evaluate = evaluator.NewEvaluator(c.evaluateEntity, ast.OEKParentheses) + c.resolveName = c.createNameResolver().Resolve + c.resolveNameForSymbolSuggestion = c.createNameResolverForSuggestion().Resolve + c.uniqueLiteralMapper = newFunctionTypeMapper(c.getUniqueLiteralTypeForTypeParameter) + c.reportUnreliableMapper = newFunctionTypeMapper(c.reportUnreliableWorker) + c.reportUnmeasurableMapper = newFunctionTypeMapper(c.reportUnmeasurableWorker) + c.restrictiveMapper = newFunctionTypeMapper(c.restrictiveMapperWorker) + c.permissiveMapper = newFunctionTypeMapper(c.permissiveMapperWorker) c.getGlobalESSymbolType = c.getGlobalTypeResolver("Symbol", 0 /*arity*/, false /*reportErrors*/) c.getGlobalBigIntType = c.getGlobalTypeResolver("BigInt", 0 /*arity*/, false /*reportErrors*/) c.getGlobalImportMetaType = c.getGlobalTypeResolver("ImportMeta", 0 /*arity*/, true /*reportErrors*/) @@ -1177,8 +1198,16 @@ func NewChecker(program Program, tracer *Tracer) (*Checker, *sync.Mutex) { c.getGlobalClassFieldDecoratorContextType = c.getGlobalTypeResolver("ClassFieldDecoratorContext", 2 /*arity*/, true /*reportErrors*/) c.initializeClosures() c.initializeIterationResolvers() - c.initializeChecker() - return c, &c.mu +} + +// Clone returns a new checker sharing c's store. The clone observes and +// contributes to the same memoized state, but has its own resolution stacks. +// Checkers sharing a store must not be used concurrently; acquire the store's +// lock (returned by NewChecker) before use. +func (c *Checker) Clone() *Checker { + clone := &Checker{memoStore: c.memoStore, tracer: c.tracer} + clone.initCheckerState() + return clone } func createFileIndexMap(files []*ast.SourceFile) map[*ast.SourceFile]int { @@ -8677,8 +8706,6 @@ func isContextuallyTypedByEnclosingCall(node *ast.Node) bool { return node != parent.Expression() case ast.KindParenthesizedExpression, ast.KindSpreadElement, ast.KindArrayLiteralExpression, ast.KindObjectLiteralExpression, ast.KindPropertyAssignment, ast.KindAwaitExpression: - node = parent - continue case ast.KindConditionalExpression: if node == parent.AsConditionalExpression().Condition { return false @@ -26226,7 +26253,7 @@ func (c *Checker) newType(flags TypeFlags, objectFlags ObjectFlags, t *Type, kin t.objectFlags = objectFlags &^ (ObjectFlagsCouldContainTypeVariablesComputed | ObjectFlagsCouldContainTypeVariables | ObjectFlagsMembersResolved) t.id = TypeId(c.TypeCount) t.kind = kind //nolint:customlint - t.checker = c + t.checker = c.root if c.tracer != nil { c.tracer.RecordType(t) } diff --git a/tsc/internal/checker/types_test.go b/tsc/internal/checker/types_test.go index d19d10419bcd8..5c9723b3a5e81 100644 --- a/tsc/internal/checker/types_test.go +++ b/tsc/internal/checker/types_test.go @@ -18,8 +18,8 @@ import ( func TestCheckerNodeLinkStores(t *testing.T) { t.Parallel() f := ast.NewNodeFactory(ast.NodeFactoryHooks{}) - first := &Checker{} - second := &Checker{} + first := newBareTestChecker() + second := newBareTestChecker() nodes := make([]*ast.Node, 4096) for i := range nodes { node := f.NewIdentifier(strconv.Itoa(i)) @@ -85,7 +85,7 @@ func TestTypeCasts(t *testing.T) { {typeKindIntersection, &IntersectionType{}, func(t *Type) any { return t.AsIntersectionType() }}, } for _, test := range tests { - c := &Checker{} + c := newBareTestChecker() typ := c.newType(TypeFlagsAny, ObjectFlagsNone, test.data.AsType(), test.kind) runtime.GC() assert.Equal(t, test.cast(typ), any(test.data)) @@ -175,14 +175,20 @@ func BenchmarkTypeListKey(b *testing.B) { } } +// newBareTestChecker returns an uninitialized checker with an empty store. +func newBareTestChecker() *Checker { + c := &Checker{memoStore: &memoStore{}} + c.root = c + return c +} + func newCompositeTestChecker() (*Checker, []*Type) { - c := &Checker{ - strictNullChecks: true, - unionTypes: make(map[CacheHashKey]*Type), - unionOfUnionTypes: make(map[UnionOfUnionKey]*Type), - intersectionTypes: make(map[CacheHashKey]*Type), - subtypeReductionCache: make(map[CacheHashKey][]*Type), - } + c := newBareTestChecker() + c.strictNullChecks = true + c.unionTypes = make(map[CacheHashKey]*Type) + c.unionOfUnionTypes = make(map[UnionOfUnionKey]*Type) + c.intersectionTypes = make(map[CacheHashKey]*Type) + c.subtypeReductionCache = make(map[CacheHashKey][]*Type) c.compareSymbols = c.compareSymbolsWorker c.neverType = c.newIntrinsicType(TypeFlagsNever, "never") c.unknownType = c.newIntrinsicType(TypeFlagsUnknown, "unknown") @@ -306,7 +312,7 @@ func TestIntersectionReductionAllocations(t *testing.T) { //nolint:paralleltest func TestTemporaryPropertyCounts(t *testing.T) { t.Parallel() - c := &Checker{} + c := newBareTestChecker() names := func(p *temporaryPropertyCounts) []string { var result []string for _, e := range p.entries { @@ -348,7 +354,7 @@ func TestTemporaryPropertyCounts(t *testing.T) { assert.Equal(t, counts.Size(), 0) } assert.Assert(t, c.getTemporaryPropertyCounts() != reused) - other := &Checker{} + other := newBareTestChecker() assert.Assert(t, other.getTemporaryPropertyCounts() != outer) } From a4ee54b1b72026a487b1936aa68382d77ba94a2b Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 25 Oct 2026 21:42:43 -0700 Subject: [PATCH 059/194] Memoize checker results and replay their side effects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Diagnostics, reference marks and deferred checks are produced while computing cached results. If an API query, declaration emit, import elision or another file computed a result first, those effects were either reported for code checking never visits, or lost when checking later reused the cached result. Either way, a file's diagnostics depended on what had been asked before it was checked. Checking now applies side effects as it computes. Queries apply none, but record them against the memoized computation in progress, and checking replays them wherever it reuses that result. Import elision runs as such a query and applies only the reference marks emit reads, so emitting a file first no longer changes its diagnostics. External emit helpers are checked in checking order for the same reason. Every cached result that a computation can produce is held in a memo, which is the only way to read or write it. Fields of links and entities are memo cells; caches keyed by value, such as type ids or hash keys, are memo maps with per-entry state allocated only once a query touches an entry. Reading a memo accounts for the effects of the computation that produced it, and a result written as a byproduct of another computation depends on that computation. Readers that bypassed a wrapper keyed like its cache, such as the relater, the mapper, inference, flow analysis and the emit resolver, could silently make diagnostics depend on query history; with memos there is no other way in. A test forbids touching memo values directly, and copying one is a vet error. Types constructed purely from their key, such as literal, union, tuple target and substitution types, never consult cached results, so they are interned with no effects to account for. Each memoized computation pushes one resolution on a single stack, which records its effects and the node it started at, and type resolutions live on the same stack, so entering, finishing and detecting re-entry of any computation happen in one place. A result computed while re-entering a computation still in progress observed its incomplete state, so it replays its effects only when the outer one does; otherwise check order decided whether circularity errors such as TS2456 on `type T0 = T0` were reported. Errors located at the node being checked are resolved when the effects are replayed, at the first reporting use of the result, rather than at whichever request computed it first. Deferred diagnostics, relation keys, recursion identities and inference depths now go through the checker running the computation rather than the store's root checker. A query retains the effects of each computation for replay. Computing a result again, as language service queries do constantly, must not retain them again, so effects of a computation that caches nothing go only to its caller, and a computation that observed nothing new is not retained twice. Querying every identifier in src/compiler repeatedly now converges after the first pass. Deeply recursive queries such as hasBaseType revisit the same results an exponential number of times, so the bookkeeping avoids duplicate dependencies, keys memo states by packed integers, observes resolved base types without entering their computation, and keeps memo reads, a flag check and a load, inlined on hot paths. Getting the type of a CommonJS module or exports symbol pushed a type resolution it never popped, so later checks found a cycle through it, or missed one, depending on what had been resolved before. Leaving a current node now asserts that nothing pushed since is left. An incremental build now reports the missing-global error from generator signatures even when declaration signature generation reached it first, so incremental and clean builds agree. The cached "calculated" flag for equivalent base types is no longer needed and is removed from the checker and the API enums. │ before.txt │ after.txt │ │ sec/op │ sec/op vs base │ Compiler 2.110 ± 1% 2.410 ± 1% +14.22% (p=0.000 n=10) │ before.txt │ after.txt │ │ peak-RSS-bytes │ peak-RSS-bytes vs base │ Compiler 354.8Mi ± 4% 358.7Mi ± 5% ~ (p=0.089 n=10) --- packages/typescript/enums/objectFlags.d.ts | 1 - packages/typescript/enums/objectFlags.js | 2 +- tsc/internal/api/enum_values_generated.go | 1 - tsc/internal/checker/checker.go | 1719 +++++++++++------ tsc/internal/checker/checker_test.go | 25 + tsc/internal/checker/emitresolver.go | 8 +- tsc/internal/checker/flow.go | 52 +- tsc/internal/checker/inference.go | 44 +- tsc/internal/checker/jsx.go | 57 +- tsc/internal/checker/memo.go | 718 +++++++ tsc/internal/checker/nodebuilderimpl.go | 8 +- tsc/internal/checker/relater.go | 119 +- tsc/internal/checker/resolutions.go | 101 + tsc/internal/checker/services.go | 15 +- tsc/internal/checker/symbolaccessibility.go | 24 +- tsc/internal/checker/tracer.go | 5 +- tsc/internal/checker/types.go | 54 +- tsc/internal/checker/types_test.go | 35 +- tsc/internal/checker/utilities.go | 8 +- tsc/internal/execute/tsctests/tsc_test.go | 6 +- ...entifier(checkorder=typesfirst).errors.txt | 5 +- ...BeforeCheck(checkorder=default).errors.txt | 6 +- ...onErrors(checkorder=typesfirst).errors.txt | 7 +- ...leSpread(checkorder=typesfirst).errors.txt | 51 + ...LargeTupleSpread(checkorder=typesfirst).js | 61 + ...TupleSpread(checkorder=typesfirst).symbols | 184 ++ ...geTupleSpread(checkorder=typesfirst).types | 190 ++ ...ctRecursiveMappedTypeConstraint.errors.txt | 2 - ...andoIndexedAssignmentDiagnostic.errors.txt | 4 - ...aComment(checkorder=typesfirst).errors.txt | 6 +- ...dsRecord(checkorder=typesfirst).errors.txt | 12 - ...ExtendsRecord(checkorder=typesfirst).types | 2 +- ...tiations(checkorder=typesfirst).errors.txt | 7 +- ...veLength(checkorder=typesfirst).errors.txt | 13 +- ...nstraint(checkorder=typesfirst).errors.txt | 1 - ...aration1(checkorder=typesfirst).errors.txt | 5 +- ...ortTag13(checkorder=typesfirst).errors.txt | 5 +- ...hadowing(checkorder=typesfirst).errors.txt | 2 +- .../recursiveMappedTypes.errors.txt | 6 +- ...e-with-multiple-files-and-complex-types.js | 10 +- ...stics-produced-during-semantic-checking.js | 70 +- ...ive-mapped-type-after-comment-only-edit.js | 118 +- ...nly-mapped-type-after-comment-only-edit.js | 118 +- 43 files changed, 2775 insertions(+), 1112 deletions(-) create mode 100644 tsc/internal/checker/memo.go create mode 100644 tsc/internal/checker/resolutions.go create mode 100644 tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread(checkorder=typesfirst).js create mode 100644 tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread(checkorder=typesfirst).types delete mode 100644 tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord(checkorder=typesfirst).errors.txt diff --git a/packages/typescript/enums/objectFlags.d.ts b/packages/typescript/enums/objectFlags.d.ts index fd17f37c6fc0b..1b0a911b1a531 100644 --- a/packages/typescript/enums/objectFlags.d.ts +++ b/packages/typescript/enums/objectFlags.d.ts @@ -34,7 +34,6 @@ export declare enum ObjectFlags { ContainsSpread = 1 << 22, ObjectRestType = 1 << 23, IsClassInstanceClone = 1 << 26, - IdenticalBaseTypeCalculated = 1 << 27, IdenticalBaseTypeExists = 1 << 28, FromTypeNode = 1 << 29, IsGenericTypeComputed = 1 << 22, diff --git a/packages/typescript/enums/objectFlags.js b/packages/typescript/enums/objectFlags.js index 013bee411f001..e21c9c650e291 100644 --- a/packages/typescript/enums/objectFlags.js +++ b/packages/typescript/enums/objectFlags.js @@ -24,6 +24,7 @@ export var ObjectFlags; ObjectFlags[ObjectFlags["CouldContainTypeVariablesComputed"] = 524288] = "CouldContainTypeVariablesComputed"; ObjectFlags[ObjectFlags["CouldContainTypeVariables"] = 1048576] = "CouldContainTypeVariables"; ObjectFlags[ObjectFlags["MembersResolved"] = 2097152] = "MembersResolved"; + ObjectFlags[ObjectFlags["MembersResolving"] = 1073741824] = "MembersResolving"; ObjectFlags[ObjectFlags["ClassOrInterface"] = 3] = "ClassOrInterface"; ObjectFlags[ObjectFlags["RequiresWidening"] = 196608] = "RequiresWidening"; ObjectFlags[ObjectFlags["PropagatingFlags"] = 458752] = "PropagatingFlags"; @@ -34,7 +35,6 @@ export var ObjectFlags; ObjectFlags[ObjectFlags["ContainsSpread"] = 4194304] = "ContainsSpread"; ObjectFlags[ObjectFlags["ObjectRestType"] = 8388608] = "ObjectRestType"; ObjectFlags[ObjectFlags["IsClassInstanceClone"] = 67108864] = "IsClassInstanceClone"; - ObjectFlags[ObjectFlags["IdenticalBaseTypeCalculated"] = 134217728] = "IdenticalBaseTypeCalculated"; ObjectFlags[ObjectFlags["IdenticalBaseTypeExists"] = 268435456] = "IdenticalBaseTypeExists"; ObjectFlags[ObjectFlags["FromTypeNode"] = 536870912] = "FromTypeNode"; ObjectFlags[ObjectFlags["IsGenericTypeComputed"] = 4194304] = "IsGenericTypeComputed"; diff --git a/tsc/internal/api/enum_values_generated.go b/tsc/internal/api/enum_values_generated.go index 1697a479539a5..b223dab0403fb 100644 --- a/tsc/internal/api/enum_values_generated.go +++ b/tsc/internal/api/enum_values_generated.go @@ -242,7 +242,6 @@ func main() { "ContainsSpread": toInt32(checker.ObjectFlagsContainsSpread), "ObjectRestType": toInt32(checker.ObjectFlagsObjectRestType), "IsClassInstanceClone": toInt32(checker.ObjectFlagsIsClassInstanceClone), - "IdenticalBaseTypeCalculated": toInt32(checker.ObjectFlagsIdenticalBaseTypeCalculated), "IdenticalBaseTypeExists": toInt32(checker.ObjectFlagsIdenticalBaseTypeExists), "FromTypeNode": toInt32(checker.ObjectFlagsFromTypeNode), "IsGenericTypeComputed": toInt32(checker.ObjectFlagsIsGenericTypeComputed), diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 791cfbc23178f..33a4db15734a5 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -258,6 +258,10 @@ type FlowLoopKey struct { refKey CacheHashKey } +type flowLoopCacheEntry struct { + t *Type +} + type FlowLoopInfo struct { key FlowLoopKey types []*Type @@ -602,6 +606,7 @@ type Checker struct { *memoStore compareSymbols func(*ast.Symbol, *ast.Symbol) int compareSymbolChains func([]*ast.Symbol, []*ast.Symbol) int + resolutions []resolution instantiationCount uint32 instantiationStack []*Type conditionalConstraintDepth uint32 @@ -648,8 +653,9 @@ type Checker struct { restrictiveMapper *TypeMapper permissiveMapper *TypeMapper contextualBindingPatterns []*ast.Node - typeResolutions []TypeResolution - resolutionStart int + resolving map[memoKey]int32 // Index in resolutions of the outermost computation of each key in progress + typeResolutionTop int // 1-based index in resolutions of the innermost resolution, or 0 + resolutionStart int // Index in resolutions below which resolutions are not searched for cycles varianceStack []VarianceStackEntry callResolutionStack []*ast.Node apparentArgumentCount *int @@ -743,6 +749,8 @@ type Checker struct { withinUnreachableCode bool typeToStringNodebuilder *NodeBuilder tracer *Tracer // Optional tracer for trace events and type recording (for --generateTrace) + checking bool // Whether side effects such as diagnostics are applied; see memo.go + memoTop int // 1 + index in resolutions of the innermost computation recording effects, or 0; see memo.go } // memoStore holds the memoized state of a checker: interned types, links, @@ -777,30 +785,29 @@ type memoStore struct { canCollectSymbolAliasAccessibilityData bool arrayVariances []VarianceFlags globals ast.SymbolTable - stringLiteralTypes map[string]*Type - numberLiteralTypes map[jsnum.Number]*Type + stringLiteralTypes memoMap[string, *Type] + numberLiteralTypes memoMap[jsnum.Number, *Type] nanType *Type - bigintLiteralTypes map[jsnum.PseudoBigInt]*Type - enumLiteralTypes map[EnumLiteralKey]*Type - enumNaNLiteralTypes map[*ast.Symbol]*Type - indexedAccessTypes map[CacheHashKey]*Type - templateLiteralTypes map[CacheHashKey]*Type - stringMappingTypes map[StringMappingKey]*Type - uniqueESSymbolTypes map[*ast.Symbol]*Type - thisExpandoKinds map[*ast.Symbol]thisAssignmentDeclarationKind - thisExpandoLocations map[*ast.Symbol]*ast.Node - subtypeReductionCache map[CacheHashKey][]*Type - cachedTypes map[CachedTypeKey]*Type - cachedSignatures map[CachedSignatureKey]*Signature - undefinedProperties map[*ast.Symbol]*ast.Symbol - narrowedTypes map[NarrowedTypeKey]*Type - assignmentReducedTypes map[AssignmentReducedKey]*Type - discriminatedContextualTypes map[DiscriminatedContextualTypeKey]*Type - instantiationExpressionTypes map[InstantiationExpressionKey]*Type - substitutionTypes map[SubstitutionTypeKey]*Type - reverseMappedCache map[ReverseMappedTypeKey]*Type - reverseHomomorphicMappedCache map[ReverseMappedTypeKey]*Type - iterationTypesCache map[IterationTypesKey]IterationTypes + bigintLiteralTypes memoMap[jsnum.PseudoBigInt, *Type] + enumLiteralTypes memoMap[EnumLiteralKey, *Type] + enumNaNLiteralTypes memoMap[*ast.Symbol, *Type] + indexedAccessTypes memoMap[CacheHashKey, *Type] + templateLiteralTypes memoMap[CacheHashKey, *Type] + stringMappingTypes memoMap[StringMappingKey, *Type] + uniqueESSymbolTypes memoMap[*ast.Symbol, *Type] + thisExpandos memoMap[*ast.Symbol, thisExpando] + subtypeReductionCache memoMap[CacheHashKey, []*Type] + cachedTypes memoMap[CachedTypeKey, *Type] + cachedSignatures memoMap[CachedSignatureKey, *Signature] + undefinedProperties memoMap[*ast.Symbol, *ast.Symbol] + narrowedTypes memoMap[NarrowedTypeKey, *Type] + assignmentReducedTypes memoMap[AssignmentReducedKey, *Type] + discriminatedContextualTypes memoMap[DiscriminatedContextualTypeKey, *Type] + instantiationExpressionTypes memoMap[InstantiationExpressionKey, *instantiationExpressionEntry] + substitutionTypes memoMap[SubstitutionTypeKey, *Type] + reverseMappedCache memoMap[ReverseMappedTypeKey, *Type] + reverseHomomorphicMappedCache memoMap[ReverseMappedTypeKey, *Type] + iterationTypesCache memoMap[IterationTypesKey, IterationTypes] memberLayoutCache map[CacheHashKey]*MemberLayout markerTypes collections.Set[*Type] resolvingExplicitTypeOfSymbol collections.Set[*ast.Symbol] @@ -810,25 +817,24 @@ type memoStore struct { argumentsSymbol *ast.Symbol requireSymbol *ast.Symbol unknownSymbol *ast.Symbol - unresolvedSymbols map[string]*ast.Symbol - errorTypes map[CacheHashKey]*Type - moduleSymbols map[*ast.Node]*ast.Symbol + unresolvedSymbols memoMap[string, *ast.Symbol] + errorTypes memoMap[CacheHashKey, *Type] globalThisSymbol *ast.Symbol - symbolTableAliasCache map[symbolTableID][]*ast.Symbol - classExpressionNameTables map[ast.NodeId]ast.SymbolTable - tupleTypes map[CacheHashKey]*Type - unionTypes map[CacheHashKey]*Type - objectLiteralTypes map[CacheHashKey]*Type - spreadTypes map[CacheHashKey]*Type - objectContentTypes map[CacheHashKey]*Type - spreadSymbols map[spreadSymbolKey]*ast.Symbol - symbolsWithType map[symbolWithTypeKey]*ast.Symbol - paddedProperties map[symbolWithTypeKey]*ast.Symbol - bindingPatternTypes map[CacheHashKey]*Type - unionOfUnionTypes map[UnionOfUnionKey]*Type - intersectionTypes map[CacheHashKey]*Type - intersectionContentTypes map[CacheHashKey]*Type - propertiesTypes map[PropertiesTypesKey]*Type + symbolTableAliasCache memoMap[symbolTableID, []*ast.Symbol] + classExpressionNameTables memoMap[ast.NodeId, ast.SymbolTable] + tupleTypes memoMap[CacheHashKey, *Type] + unionTypes memoMap[CacheHashKey, *Type] + unionOfUnionTypes memoMap[UnionOfUnionKey, *Type] + intersectionTypes memoMap[CacheHashKey, *Type] + objectLiteralTypes memoMap[CacheHashKey, *Type] + spreadTypes memoMap[CacheHashKey, *Type] + objectContentTypes memoMap[CacheHashKey, *Type] + spreadSymbols memoMap[spreadSymbolKey, *ast.Symbol] + symbolsWithType memoMap[symbolWithTypeKey, *ast.Symbol] + paddedProperties memoMap[symbolWithTypeKey, *ast.Symbol] + bindingPatternTypes memoMap[CacheHashKey, *Type] + intersectionContentTypes memoMap[CacheHashKey, *Type] + propertiesTypes memoMap[PropertiesTypesKey, *Type] diagnostics ast.DiagnosticsCollection suggestionDiagnostics ast.DiagnosticsCollection mergedSymbols symbolLinkStore[*ast.Symbol] @@ -860,8 +866,8 @@ type memoStore struct { symbolContainerLinks core.LinkStore[*ast.Symbol, ContainingSymbolLinks] externalModuleContainers *externalModuleContainerIndex sourceFileLinks core.LinkStore[*ast.SourceFile, SourceFileLinks] - patternForType map[*Type]*ast.Node - contextFreeTypes map[*ast.Node]*Type + patternForType memoMap[*Type, *ast.Node] + contextFreeTypes memoMap[*ast.Node, *Type] anyType *Type autoType *Type wildcardType *Type @@ -920,13 +926,13 @@ type memoStore struct { unknownSignature *Signature resolvingSignature *Signature silentNeverSignature *Signature - cachedArgumentsReferenced map[*ast.Node]bool + cachedArgumentsReferenced memoMap[*ast.Node, bool] enumNumberIndexInfo *IndexInfo anyBaseTypeIndexInfo *IndexInfo patternAmbientModules []*ast.PatternAmbientModule patternAmbientModuleAugmentations ast.SymbolTable patternAmbientModuleAugmentationTargets ast.SymbolTable - moduleImportAttributesTypes map[*ast.Symbol]*Type + moduleImportAttributesTypes memoMap[*ast.Symbol, *Type] globalObjectType *Type globalFunctionType *Type globalCallableFunctionType *Type @@ -946,15 +952,15 @@ type memoStore struct { zeroType *Type zeroBigIntType *Type typeofType *Type - flowLoopCache map[FlowLoopKey]*Type - flowNodeReachable map[*ast.FlowNode]bool - flowNodePostSuper map[*ast.FlowNode]bool + flowLoopCache memoMap[FlowLoopKey, *flowLoopCacheEntry] + flowNodeReachable memoMap[*ast.FlowNode, bool] + flowNodePostSuper memoMap[*ast.FlowNode, bool] subtypeRelation *Relation strictSubtypeRelation *Relation assignableRelation *Relation comparableRelation *Relation identityRelation *Relation - enumRelation map[EnumRelationKey]RelationComparisonResult + enumRelation memoMap[EnumRelationKey, RelationComparisonResult] emitResolverLinks EmitResolverLinks _jsxNamespace string _jsxFactoryEntity *ast.Node @@ -963,7 +969,9 @@ type memoStore struct { ambientModules []*ast.Symbol reportedUnreachableNodes collections.Set[*ast.Node] nonExistentProperties collections.Set[NonExistentPropertyKey] - deferredDiagnosticCallbacks []func() + deferredDiagnosticCallbacks []func(c *Checker) + memoStates map[memoKey]*memoState // Memo state of results computed by queries; see memo.go + memoPendingCount int // Number of memoStates with unreplayed effects mu sync.Mutex } @@ -971,7 +979,8 @@ type memoStore struct { func NewChecker(program Program, tracer *Tracer) (*Checker, *sync.Mutex) { program.BindSourceFiles() - c := &Checker{memoStore: &memoStore{}} + c := &Checker{memoStore: &memoStore{}, checking: true} + c.initResolutions() c.root = c c.id = nextCheckerID.Add(1) c.tracer = tracer @@ -996,55 +1005,14 @@ func NewChecker(program Program, tracer *Tracer) (*Checker, *sync.Mutex) { c.canCollectSymbolAliasAccessibilityData = c.compilerOptions.VerbatimModuleSyntax.IsFalseOrUnknown() c.arrayVariances = []VarianceFlags{VarianceFlagsCovariant} c.globals = ast.NewSymbolTableWithCapacity(countGlobalSymbols(c.files)) - c.stringLiteralTypes = make(map[string]*Type) - c.numberLiteralTypes = make(map[jsnum.Number]*Type) - c.bigintLiteralTypes = make(map[jsnum.PseudoBigInt]*Type) - c.enumLiteralTypes = make(map[EnumLiteralKey]*Type) - c.enumNaNLiteralTypes = make(map[*ast.Symbol]*Type) - c.indexedAccessTypes = make(map[CacheHashKey]*Type) - c.templateLiteralTypes = make(map[CacheHashKey]*Type) - c.stringMappingTypes = make(map[StringMappingKey]*Type) - c.uniqueESSymbolTypes = make(map[*ast.Symbol]*Type) - c.thisExpandoKinds = make(map[*ast.Symbol]thisAssignmentDeclarationKind) - c.thisExpandoLocations = make(map[*ast.Symbol]*ast.Node) - c.subtypeReductionCache = make(map[CacheHashKey][]*Type) - c.cachedTypes = make(map[CachedTypeKey]*Type) - c.cachedSignatures = make(map[CachedSignatureKey]*Signature) - c.undefinedProperties = make(map[*ast.Symbol]*ast.Symbol) - c.narrowedTypes = make(map[NarrowedTypeKey]*Type) - c.assignmentReducedTypes = make(map[AssignmentReducedKey]*Type) - c.discriminatedContextualTypes = make(map[DiscriminatedContextualTypeKey]*Type) - c.instantiationExpressionTypes = make(map[InstantiationExpressionKey]*Type) - c.substitutionTypes = make(map[SubstitutionTypeKey]*Type) - c.reverseMappedCache = make(map[ReverseMappedTypeKey]*Type) - c.reverseHomomorphicMappedCache = make(map[ReverseMappedTypeKey]*Type) - c.iterationTypesCache = make(map[IterationTypesKey]IterationTypes) c.undefinedSymbol = c.newSymbol(ast.SymbolFlagsProperty, "undefined") c.argumentsSymbol = c.newSymbol(ast.SymbolFlagsProperty, "arguments") c.requireSymbol = c.newSymbol(ast.SymbolFlagsProperty, "require") c.unknownSymbol = c.newSymbol(ast.SymbolFlagsProperty, "unknown") - c.unresolvedSymbols = make(map[string]*ast.Symbol) - c.errorTypes = make(map[CacheHashKey]*Type) - c.moduleSymbols = make(map[*ast.Node]*ast.Symbol) c.globalThisSymbol = c.newSymbolEx(ast.SymbolFlagsModule, "globalThis", ast.CheckFlagsReadonly) c.globalThisSymbol.SetExports(c.globals, &c.symbolExtraArena) c.globals.Set(c.globalThisSymbol.Name(), c.globalThisSymbol) c.initCheckerState() - c.tupleTypes = make(map[CacheHashKey]*Type) - c.unionTypes = make(map[CacheHashKey]*Type) - c.objectLiteralTypes = make(map[CacheHashKey]*Type) - c.spreadTypes = make(map[CacheHashKey]*Type) - c.objectContentTypes = make(map[CacheHashKey]*Type) - c.spreadSymbols = make(map[spreadSymbolKey]*ast.Symbol) - c.symbolsWithType = make(map[symbolWithTypeKey]*ast.Symbol) - c.paddedProperties = make(map[symbolWithTypeKey]*ast.Symbol) - c.bindingPatternTypes = make(map[CacheHashKey]*Type) - c.unionOfUnionTypes = make(map[UnionOfUnionKey]*Type) - c.intersectionTypes = make(map[CacheHashKey]*Type) - c.intersectionContentTypes = make(map[CacheHashKey]*Type) - c.propertiesTypes = make(map[PropertiesTypesKey]*Type) - c.patternForType = make(map[*Type]*ast.Node) - c.contextFreeTypes = make(map[*ast.Node]*Type) c.anyType = c.newIntrinsicType(TypeFlagsAny, "any") c.autoType = c.newIntrinsicTypeEx(TypeFlagsAny, "any", ObjectFlagsNonInferrableType) c.wildcardType = c.newIntrinsicType(TypeFlagsAny, "any") @@ -1101,34 +1069,29 @@ func NewChecker(program Program, tracer *Tracer) (*Checker, *sync.Mutex) { c.resolvingDefaultType = c.newAnonymousType(nil /*symbol*/, nil, nil, nil, nil) c.markerSuperType = c.newTypeParameter(nil) c.markerSubType = c.newTypeParameter(nil) - c.markerSubType.AsTypeParameter().constraint = c.markerSuperType + c.markerSubType.AsTypeParameter().constraint.intern(c.markerSuperType) c.markerOtherType = c.newTypeParameter(nil) c.markerSuperTypeForCheck = c.newTypeParameter(nil) c.markerSubTypeForCheck = c.newTypeParameter(nil) - c.markerSubTypeForCheck.AsTypeParameter().constraint = c.markerSuperTypeForCheck + c.markerSubTypeForCheck.AsTypeParameter().constraint.intern(c.markerSuperTypeForCheck) c.noTypePredicate = &TypePredicate{kind: TypePredicateKindIdentifier, parameterIndex: 0, parameterName: "<>", t: c.anyType} c.anySignature = c.newSignature(SignatureFlagsNone, nil, nil, nil, nil, c.anyType, nil, 0) c.unknownSignature = c.newSignature(SignatureFlagsNone, nil, nil, nil, nil, c.errorType, nil, 0) c.resolvingSignature = c.newSignature(SignatureFlagsNone, nil, nil, nil, nil, c.anyType, nil, 0) c.silentNeverSignature = c.newSignature(SignatureFlagsNone, nil, nil, nil, nil, c.silentNeverType, nil, 0) - c.cachedArgumentsReferenced = make(map[*ast.Node]bool) c.enumNumberIndexInfo = &IndexInfo{keyType: c.numberType, valueType: c.stringType, isReadonly: true} c.anyBaseTypeIndexInfo = &IndexInfo{keyType: c.stringType, valueType: c.anyType, isReadonly: false} c.emptyStringType = c.getStringLiteralType("") c.zeroType = c.getNumberLiteralType(0) c.zeroBigIntType = c.getBigIntLiteralType(jsnum.PseudoBigInt{}) c.typeofType = c.getUnionType(core.Map(slices.Sorted(maps.Keys(typeofNEFacts)), c.getStringLiteralType)) - c.flowLoopCache = make(map[FlowLoopKey]*Type) - c.flowNodeReachable = make(map[*ast.FlowNode]bool) - c.flowNodePostSuper = make(map[*ast.FlowNode]bool) c.subtypeRelation = &Relation{} c.strictSubtypeRelation = &Relation{} c.assignableRelation = &Relation{} c.comparableRelation = &Relation{} c.identityRelation = &Relation{} - c.enumRelation = make(map[EnumRelationKey]RelationComparisonResult) - c.moduleImportAttributesTypes = make(map[*ast.Symbol]*Type) c.initializeChecker() + c.checking = false return c, &c.mu } @@ -1206,6 +1169,7 @@ func (c *Checker) initCheckerState() { // lock (returned by NewChecker) before use. func (c *Checker) Clone() *Checker { clone := &Checker{memoStore: c.memoStore, tracer: c.tracer} + clone.initResolutions() clone.initCheckerState() return clone } @@ -1244,33 +1208,33 @@ func (c *Checker) reportUnmeasurableWorker(t *Type) *Type { // Resolve to the global class or interface by the given name and arity, or emptyObjectType/emptyGenericType otherwise func (c *Checker) getGlobalTypeResolver(name string, arity int, reportErrors bool) func() *Type { - return core.Memoize(func() *Type { + return memoizeGlobal(c, func() *Type { return c.getGlobalType(name, arity, reportErrors) }) } // Resolve to the global type alias symbol by the given name and arity, or nil otherwise func (c *Checker) getGlobalTypeAliasResolver(name string, arity int, reportErrors bool) func() *ast.Symbol { - return core.Memoize(func() *ast.Symbol { + return memoizeGlobal(c, func() *ast.Symbol { return c.getGlobalTypeAliasSymbol(name, arity, reportErrors) }) } // Resolve to the global value symbol by the given name, or nil otherwise func (c *Checker) getGlobalValueSymbolResolver(name string, reportErrors bool) func() *ast.Symbol { - return core.Memoize(func() *ast.Symbol { + return memoizeGlobal(c, func() *ast.Symbol { return c.getGlobalSymbol(name, ast.SymbolFlagsValue, core.IfElse(reportErrors, diagnostics.Cannot_find_global_value_0, nil)) }) } func (c *Checker) getGlobalTypeSymbolResolver(name string, reportErrors bool) func() *ast.Symbol { - return core.Memoize(func() *ast.Symbol { + return memoizeGlobal(c, func() *ast.Symbol { return c.getGlobalSymbol(name, ast.SymbolFlagsType, core.IfElse(reportErrors, diagnostics.Cannot_find_global_type_0, nil)) }) } func (c *Checker) getGlobalTypesResolver(names []string, arity int, reportErrors bool) func() []*Type { - return core.Memoize(func() []*Type { + return memoizeGlobal(c, func() []*Type { return core.Map(names, func(name string) *Type { return c.getGlobalType(name, arity, reportErrors) }) @@ -1443,10 +1407,10 @@ func (c *Checker) initializeChecker() { } } c.addUndefinedToGlobalsOrErrorOnRedeclaration() - c.valueSymbolLinks.Get(c.undefinedSymbol).resolvedType = c.undefinedWideningType - c.valueSymbolLinks.Get(c.argumentsSymbol).resolvedType = c.getGlobalType("IArguments", 0 /*arity*/, true /*reportErrors*/) - c.valueSymbolLinks.Get(c.unknownSymbol).resolvedType = c.errorType - c.valueSymbolLinks.Get(c.globalThisSymbol).resolvedType = c.newObjectType(ObjectFlagsAnonymous, c.globalThisSymbol) + c.valueSymbolLinks.Get(c.undefinedSymbol).resolvedType.set(c, c.undefinedWideningType) + c.valueSymbolLinks.Get(c.argumentsSymbol).resolvedType.set(c, c.getGlobalType("IArguments", 0 /*arity*/, true /*reportErrors*/)) + c.valueSymbolLinks.Get(c.unknownSymbol).resolvedType.set(c, c.errorType) + c.valueSymbolLinks.Get(c.globalThisSymbol).resolvedType.set(c, c.newObjectType(ObjectFlagsAnonymous, c.globalThisSymbol)) // Initialize special types c.globalArrayType = c.getGlobalType("Array", 1 /*arity*/, true /*reportErrors*/) c.globalObjectType = c.getGlobalType("Object", 0 /*arity*/, true /*reportErrors*/) @@ -1629,6 +1593,10 @@ func (c *Checker) createNameResolverForSuggestion() *binder.NameResolver { } func (c *Checker) symbolReferenced(symbol *ast.Symbol, meaning ast.SymbolFlags) { + if !c.checking { + c.recordEffect(func(c *Checker) { c.symbolReferenced(symbol, meaning) }) + return + } c.symbolReferenceLinks.Get(symbol).referenceKinds |= meaning } @@ -1699,7 +1667,7 @@ func (c *Checker) onFailedToResolveSymbol(errorLocation *ast.Node, name string, // resolution that failed would make the explanation, and any circularity // errors it causes, depend on what else happened to be in progress. Defer // it until no resolution is in progress, so it only observes results. - c.addDeferredDiagnostic(func() { + c.addDeferredDiagnostic(func(c *Checker) { c.reportFailedToResolveSymbol(errorLocation, name, meaning, nameNotFoundMessage) }) } @@ -2351,6 +2319,10 @@ func (c *Checker) getSymbol(symbols ast.SymbolTable, name string, meaning ast.Sy } func (c *Checker) checkSourceFile(ctx context.Context, sourceFile *ast.SourceFile, checkUnused bool) { + c.withChecking(func() { c.checkSourceFileWorker(ctx, sourceFile, checkUnused) }) +} + +func (c *Checker) checkSourceFileWorker(ctx context.Context, sourceFile *ast.SourceFile, checkUnused bool) { c.ctx = ctx links := c.sourceFileLinks.Get(sourceFile) if !links.typeChecked { @@ -2401,7 +2373,9 @@ func (c *Checker) checkSourceElement(node *ast.Node) bool { saveWithinUnreachableCode := c.withinUnreachableCode c.currentNode = node c.instantiationCount = 0 + c.beginResolution(0, nil, 0) c.checkSourceElementWorker(node) + c.endResolution() c.currentNode = saveCurrentNode c.withinUnreachableCode = saveWithinUnreachableCode } @@ -2639,6 +2613,10 @@ func (c *Checker) isSourceElementUnreachable(node *ast.Node) bool { // determining the type of foo would cause foo to be given type any because of the recursive reference. // Delaying the type check of the body ensures foo has been assigned a type. func (c *Checker) checkNodeDeferred(node *ast.Node) { + if !c.checking { + c.recordEffect(func(c *Checker) { c.checkNodeDeferred(node) }) + return + } enclosingFile := ast.GetSourceFileOfNode(node) links := c.sourceFileLinks.Get(enclosingFile) if !links.typeChecked { @@ -2664,6 +2642,7 @@ func (c *Checker) checkDeferredNode(node *ast.Node) { saveCurrentNode := c.currentNode c.currentNode = node c.instantiationCount = 0 + c.beginResolution(0, nil, 0) switch node.Kind { case ast.KindCallExpression, ast.KindNewExpression, ast.KindTaggedTemplateExpression, ast.KindDecorator, ast.KindJsxOpeningElement: // These node kinds are deferred checked when overload resolution fails. To save on work, @@ -2692,6 +2671,7 @@ func (c *Checker) checkDeferredNode(node *ast.Node) { case ast.KindObjectLiteralExpression, ast.KindJsxAttributes: c.checkContextualDeprecations(node) } + c.endResolution() c.currentNode = saveCurrentNode } @@ -3291,12 +3271,12 @@ func (c *Checker) checkIfTypePredicateVariableIsDeclaredInBindingPattern(pattern } func (c *Checker) checkTypeQuery(node *ast.Node) { - c.getTypeFromTypeQueryNode(node) + memoTypeNode(c, node, (*Checker).getTypeFromTypeQueryNode) } func (c *Checker) checkTypeLiteral(node *ast.Node) { c.checkSourceElements(node.Members()) - t := c.getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node) + t := memoTypeNode(c, node, (*Checker).getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode) c.checkIndexConstraints(t, t.symbol, false /*isStaticIndex*/) c.checkTypeForDuplicateIndexSignatures(node) c.checkObjectTypeForDuplicateDeclarations(node, false /*checkPrivateNames*/) @@ -3436,7 +3416,7 @@ func (c *Checker) checkUnionOrIntersectionType(node *ast.Node) { } func (c *Checker) checkThisType(node *ast.Node) { - c.getTypeFromThisTypeNode(node) + memoTypeNode(c, node, (*Checker).getTypeFromThisTypeNode) } func (c *Checker) checkTypeOperator(node *ast.Node) { @@ -3521,7 +3501,7 @@ func (c *Checker) checkNamedTupleMember(node *ast.Node) { func (c *Checker) checkIndexedAccessType(node *ast.Node) { node.ForEachChild(c.checkSourceElement) - c.checkIndexedAccessIndexType(c.getTypeFromIndexedAccessTypeNode(node), node) + c.checkIndexedAccessIndexType(memoTypeNode(c, node, (*Checker).getTypeFromIndexedAccessTypeNode), node) } func (c *Checker) checkMappedType(node *ast.Node) { @@ -3533,7 +3513,7 @@ func (c *Checker) checkMappedType(node *ast.Node) { if mappedTypeNode.Type == nil { c.reportImplicitAny(node, c.anyType, WideningKindNormal) } - t := c.getTypeFromMappedTypeNode(node) + t := memoTypeNode(c, node, (*Checker).getTypeFromMappedTypeNode) nameType := c.getNameTypeFromMappedType(t) if nameType != nil { c.checkTypeAssignableTo(nameType, c.stringNumberSymbolType, mappedTypeNode.NameType, nil) @@ -5442,9 +5422,10 @@ func (c *Checker) getTypeOfModuleDeclarationImportAttributes(attributes *ast.Typ } func (c *Checker) getTypeOfModuleImportAttributes(symbol *ast.Symbol) *Type { - if t, ok := c.moduleImportAttributesTypes[symbol]; ok { + if t, ok := c.moduleImportAttributesTypes.get(c, symbol); ok { return t } + c.moduleImportAttributesTypes.begin(c, symbol) var result *Type moduleDecl := core.Find(symbol.Declarations(), ast.IsModuleWithStringLiteralName) if moduleDecl == nil { @@ -5452,7 +5433,8 @@ func (c *Checker) getTypeOfModuleImportAttributes(symbol *ast.Symbol) *Type { } else { result = c.getTypeOfModuleDeclarationImportAttributes(moduleDecl.AsModuleDeclaration().Attributes) } - c.moduleImportAttributesTypes[symbol] = result + c.moduleImportAttributesTypes.set(c, symbol, result) + c.endMemo() return result } @@ -5685,19 +5667,19 @@ func (c *Checker) getTypeFromImportAttributes(node *ast.Node) *Type { func (c *Checker) checkImportAttributesExpression(node *ast.Node) *Type { links := c.typeNodeLinks.Get(node) - if links.resolvedType == nil { + if links.resolvedType.get(c) == nil { symbol := c.newSymbol(ast.SymbolFlagsObjectLiteral, ast.InternalSymbolNameImportAttributes) members := ast.NewSymbolTable() for _, attribute := range node.AsImportAttributes().Attributes.Nodes { member := c.newSymbol(ast.SymbolFlagsProperty, attribute.Name().Text()) - c.valueSymbolLinks.Get(member).resolvedType = c.getRegularTypeOfLiteralType(c.checkExpressionCached(attribute.AsImportAttribute().Value)) + c.valueSymbolLinks.Get(member).resolvedType.set(c, c.getRegularTypeOfLiteralType(c.checkExpressionCached(attribute.AsImportAttribute().Value))) members.Set(member.Name(), member) } t := c.newAnonymousType(symbol, members, nil, nil, nil) t.objectFlags |= ObjectFlagsObjectLiteral | ObjectFlagsNonInferrableType - links.resolvedType = t + links.resolvedType.set(c, t) } - return links.resolvedType + return links.resolvedType.get(c) } func (c *Checker) getImportAttributesTypeForModuleSpecifier(moduleSpecifier *ast.Node) *Type { @@ -6092,6 +6074,10 @@ func (c *Checker) checkVariableLikeDeclaration(node *ast.Node) { // ^^^^^^ // variable renaming in function type notation is confusing, // so we forbid it even if noUnusedLocals is not enabled + if !c.checking { + c.recordEffect(func(c *Checker) { c.renamedBindingElementsInTypes = append(c.renamedBindingElementsInTypes, node) }) + return + } c.renamedBindingElementsInTypes = append(c.renamedBindingElementsInTypes, node) // Still resolve the type like the end of this function does for every other declaration, // so implicit any errors are reported by checking instead of by whatever asks for the type later @@ -6357,11 +6343,11 @@ func (c *Checker) checkDecorator(node *ast.Node) { } // if we fail to get a signature and return type here, we will have already reported a grammar error in `checkDecorators`. decoratorSignature := c.getDecoratorCallSignature(node) - if decoratorSignature == nil || decoratorSignature.resolvedReturnType == nil { + if decoratorSignature == nil || decoratorSignature.resolvedReturnType.get(c) == nil { return } var headMessage *diagnostics.Message - expectedReturnType := decoratorSignature.resolvedReturnType + expectedReturnType := decoratorSignature.resolvedReturnType.get(c) switch node.Parent.Kind { case ast.KindClassDeclaration, ast.KindClassExpression: headMessage = diagnostics.Decorator_function_return_type_0_is_not_assignable_to_type_1 @@ -6556,11 +6542,21 @@ func (c *Checker) getIterationTypesOfIterable(t *Type, use IterationUse, errorNo if IsTypeAny(t) { return IterationTypes{c.anyType, c.anyType, c.anyType} } + if c.memoActive() { + c.iterationTypesCache.begin(c, IterationTypesKey{typeId: t.id, use: use & IterationUseCacheFlags}) + result := c.getIterationTypesOfIterableCached(t, use, errorNode) + c.endMemo() + return result + } + return c.getIterationTypesOfIterableCached(t, use, errorNode) +} + +func (c *Checker) getIterationTypesOfIterableCached(t *Type, use IterationUse, errorNode *ast.Node) IterationTypes { key := IterationTypesKey{typeId: t.id, use: use & IterationUseCacheFlags} // If we are reporting errors and encounter a cached `noIterationTypes`, we should ignore the cached value and continue as if nothing was cached. // In addition, we should not cache any new results for this call. noCache := false - if cached, ok := c.iterationTypesCache[key]; ok { + if cached, ok := c.iterationTypesCache.get(c, key); ok { if errorNode == nil || cached.hasTypes() { return cached } @@ -6568,7 +6564,7 @@ func (c *Checker) getIterationTypesOfIterable(t *Type, use IterationUse, errorNo } result := c.getIterationTypesOfIterableWorker(t, use, errorNode, noCache) if !noCache { - c.iterationTypesCache[key] = result + c.iterationTypesCache.set(c, key, result) } return result } @@ -6580,7 +6576,7 @@ func (c *Checker) getIterationTypesOfIterableWorker(t *Type, use IterationUse, e iterationTypes := c.getIterationTypesOfIterableWorker(constituent, use, nil, noCache) if !iterationTypes.hasTypes() { if errorNode != nil { - c.addDeferredDiagnostic(func() { + c.addDeferredDiagnostic(func(c *Checker) { c.reportTypeNotIterableError(errorNode, t, use&IterationUseAllowsAsyncIterablesFlag != 0) }) } @@ -6633,7 +6629,7 @@ func (c *Checker) getIterationTypesOfIterableWorker(t *Type, use IterationUse, e if errorNode != nil { // We defer the diagnostic because TypeToString may attempt to resolve symbols that are already being // resolved, possibly causing circularities. - c.addDeferredDiagnostic(func() { + c.addDeferredDiagnostic(func(c *Checker) { diagnostic := c.reportTypeNotIterableError(errorNode, t, use&IterationUseAllowsAsyncIterablesFlag != 0) for _, d := range diags { diagnostic.AddRelatedInfo(d) @@ -7328,6 +7324,10 @@ func (c *Checker) checkTypeParametersNotReferenced(root *ast.Node, typeParameter } func (c *Checker) registerForUnusedIdentifiersCheck(node *ast.Node) { + if !c.checking { + c.recordEffect(func(c *Checker) { c.registerForUnusedIdentifiersCheck(node) }) + return + } sourceFile := ast.GetSourceFileOfNode(node) links := c.sourceFileLinks.Get(sourceFile) links.identifierCheckNodes = append(links.identifierCheckNodes, node) @@ -7630,9 +7630,25 @@ func (c *Checker) getTypeOfExpression(node *ast.Node) *Type { if quickType != nil { return quickType } + if c.memoActive() { + c.beginMemo(memoKeyOf(node, memoFlowExpressionType)) + result, cached := c.getTypeOfExpressionCached(node) + if cached { + c.endMemo() + } else { + c.endMemoUncached() + } + return result + } + result, _ := c.getTypeOfExpressionCached(node) + return result +} + +// getTypeOfExpressionCached returns the type of node, and whether it is cached. +func (c *Checker) getTypeOfExpressionCached(node *ast.Node) (*Type, bool) { // If a type has been cached for the node, return it. if cachedType := c.flowTypeCache[node]; cachedType != nil { - return cachedType + return cachedType, true } startInvocationCount := c.flowInvocationCount t := c.checkExpressionEx(node, CheckModeTypeOnly) @@ -7642,8 +7658,9 @@ func (c *Checker) getTypeOfExpression(node *ast.Node) *Type { c.flowTypeCache = make(map[*ast.Node]*Type) } c.flowTypeCache[node] = t + return t, true } - return t + return t, false } // Returns the type of an expression. Unlike checkExpression, this function is simply concerned @@ -7809,7 +7826,24 @@ func (c *Checker) checkExpressionCachedEx(node *ast.Node, checkMode CheckMode) * return c.checkExpressionEx(node, checkMode) } links := c.typeNodeLinks.Get(node) - if links.resolvedType == nil { + if t := links.resolvedType.get(c); t != nil { + return t + } + if c.memoActive() { + links.resolvedType.begin(c) + result := c.checkExpressionCachedExUncached(node, checkMode) + c.endMemo() + return result + } + return c.checkExpressionCachedExUncached(node, checkMode) +} + +func (c *Checker) checkExpressionCachedExUncached(node *ast.Node, checkMode CheckMode) *Type { + if checkMode != CheckModeNormal { + return c.checkExpressionEx(node, checkMode) + } + links := c.typeNodeLinks.Get(node) + if links.resolvedType.get(c) == nil { // When computing a type that we're going to cache, we need to ignore any ongoing control flow // analysis because variables may have transient types in indeterminable states. Moving flowLoopStart // to the top of the stack ensures all transient types are computed from a known point. @@ -7817,11 +7851,11 @@ func (c *Checker) checkExpressionCachedEx(node *ast.Node, checkMode CheckMode) * saveFlowTypeCache := c.flowTypeCache c.flowLoopStack = nil c.flowTypeCache = nil - links.resolvedType = c.checkExpressionEx(node, checkMode) + links.resolvedType.set(c, c.checkExpressionEx(node, checkMode)) c.flowTypeCache = saveFlowTypeCache c.flowLoopStack = saveFlowLoopStack } - return links.resolvedType + return links.resolvedType.get(c) } // Returns the type of an expression. Unlike checkExpression, this function is simply concerned @@ -7830,12 +7864,14 @@ func (c *Checker) checkExpressionCachedEx(node *ast.Node, checkMode CheckMode) * // and requesting the contextual type might cause a circularity or other bad behaviour. // It sets the contextual type of the node to any before calling getTypeOfExpression. func (c *Checker) getContextFreeTypeOfExpression(node *ast.Node) *Type { - if cached := c.contextFreeTypes[node]; cached != nil { + if cached, _ := c.contextFreeTypes.get(c, node); cached != nil { return cached } + c.contextFreeTypes.begin(c, node) c.pushContextualType(node, c.anyType, false /*isCache*/) t := c.checkExpressionEx(node, CheckModeSkipContextSensitive) - c.contextFreeTypes[node] = t + c.contextFreeTypes.set(c, node, t) + c.endMemo() c.popContextualType() return t } @@ -7851,11 +7887,13 @@ func (c *Checker) checkExpressionEx(node *ast.Node, checkMode CheckMode) *Type { saveCurrentNode := c.currentNode c.currentNode = node c.instantiationCount = 0 + c.beginResolution(0, nil, 0) uninstantiatedType := c.checkExpressionWorker(node, checkMode) t := c.instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, checkMode) if isConstEnumObjectType(t) { c.checkConstEnumAccess(node, t) } + c.endResolution() c.currentNode = saveCurrentNode return t } @@ -8135,10 +8173,10 @@ func (c *Checker) checkPrivateIdentifierExpression(node *ast.Node) *Type { func (c *Checker) getSymbolForPrivateIdentifierExpression(node *ast.Node) *ast.Symbol { links := c.symbolNodeLinks.Get(node) - if links.resolvedSymbol == nil { - links.resolvedSymbol = c.lookupSymbolForPrivateIdentifierDeclaration(node.Text(), node) + if links.resolvedSymbol.get(c) == nil { + links.resolvedSymbol.set(c, c.lookupSymbolForPrivateIdentifierDeclaration(node.Text(), node)) } - return links.resolvedSymbol + return links.resolvedSymbol.get(c) } func (c *Checker) checkSuperExpression(node *ast.Node) *Type { @@ -8300,6 +8338,13 @@ func (c *Checker) isTemplateLiteralContextualType(t *Type) bool { } func (c *Checker) checkRegularExpressionLiteral(node *ast.Node) *Type { + c.beginMemo(memoKeyOf(node, memoRegularExpression)) + result := c.checkRegularExpressionLiteralUncached(node) + c.endMemo() + return result +} + +func (c *Checker) checkRegularExpressionLiteralUncached(node *ast.Node) *Type { nodeLinks := c.nodeLinks.Get(node) if nodeLinks.flags&NodeCheckFlagsTypeChecked == 0 { nodeLinks.flags |= NodeCheckFlagsTypeChecked @@ -8395,12 +8440,12 @@ func (c *Checker) createArrayLiteralType(t *Type) *Type { return t } key := CachedTypeKey{kind: CachedTypeKindArrayLiteralType, typeId: t.id} - if cached, ok := c.cachedTypes[key]; ok { + if cached, ok := c.cachedTypes.get(c, key); ok { return cached } literalType := c.cloneTypeReference(t) literalType.objectFlags |= ObjectFlagsArrayLiteral | ObjectFlagsContainsObjectOrArrayLiteral - c.cachedTypes[key] = literalType + c.cachedTypes.intern(key, literalType) return literalType } @@ -8706,6 +8751,8 @@ func isContextuallyTypedByEnclosingCall(node *ast.Node) bool { return node != parent.Expression() case ast.KindParenthesizedExpression, ast.KindSpreadElement, ast.KindArrayLiteralExpression, ast.KindObjectLiteralExpression, ast.KindPropertyAssignment, ast.KindAwaitExpression: + node = parent + continue case ast.KindConditionalExpression: if node == parent.AsConditionalExpression().Condition { return false @@ -8748,18 +8795,25 @@ func (c *Checker) getResolvedSignature(node *ast.Node, candidatesOutArray *[]*Si // current node do not depend on which was checked first. saveCurrentNode := c.currentNode c.currentNode = node - result := c.resolveSignatureOfCall(node, candidatesOutArray, checkMode) + var result *Signature + if c.memoActive() { + c.signatureLinks.Get(node).resolvedSignature.begin(c) + result = c.getResolvedSignatureUncached(node, candidatesOutArray, checkMode) + c.endMemo() + } else { + result = c.getResolvedSignatureUncached(node, candidatesOutArray, checkMode) + } c.currentNode = saveCurrentNode return result } -func (c *Checker) resolveSignatureOfCall(node *ast.Node, candidatesOutArray *[]*Signature, checkMode CheckMode) *Signature { +func (c *Checker) getResolvedSignatureUncached(node *ast.Node, candidatesOutArray *[]*Signature, checkMode CheckMode) *Signature { links := c.signatureLinks.Get(node) // If getResolvedSignature has already been called, we will have cached the resolvedSignature. // However, it is possible that either candidatesOutArray was not passed in the first time, // or that a different candidatesOutArray was passed in. Therefore, we need to redo the work // to correctly fill the candidatesOutArray. - cached := links.resolvedSignature + cached := links.resolvedSignature.get(c) if cached != nil && cached != c.resolvingSignature && candidatesOutArray == nil { return cached } @@ -8772,7 +8826,7 @@ func (c *Checker) resolveSignatureOfCall(node *ast.Node, candidatesOutArray *[]* if (ast.IsCallExpression(node) || ast.IsNewExpression(node)) && isContextuallyTypedByEnclosingCall(node) { c.getContextualType(node, ContextFlagsNone) } - cached = links.resolvedSignature + cached = links.resolvedSignature.get(c) if cached != nil && cached != c.resolvingSignature && candidatesOutArray == nil { return cached } @@ -8785,9 +8839,9 @@ func (c *Checker) resolveSignatureOfCall(node *ast.Node, candidatesOutArray *[]* // through resolution of the containing function call. By resetting the resolution stack we'll // retry the symbol type resolution with the resolvingSignature marker in place to suppress // the contextual type circularity. - c.resolutionStart = len(c.typeResolutions) + c.resolutionStart = len(c.resolutions) } - links.resolvedSignature = c.resolvingSignature + links.resolvedSignature.swap(c.resolvingSignature) result := c.resolveSignature(node, candidatesOutArray, checkMode) c.resolutionStart = saveResolutionStart // When CheckMode.SkipGenericFunctions is set we use resolvingSignature to indicate that call @@ -8798,16 +8852,16 @@ func (c *Checker) resolveSignatureOfCall(node *ast.Node, candidatesOutArray *[]* // since resolving such signature leads to resolving the potential outer signature, its arguments and thus the very same signature // it's possible that this inner resolution sets the resolvedSignature first. // In such a case we ignore the local result and reuse the correct one that was cached. - if links.resolvedSignature != c.resolvingSignature { - result = links.resolvedSignature + if links.resolvedSignature.get(c) != c.resolvingSignature { + result = links.resolvedSignature.get(c) } // If signature resolution originated in control flow type analysis (for example to compute the // assigned type in a flow assignment) we don't cache the result as it may be based on temporary // types from the control flow analysis. if len(c.flowLoopStack) == 0 { - links.resolvedSignature = result + links.resolvedSignature.set(c, result) } else { - links.resolvedSignature = cached + links.resolvedSignature.swap(cached) } } return result @@ -9314,7 +9368,7 @@ func (c *Checker) resolveCall(node *ast.Node, signatures []*Signature, candidate // don't hit this issue because they only observe this result after it's had a chance to // be cached, but the error reporting code below executes before getResolvedSignature sets // resolvedSignature. - c.signatureLinks.Get(node).resolvedSignature = result + c.signatureLinks.Get(node).resolvedSignature.set(c, result) // No signatures were applicable. Now report errors based on the last applicable signature with // no arguments excluded from assignability checks. // If candidate is undefined, it means that no candidates had a suitable arity. In that case, @@ -9390,12 +9444,14 @@ func (c *Checker) getOptionalCallSignature(signature *Signature, callChainFlags return signature } key := CachedSignatureKey{sig: signature, key: core.IfElse(callChainFlags == SignatureFlagsIsInnerCallChain, SignatureKeyInner, SignatureKeyOuter)} - if cached := c.cachedSignatures[key]; cached != nil { + if cached, _ := c.cachedSignatures.get(c, key); cached != nil { return cached } + c.cachedSignatures.begin(c, key) result := c.cloneSignature(signature) result.flags |= callChainFlags - c.cachedSignatures[key] = result + c.cachedSignatures.set(c, key, result) + c.endMemo() return result } @@ -10507,14 +10563,16 @@ func (c *Checker) checkFunctionExpressionOrObjectLiteralMethod(node *ast.Node, c // Return plain anyFunctionType if there is no possibility we'll make inferences from the return type contextualSignature := c.getContextualSignature(node) if contextualSignature != nil && c.couldContainTypeVariables(c.getReturnTypeOfSignature(contextualSignature)) { - if cached, ok := c.contextFreeTypes[node]; ok { + if cached, ok := c.contextFreeTypes.get(c, node); ok { return cached } + c.contextFreeTypes.begin(c, node) returnType := c.getReturnTypeFromBody(node, checkMode) returnOnlySignature := c.newSignature(SignatureFlagsIsNonInferrable, nil, nil /*typeParameters*/, nil /*thisParameter*/, nil, returnType, nil /*resolvedTypePredicate*/, 0) returnOnlyType := c.newAnonymousType(node.Symbol(), nil, []*Signature{returnOnlySignature}, nil, nil) returnOnlyType.objectFlags |= ObjectFlagsNonInferrableType - c.contextFreeTypes[node] = returnOnlyType + c.contextFreeTypes.set(c, node, returnOnlyType) + c.endMemo() return returnOnlyType } } @@ -10536,6 +10594,12 @@ func (c *Checker) checkFunctionExpressionOrObjectLiteralMethod(node *ast.Node, c func (c *Checker) contextuallyCheckFunctionExpressionOrObjectLiteralMethod(node *ast.Node, checkMode CheckMode) { c.assignContextualParameterTypesOfFunction(node, checkMode) + c.beginMemo(memoKeyOf(node, memoContextChecked)) + c.contextuallyCheckFunctionExpressionOrObjectLiteralMethodUncached(node, checkMode) + c.endMemo() +} + +func (c *Checker) contextuallyCheckFunctionExpressionOrObjectLiteralMethodUncached(node *ast.Node, checkMode CheckMode) { links := c.nodeLinks.Get(node) if links.flags&NodeCheckFlagsContextChecked == 0 || links.flags&NodeCheckFlagsSignatureContextChecked != 0 { return @@ -10543,12 +10607,12 @@ func (c *Checker) contextuallyCheckFunctionExpressionOrObjectLiteralMethod(node links.flags |= NodeCheckFlagsSignatureContextChecked signature := c.getSignatureFromDeclarationUncontextual(node) contextualSignature := c.getContextualSignature(node) - if contextualSignature != nil && c.getReturnTypeFromAnnotation(node) == nil && signature.resolvedReturnType == nil { + if contextualSignature != nil && c.getReturnTypeFromAnnotation(node) == nil && signature.resolvedReturnType.get(c) == nil { // resolvedReturnType is cached indefinitely, so the return type here has to be computed without CheckModeSkipContextSensitive; // otherwise anyFunctionType could leak as part of the computed (and cached) return type. returnType := c.getReturnTypeFromBody(node, checkMode&^CheckModeSkipContextSensitive) - if signature.resolvedReturnType == nil { - signature.resolvedReturnType = returnType + if signature.resolvedReturnType.get(c) == nil { + signature.resolvedReturnType.set(c, returnType) } } c.checkSignatureDeclaration(node) @@ -10560,6 +10624,12 @@ func (c *Checker) contextuallyCheckFunctionExpressionOrObjectLiteralMethod(node // signature of the function is not complete until then, so // getSignatureFromDeclaration requests this before returning it. func (c *Checker) assignContextualParameterTypesOfFunction(node *ast.Node, checkMode CheckMode) { + c.beginMemo(memoKeyOf(node, memoContextualParameters)) + c.assignContextualParameterTypesOfFunctionUncached(node, checkMode) + c.endMemo() +} + +func (c *Checker) assignContextualParameterTypesOfFunctionUncached(node *ast.Node, checkMode CheckMode) { links := c.nodeLinks.Get(node) if links.flags&NodeCheckFlagsContextChecked == 0 { contextualSignature := c.getContextualSignature(node) @@ -10805,7 +10875,7 @@ func (c *Checker) assignNonContextualParameterTypes(signature *Signature) { func (c *Checker) assignParameterType(parameter *ast.Symbol, contextualType *Type) { links := c.valueSymbolLinks.Get(parameter) - if links.resolvedType != nil { + if links.resolvedType.get(c) != nil { return } declaration := parameter.ValueDeclaration() @@ -10817,13 +10887,13 @@ func (c *Checker) assignParameterType(parameter *ast.Symbol, contextualType *Typ t = c.getTypeOfSymbol(parameter) } } - links.resolvedType = c.addOptionalityEx(t, false, declaration != nil && declaration.Initializer() == nil && isOptionalDeclaration(declaration)) + links.resolvedType.set(c, c.addOptionalityEx(t, false, declaration != nil && declaration.Initializer() == nil && isOptionalDeclaration(declaration))) if declaration != nil && !ast.IsIdentifier(declaration.Name()) { // if inference didn't come up with anything but unknown, fall back to the binding pattern if present. - if links.resolvedType == c.unknownType { - links.resolvedType = c.getTypeFromBindingPattern(declaration.Name(), false, false) + if links.resolvedType.get(c) == c.unknownType { + links.resolvedType.set(c, c.getTypeFromBindingPattern(declaration.Name(), false, false)) } - c.assignBindingElementTypes(declaration.Name(), links.resolvedType) + c.assignBindingElementTypes(declaration.Name(), links.resolvedType.get(c)) } } @@ -10835,7 +10905,7 @@ func (c *Checker) assignBindingElementTypes(pattern *ast.Node, parentType *Type) if name != nil { t := c.getBindingElementTypeFromParentType(element, parentType, false /*noTupleBoundsCheck*/) if ast.IsIdentifier(name) { - c.valueSymbolLinks.Get(c.getSymbolOfDeclaration(element)).resolvedType = t + c.valueSymbolLinks.Get(c.getSymbolOfDeclaration(element)).resolvedType.set(c, t) } else { c.assignBindingElementTypes(name, t) } @@ -10941,7 +11011,7 @@ func (c *Checker) setNodeLinksForPrivateIdentifierScope(node *ast.Node) { func (c *Checker) recordPotentialCollisionWithWeakMapSetInGeneratedCode(node *ast.Node, name *ast.Node) { if c.languageVersion <= core.ScriptTargetES2021 && (c.needCollisionCheckForIdentifier(node, name, "WeakMap") || c.needCollisionCheckForIdentifier(node, name, "WeakSet")) { - c.addDeferredDiagnostic(func() { + c.addDeferredDiagnostic(func(c *Checker) { c.checkWeakMapSetCollision(node) }) } @@ -10975,7 +11045,7 @@ func (c *Checker) checkCollisionWithGlobalPromiseInGeneratedCode(node *ast.Node, func (c *Checker) recordPotentialCollisionWithReflectInGeneratedCode(node *ast.Node, name *ast.Node) { if name != nil && c.languageVersion <= core.ScriptTargetES2021 && c.needCollisionCheckForIdentifier(node, name, "Reflect") { - c.addDeferredDiagnostic(func() { + c.addDeferredDiagnostic(func(c *Checker) { c.checkReflectCollision(node) }) } @@ -11065,8 +11135,24 @@ func (c *Checker) getInstantiationExpressionType(exprType *Type, node *ast.Node) return exprType } key := InstantiationExpressionKey{nodeId: ast.GetNodeId(node), typeId: exprType.id} - if cached := c.instantiationExpressionTypes[key]; cached != nil { - return cached + entry, _ := c.instantiationExpressionTypes.get(c, key) + if entry == nil { + entry = &instantiationExpressionEntry{} + c.instantiationExpressionTypes.intern(key, entry) + } + c.beginMemo(memoKeyOf(entry, memoInstantiationExpressionType)) + result := c.getInstantiationExpressionTypeCached(exprType, node, typeArguments, entry) + c.endMemo() + return result +} + +type instantiationExpressionEntry struct { + t *Type +} + +func (c *Checker) getInstantiationExpressionTypeCached(exprType *Type, node *ast.Node, typeArguments *ast.NodeList, entry *instantiationExpressionEntry) *Type { + if entry.t != nil { + return entry.t } hasSomeApplicableSignature := false var nonApplicableType *Type @@ -11128,7 +11214,7 @@ func (c *Checker) getInstantiationExpressionType(exprType *Type, node *ast.Node) return result } result := getInstantiatedType(exprType) - c.instantiationExpressionTypes[key] = result + entry.t = result var errorType *Type if hasSomeApplicableSignature { errorType = nonApplicableType @@ -11624,6 +11710,13 @@ func (c *Checker) removeOptionalityFromDeclaredType(declaredType *Type, declarat } func (c *Checker) parameterInitializerContainsUndefined(declaration *ast.Node) bool { + c.beginMemo(memoKeyOf(declaration, memoInitializerIsUndefined)) + result := c.parameterInitializerContainsUndefinedUncached(declaration) + c.endMemo() + return result +} + +func (c *Checker) parameterInitializerContainsUndefinedUncached(declaration *ast.Node) bool { links := c.nodeLinks.Get(declaration) if links.flags&NodeCheckFlagsInitializerIsUndefinedComputed == 0 { if !c.pushTypeResolution(declaration, TypeSystemPropertyNameInitializerIsUndefined) { @@ -11751,7 +11844,7 @@ func (c *Checker) checkPropertyAccessExpressionOrQualifiedName(node *ast.Node, l return c.anyType } if right.Text() != "" && !c.checkAndReportErrorForExtendingInterface(node) { - c.addDeferredDiagnostic(func() { + c.addDeferredDiagnostic(func(c *Checker) { // must be deferred because reporting this error can cause us to materialize the containing type completely (to print it), leading to erroneous circularity errors c.reportNonexistentProperty(right, core.IfElse(isThisTypeParameter(leftType), apparentType, leftType), isUncheckedJS) }) @@ -11778,7 +11871,7 @@ func (c *Checker) checkPropertyAccessExpressionOrQualifiedName(node *ast.Node, l } c.checkPropertyNotUsedBeforeDeclaration(prop, node, right) c.markPropertyAsReferenced(prop, node, c.isSelfTypeAccess(left, parentSymbol)) - c.symbolNodeLinks.Get(node).resolvedSymbol = prop + setIfChanged(c, &c.symbolNodeLinks.Get(node).resolvedSymbol, prop) c.checkPropertyAccessibility(node, left.Kind == ast.KindSuperKeyword, ast.IsWriteAccess(node), apparentType, prop) if c.isAssignmentToReadonlyEntity(node, prop, assignmentKind) { c.error(right, diagnostics.Cannot_assign_to_0_because_it_is_a_read_only_property, right.Text()) @@ -11936,6 +12029,10 @@ func (c *Checker) checkPrivateIdentifierPropertyAccess(leftType *Type, right *as } func (c *Checker) reportNonexistentProperty(propNode *ast.Node, containingType *Type, isUncheckedJS bool) { + if !c.checking { + c.recordEffect(func(c *Checker) { c.reportNonexistentProperty(propNode, containingType, isUncheckedJS) }) + return + } key := NonExistentPropertyKey{propNode, containingType, isUncheckedJS} if c.nonExistentProperties.Has(key) { return @@ -13192,7 +13289,7 @@ func (c *Checker) checkAssignmentOperator(left *ast.Node, operator ast.Kind, rig if ast.IsAssignmentOperator(operator) { // We ignore assignments of undefined to CommonJS exports when there are multiple assignment declarations if ast.IsDeclarationNode(left.Parent) && ast.GetAssignmentDeclarationKind(left.Parent) == ast.JSDeclarationKindExportsProperty { - if symbol := c.symbolNodeLinks.Get(left).resolvedSymbol; symbol != nil && len(symbol.Declarations()) > 1 && rightType.flags&TypeFlagsUndefined != 0 { + if symbol := c.symbolNodeLinks.Get(left).resolvedSymbol.get(c); symbol != nil && len(symbol.Declarations()) > 1 && rightType.flags&TypeFlagsUndefined != 0 { return } } @@ -13520,7 +13617,7 @@ func (c *Checker) checkInExpression(left *ast.Expression, right *ast.Expression, } // Unlike in 'checkPrivateIdentifierExpression' we now have access to the RHS type // which provides us with the opportunity to emit more detailed errors - if c.symbolNodeLinks.Get(left).resolvedSymbol == nil && ast.GetContainingClass(left) != nil { + if c.symbolNodeLinks.Get(left).resolvedSymbol.get(c) == nil && ast.GetContainingClass(left) != nil { isUncheckedJS := c.isUncheckedJSSuggestion(left, rightType.symbol, true /*excludeClasses*/) c.reportNonexistentProperty(left, rightType, isUncheckedJS) } @@ -13601,7 +13698,7 @@ func (c *Checker) checkObjectLiteral(node *ast.Node, checkMode CheckMode) *Type contextualType := c.getApparentTypeOfContextualType(node, ContextFlagsNone) var contextualTypeHasPattern bool if contextualType != nil { - if pattern := c.patternForType[contextualType]; pattern != nil && (ast.IsObjectBindingPattern(pattern) || ast.IsObjectLiteralExpression(pattern)) { + if pattern, _ := c.patternForType.get(c, contextualType); pattern != nil && (ast.IsObjectBindingPattern(pattern) || ast.IsObjectLiteralExpression(pattern)) { contextualTypeHasPattern = true } } @@ -13644,15 +13741,15 @@ func (c *Checker) checkObjectLiteral(node *ast.Node, checkMode CheckMode) *Type flags |= ObjectFlagsObjectLiteralPatternWithComputedProperties } key := c.getObjectLiteralTypeKey(node, flags, propertiesTable, indexInfos) - if existing := c.objectLiteralTypes[key]; existing != nil { + if existing, _ := c.objectLiteralTypes.get(c, key); existing != nil { return existing } result := c.newAnonymousType(node.Symbol(), propertiesTable, nil, nil, indexInfos) result.objectFlags |= flags if inDestructuringPattern { - c.patternForType[result] = node + c.patternForType.intern(result, node) } - c.objectLiteralTypes[key] = result + c.objectLiteralTypes.intern(key, result) return result } for _, memberDecl := range node.Properties() { @@ -13703,7 +13800,7 @@ func (c *Checker) checkObjectLiteral(node *ast.Node, checkMode CheckMode) *Type prop.SetDeclarations(member.Declarations()) prop.SetParent(member.Parent()) prop.SetValueDeclaration(member.ValueDeclaration()) - links.resolvedType = t + links.resolvedType.set(c, t) links.target = member member = prop if allPropertiesTable != nil { @@ -13902,7 +13999,7 @@ func (c *Checker) getSpreadType(left *Type, right *Type, symbol *ast.Symbol, obj b.writeByte(0) } key := b.hash() - if existing := c.spreadTypes[key]; existing != nil { + if existing, _ := c.spreadTypes.get(c, key); existing != nil { return existing } members := ast.NewSymbolTable() @@ -13930,7 +14027,7 @@ func (c *Checker) getSpreadType(left *Type, right *Type, symbol *ast.Symbol, obj rightType := c.getTypeOfSymbol(rightProp) if rightProp.Flags()&ast.SymbolFlagsOptional != 0 { key := spreadSymbolKey{left: leftProp, right: rightProp} - if existing := c.spreadSymbols[key]; existing != nil { + if existing, _ := c.spreadSymbols.get(c, key); existing != nil { members.Set(leftProp.Name(), existing) continue } @@ -13946,15 +14043,15 @@ func (c *Checker) getSpreadType(left *Type, right *Type, symbol *ast.Symbol, obj leftTypeWithoutUndefined := c.removeMissingOrUndefinedType(leftType) rightTypeWithoutUndefined := c.removeMissingOrUndefinedType(rightType) if leftTypeWithoutUndefined == rightTypeWithoutUndefined { - links.resolvedType = leftType + links.resolvedType.set(c, leftType) } else { - links.resolvedType = c.getUnionTypeEx([]*Type{leftType, rightTypeWithoutUndefined}, UnionReductionSubtype, nil, nil) + links.resolvedType.set(c, c.getUnionTypeEx([]*Type{leftType, rightTypeWithoutUndefined}, UnionReductionSubtype, nil, nil)) } c.spreadLinks.Get(result).leftSpread = leftProp c.spreadLinks.Get(result).rightSpread = rightProp result.SetDeclarations(declarations) links.setNameType(c, c.valueSymbolLinks.Get(leftProp).getNameType()) - c.spreadSymbols[key] = result + c.spreadSymbols.intern(key, result) members.Set(leftProp.Name(), result) } } else { @@ -13968,14 +14065,14 @@ func (c *Checker) getSpreadType(left *Type, right *Type, symbol *ast.Symbol, obj // Different inputs can produce the same members, e.g. when the right side // overrides every property of the left side. contentKey := c.getObjectTypeContentKey(symbol, flags, members, spreadIndexInfos) - if existing := c.objectContentTypes[contentKey]; existing != nil { - c.spreadTypes[key] = existing + if existing, _ := c.objectContentTypes.get(c, contentKey); existing != nil { + c.spreadTypes.intern(key, existing) return existing } spread := c.newAnonymousType(symbol, members, nil, nil, spreadIndexInfos) spread.objectFlags |= flags - c.objectContentTypes[contentKey] = spread - c.spreadTypes[key] = spread + c.objectContentTypes.intern(contentKey, spread) + c.spreadTypes.intern(key, spread) return spread } @@ -14046,9 +14143,9 @@ func (c *Checker) tryMergeUnionOfObjectTypeAndEmptyObject(t *Type, readonly bool result := c.newSymbolEx(flags, prop.Name(), prop.CheckFlags()&ast.CheckFlagsLate|core.IfElse(readonly, ast.CheckFlagsReadonly, 0)) links := c.valueSymbolLinks.Get(result) if isSetonlyAccessor { - links.resolvedType = c.undefinedType + links.resolvedType.set(c, c.undefinedType) } else { - links.resolvedType = c.addOptionalityEx(c.getTypeOfSymbol(prop), true /*isProperty*/, true /*isOptional*/) + links.resolvedType.set(c, c.addOptionalityEx(c.getTypeOfSymbol(prop), true /*isProperty*/, true /*isOptional*/)) } result.SetDeclarations(prop.Declarations()) links.setNameType(c, c.valueSymbolLinks.Get(prop).getNameType()) @@ -14073,21 +14170,21 @@ func (c *Checker) getSpreadSymbol(prop *ast.Symbol, readonly bool) *ast.Symbol { return prop } key := spreadSymbolKey{right: prop, readonly: readonly} - if existing := c.spreadSymbols[key]; existing != nil { + if existing, _ := c.spreadSymbols.get(c, key); existing != nil { return existing } flags := ast.SymbolFlagsProperty | (prop.Flags() & ast.SymbolFlagsOptional) result := c.newSymbolEx(flags, prop.Name(), prop.CheckFlags()&ast.CheckFlagsLate|core.IfElse(readonly, ast.CheckFlagsReadonly, 0)) links := c.valueSymbolLinks.Get(result) if isSetonlyAccessor { - links.resolvedType = c.undefinedType + links.resolvedType.set(c, c.undefinedType) } else { - links.resolvedType = c.getTypeOfSymbol(prop) + links.resolvedType.set(c, c.getTypeOfSymbol(prop)) } result.SetDeclarations(prop.Declarations()) links.setNameType(c, c.valueSymbolLinks.Get(prop).getNameType()) c.mappedSymbolLinks.Get(result).syntheticOrigin = prop - c.spreadSymbols[key] = result + c.spreadSymbols.intern(key, result) return result } @@ -14446,23 +14543,37 @@ func (c *Checker) checkExpressionForMutableLocation(node *ast.Node, checkMode Ch func (c *Checker) getResolvedSymbol(node *ast.Node) *ast.Symbol { links := c.symbolNodeLinks.Get(node) - if links.resolvedSymbol == nil { + if symbol := links.resolvedSymbol.get(c); symbol != nil { + return symbol + } + if c.memoActive() { + links.resolvedSymbol.begin(c) + result := c.getResolvedSymbolUncached(node) + c.endMemo() + return result + } + return c.getResolvedSymbolUncached(node) +} + +func (c *Checker) getResolvedSymbolUncached(node *ast.Node) *ast.Symbol { + links := c.symbolNodeLinks.Get(node) + if links.resolvedSymbol.get(c) == nil { var symbol *ast.Symbol if !ast.NodeIsMissing(node) { symbol = c.resolveName(node, node.Text(), ast.SymbolFlagsValue|ast.SymbolFlagsExportValue, c.getCannotFindNameDiagnosticForName(node), !ast.IsWriteOnlyAccess(node), false /*excludeGlobals*/) } - links.resolvedSymbol = core.OrElse(symbol, c.unknownSymbol) + links.resolvedSymbol.set(c, core.OrElse(symbol, c.unknownSymbol)) } - return links.resolvedSymbol + return links.resolvedSymbol.get(c) } func (c *Checker) getResolvedSymbolOrNil(node *ast.Node) *ast.Symbol { - return c.symbolNodeLinks.Get(node).resolvedSymbol + return c.symbolNodeLinks.Get(node).resolvedSymbol.get(c) } func (c *Checker) getReferencedValueOrAliasSymbol(reference *ast.Node) *ast.Symbol { - resolvedSymbol := c.symbolNodeLinks.Get(reference).resolvedSymbol + resolvedSymbol := c.symbolNodeLinks.Get(reference).resolvedSymbol.get(c) if resolvedSymbol != nil && resolvedSymbol != c.unknownSymbol { return resolvedSymbol } @@ -14525,17 +14636,23 @@ func (c *Checker) getDiagnostics(ctx context.Context, sourceFile *ast.SourceFile func (c *Checker) GetGlobalDiagnostics() []*ast.Diagnostic { c.checkNotCanceled() - c.produceDeferredDiagnostics() + c.withChecking(c.produceDeferredDiagnostics) return c.diagnostics.GetGlobalDiagnostics() } -func (c *Checker) addDeferredDiagnostic(callback func()) { +// Deferred callbacks receive the checker that produces them, since the one +// that queued them may be a checker answering queries sharing this store. +func (c *Checker) addDeferredDiagnostic(callback func(c *Checker)) { + if !c.checking { + c.recordEffect(func(c *Checker) { c.addDeferredDiagnostic(callback) }) + return + } c.deferredDiagnosticCallbacks = append(c.deferredDiagnosticCallbacks, callback) } func (c *Checker) produceDeferredDiagnostics() { for _, cb := range c.deferredDiagnosticCallbacks { - cb() + cb(c) } c.deferredDiagnosticCallbacks = nil } @@ -14543,6 +14660,10 @@ func (c *Checker) produceDeferredDiagnostics() { func (c *Checker) addDiagnostic(diagnostic *ast.Diagnostic) *ast.Diagnostic { // Discard diagnostics created while at the maximum number of recursive TypeToString invocations. if c.serializationLevel < maxSerializationLevel { + if !c.checking { + c.recordEffect(func(c *Checker) { c.diagnostics.Add(diagnostic) }) + return diagnostic + } return c.diagnostics.Add(diagnostic) } return diagnostic @@ -14551,6 +14672,10 @@ func (c *Checker) addDiagnostic(diagnostic *ast.Diagnostic) *ast.Diagnostic { func (c *Checker) addSuggestionDiagnostic(diagnostic *ast.Diagnostic) *ast.Diagnostic { // Discard diagnostics created while at the maximum number of recursive TypeToString invocations. if c.serializationLevel < maxSerializationLevel { + if !c.checking { + c.recordEffect(func(c *Checker) { c.suggestionDiagnostics.Add(diagnostic) }) + return diagnostic + } return c.suggestionDiagnostics.Add(diagnostic) } return diagnostic @@ -14560,6 +14685,28 @@ func (c *Checker) error(location *ast.Node, message *diagnostics.Message, args . return c.addDiagnostic(NewDiagnosticForNode(location, message, args...)) } +// errorAtCurrentNode reports an error at the node currently being checked. +// When a result is computed outside of checking, there is no such node; the +// location is then resolved when checking first observes the result, which +// is where the error would have been reported had checking computed it. +func (c *Checker) errorAtCurrentNode(message *diagnostics.Message, args ...any) { + c.reportAtCurrentNode(func(c *Checker, node *ast.Node) { c.error(node, message, args...) }) +} + +func (c *Checker) reportAtCurrentNode(report func(c *Checker, node *ast.Node)) { + if !c.checking { + // A node the computation started at is where the computation was + // requested from, so it is located wherever the result is reused. + node := c.currentNode + if c.atMemoStartNode() { + node = nil + } + c.recordEffect(func(c *Checker) { report(c, core.OrElse(node, c.currentNode)) }) + return + } + report(c, c.currentNode) +} + func (c *Checker) errorSkippedOnNoEmit(location *ast.Node, message *diagnostics.Message, args ...any) *ast.Diagnostic { diagnostic := c.error(location, message, args...) diagnostic.SetSkippedOnNoEmit() @@ -14648,13 +14795,13 @@ func (c *Checker) newSymbolEx(flags ast.SymbolFlags, name string, checkFlags ast func (c *Checker) newParameter(name string, t *Type) *ast.Symbol { symbol := c.newSymbol(ast.SymbolFlagsFunctionScopedVariable, name) - c.valueSymbolLinks.Get(symbol).resolvedType = t + c.valueSymbolLinks.Get(symbol).resolvedType.set(c, t) return symbol } func (c *Checker) newProperty(name string, t *Type) *ast.Symbol { symbol := c.newSymbol(ast.SymbolFlagsProperty, name) - c.valueSymbolLinks.Get(symbol).resolvedType = t + c.valueSymbolLinks.Get(symbol).resolvedType.set(c, t) return symbol } @@ -15094,7 +15241,7 @@ func (c *Checker) getTargetOfImportClause(node *ast.Node) *ast.Symbol { if links.immediateTarget == nil { symbol := c.newSymbol(ast.SymbolFlagsFunctionScopedVariable, node.Name().Text()) symbol.SetDeclarations(alias.Declarations()) - c.valueSymbolLinks.Get(symbol).resolvedType = c.getGlobalAbstractModuleSourceType() + c.valueSymbolLinks.Get(symbol).resolvedType.set(c, c.getGlobalAbstractModuleSourceType()) links.immediateTarget = symbol } return links.immediateTarget @@ -16338,11 +16485,13 @@ func (c *Checker) getTypeWithSyntheticDefaultOnly(t *Type, symbol *ast.Symbol, o hasDefaultOnly := c.isOnlyImportableAsDefault(moduleSpecifier, nil, importAttributesType) if hasDefaultOnly && t != nil && !c.isErrorType(t) { key := CachedTypeKey{kind: CachedTypeKindDefaultOnlyType, typeId: t.id} - if cached := c.cachedTypes[key]; cached != nil { + if cached, _ := c.cachedTypes.get(c, key); cached != nil { return cached } + c.cachedTypes.begin(c, key) result := c.createDefaultPropertyWrapperForModule(symbol, originalSymbol, nil) - c.cachedTypes[key] = result + c.cachedTypes.set(c, key, result) + c.endMemo() return result } return nil @@ -16351,9 +16500,11 @@ func (c *Checker) getTypeWithSyntheticDefaultOnly(t *Type, symbol *ast.Symbol, o func (c *Checker) getTypeWithSyntheticDefaultImportType(t *Type, symbol *ast.Symbol, originalSymbol *ast.Symbol, moduleSpecifier *ast.Node) *Type { if t != nil && !c.isErrorType(t) { key := CachedTypeKey{kind: CachedTypeKindSyntheticType, typeId: t.id} - if cached := c.cachedTypes[key]; cached != nil { + if cached, _ := c.cachedTypes.get(c, key); cached != nil { return cached } + c.cachedTypes.begin(c, key) + defer c.endMemo() file := core.Find(originalSymbol.Declarations(), ast.IsSourceFile) hasSyntheticDefault := c.canHaveSyntheticDefault(file, originalSymbol, false /*dontResolveAlias*/, moduleSpecifier) var syntheticType *Type @@ -16361,7 +16512,7 @@ func (c *Checker) getTypeWithSyntheticDefaultImportType(t *Type, symbol *ast.Sym anonymousSymbol := c.newSymbol(ast.SymbolFlagsTypeLiteral, ast.InternalSymbolNameType) anonymousSymbol.SetDeclarations(originalSymbol.Declarations()) defaultContainingObject := c.createDefaultPropertyWrapperForModule(symbol, originalSymbol, anonymousSymbol) - c.valueSymbolLinks.Get(anonymousSymbol).resolvedType = defaultContainingObject + c.valueSymbolLinks.Get(anonymousSymbol).resolvedType.set(c, defaultContainingObject) if c.isValidSpreadType(t) { syntheticType = c.getSpreadType(t, defaultContainingObject, anonymousSymbol, 0 /*objectFlags*/, false /*readonly*/) } else { @@ -16370,7 +16521,7 @@ func (c *Checker) getTypeWithSyntheticDefaultImportType(t *Type, symbol *ast.Sym } else { syntheticType = t } - c.cachedTypes[key] = syntheticType + c.cachedTypes.set(c, key, syntheticType) return syntheticType } return t @@ -16414,7 +16565,7 @@ func (c *Checker) createDefaultPropertyWrapperForModule(symbol *ast.Symbol, orig newSymbol := c.newSymbol(ast.SymbolFlagsAlias, ast.InternalSymbolNameDefault) newSymbol.SetParent(originalSymbol) c.valueSymbolLinks.Get(newSymbol).setNameType(c, c.getStringLiteralType("default")) - c.aliasSymbolLinks.Get(newSymbol).aliasTarget = c.resolveSymbol(symbol) + c.aliasSymbolLinks.Get(newSymbol).aliasTarget.set(c, c.resolveSymbol(symbol)) memberTable.Set(ast.InternalSymbolNameDefault, newSymbol) if anonymousSymbol == nil && originalSymbol != nil { anonymousSymbol = c.newSymbol(ast.SymbolFlagsObjectLiteral, ast.InternalSymbolNameObject) @@ -16434,7 +16585,7 @@ func (c *Checker) cloneTypeAsModuleType(symbol *ast.Symbol, moduleType *Type, re links.target = symbol links.originatingImport = referenceParent resolvedModuleType := c.resolveStructuredTypeMembers(moduleType) - c.valueSymbolLinks.Get(result).resolvedType = c.newAnonymousType(result, resolvedModuleType.getMembers(), nil, nil, resolvedModuleType.getIndexInfos()) + c.valueSymbolLinks.Get(result).resolvedType.set(c, c.newAnonymousType(result, resolvedModuleType.getMembers(), nil, nil, resolvedModuleType.getIndexInfos())) return result } @@ -16633,6 +16784,13 @@ func (c *Checker) getExportsOfSymbol(symbol *ast.Symbol) ast.SymbolTable { } func (c *Checker) getResolvedMembersOrExportsOfSymbol(symbol *ast.Symbol, resolutionKind MembersOrExportsResolutionKind) ast.SymbolTable { + c.beginMemo(memoKeyOf(symbol, memoResolvedMembers+memoField(resolutionKind))) + result := c.getResolvedMembersOrExportsOfSymbolUncached(symbol, resolutionKind) + c.endMemo() + return result +} + +func (c *Checker) getResolvedMembersOrExportsOfSymbolUncached(symbol *ast.Symbol, resolutionKind MembersOrExportsResolutionKind) ast.SymbolTable { links := c.membersAndExportsLinks.Get(symbol) if links[resolutionKind] == nil { isStatic := resolutionKind == MembersOrExportsResolutionKindResolvedExports @@ -16710,10 +16868,10 @@ func (c *Checker) getResolvedMembersOrExportsOfSymbol(symbol *ast.Symbol, resolu func (c *Checker) lateBindMember(parent *ast.Symbol, earlySymbols ast.SymbolTable, lateSymbols ast.SymbolTable, decl *ast.Node) *ast.Symbol { debug.Assert(decl.Symbol() != nil, "The member is expected to have a symbol.") links := c.symbolNodeLinks.Get(decl) - if links.resolvedSymbol == nil { + if links.resolvedSymbol.get(c) == nil { // In the event we attempt to resolve the late-bound name of this member recursively, // fall back to the early-bound name of this member. - links.resolvedSymbol = decl.Symbol() + links.resolvedSymbol.set(c, decl.Symbol()) var declName *ast.Node if ast.IsBinaryExpression(decl) { declName = decl.AsBinaryExpression().Left @@ -16764,10 +16922,10 @@ func (c *Checker) lateBindMember(parent *ast.Symbol, earlySymbols ast.SymbolTabl if lateSymbol.Parent() == nil { lateSymbol.SetParent(parent) } - links.resolvedSymbol = lateSymbol + links.resolvedSymbol.set(c, lateSymbol) } } - return links.resolvedSymbol + return links.resolvedSymbol.get(c) } func (c *Checker) lateBindIndexSignature(parent *ast.Symbol, earlySymbols ast.SymbolTable, lateSymbols ast.SymbolTable, decl *ast.Node) { @@ -16835,6 +16993,13 @@ func (c *Checker) getMembersOfSymbol(symbol *ast.Symbol) ast.SymbolTable { func (c *Checker) getExportsOfModule(moduleSymbol *ast.Symbol) ast.SymbolTable { links := c.moduleSymbolLinks.Get(moduleSymbol) + c.beginMemo(memoKeyOf(links, memoModuleExports)) + result := c.getExportsOfModuleCached(moduleSymbol, links) + c.endMemo() + return result +} + +func (c *Checker) getExportsOfModuleCached(moduleSymbol *ast.Symbol, links *ModuleSymbolLinks) ast.SymbolTable { if links.resolvedExports == nil { exports, typeOnlyExportStarMap := c.getExportsOfModuleWorker(moduleSymbol) links.resolvedExports = exports @@ -16970,11 +17135,25 @@ func (c *Checker) ResolveAlias(symbol *ast.Symbol) (*ast.Symbol, bool) { // meaning. Pure aliases are eagerly resolved and any type-only markers are back-propagated to the original // symbol. The function panics if the argument is not a symbol with an alias meaning. func (c *Checker) resolveAlias(symbol *ast.Symbol) *ast.Symbol { + links := c.aliasSymbolLinks.Get(symbol) + if target := links.aliasTarget.get(c); target != nil { + return target + } + if c.memoActive() { + links.aliasTarget.begin(c) + result := c.resolveAliasUncached(symbol) + c.endMemo() + return result + } + return c.resolveAliasUncached(symbol) +} + +func (c *Checker) resolveAliasUncached(symbol *ast.Symbol) *ast.Symbol { if symbol.Flags()&ast.SymbolFlagsAlias == 0 { panic("Should only get alias here") } links := c.aliasSymbolLinks.Get(symbol) - if links.aliasTarget == nil { + if links.aliasTarget.get(c) == nil { if !c.pushTypeResolution(symbol, TypeSystemPropertyNameAliasTarget) { return c.unknownSymbol } @@ -16987,13 +17166,13 @@ func (c *Checker) resolveAlias(symbol *ast.Symbol) *ast.Symbol { // When the target is a pure alias, we transitively resolve and propagate any typeOnlyDeclaration target = c.resolveIndirectionAlias(symbol, target) } - links.aliasTarget = core.OrElse(target, c.unknownSymbol) + links.aliasTarget.set(c, core.OrElse(target, c.unknownSymbol)) if !c.popTypeResolution() { c.error(node, diagnostics.Circular_definition_of_import_alias_0, c.symbolToString(symbol)) - links.aliasTarget = c.unknownSymbol + links.aliasTarget.set(c, c.unknownSymbol) } } - return links.aliasTarget + return links.aliasTarget.get(c) } func (c *Checker) resolveIndirectionAlias(source *ast.Symbol, target *ast.Symbol) *ast.Symbol { @@ -17008,7 +17187,7 @@ func (c *Checker) resolveIndirectionAlias(source *ast.Symbol, target *ast.Symbol func (c *Checker) tryResolveAlias(symbol *ast.Symbol) *ast.Symbol { links := c.aliasSymbolLinks.Get(symbol) - if links.aliasTarget != nil || c.findResolutionCycleStartIndex(symbol, TypeSystemPropertyNameAliasTarget) < 0 { + if links.aliasTarget.get(c) != nil || c.findResolutionCycleStartIndex(symbol, TypeSystemPropertyNameAliasTarget) < 0 { return c.resolveAlias(symbol) } return nil @@ -17106,20 +17285,20 @@ func (c *Checker) getDeclarationOfAliasSymbol(symbol *ast.Symbol) *ast.Node { func (c *Checker) getTypeOfSymbolWithDeferredType(symbol *ast.Symbol) *Type { links := c.valueSymbolLinks.Get(symbol) - if links.resolvedType == nil { + if links.resolvedType.get(c) == nil { deferred := c.deferredSymbolLinks.Get(symbol) if deferred.parent.flags&TypeFlagsUnion != 0 { - links.resolvedType = c.getUnionType(deferred.constituents) + links.resolvedType.set(c, c.getUnionType(deferred.constituents)) } else { - links.resolvedType = c.getIntersectionType(deferred.constituents) + links.resolvedType.set(c, c.getIntersectionType(deferred.constituents)) } } - return links.resolvedType + return links.resolvedType.get(c) } func (c *Checker) getWriteTypeOfSymbolWithDeferredType(symbol *ast.Symbol) *Type { links := c.valueSymbolLinks.Get(symbol) - if links.getWriteType() == nil { + if links.getWriteType(c) == nil { deferred := c.deferredSymbolLinks.Get(symbol) if len(deferred.writeConstituents) != 0 { if deferred.parent.flags&TypeFlagsUnion != 0 { @@ -17131,19 +17310,26 @@ func (c *Checker) getWriteTypeOfSymbolWithDeferredType(symbol *ast.Symbol) *Type links.setWriteType(c, c.getTypeOfSymbolWithDeferredType(symbol)) } } - return links.getWriteType() + return links.getWriteType(c) } // Distinct write types come only from set accessors, but synthetic union and intersection // properties deriving from set accessors will either pre-compute or defer the union or // intersection of the writeTypes of their constituents. func (c *Checker) getWriteTypeOfSymbol(symbol *ast.Symbol) *Type { + c.beginMemo(memoKeyOf(symbol, memoWriteType)) + result := c.getWriteTypeOfSymbolUncached(symbol) + c.endMemo() + return result +} + +func (c *Checker) getWriteTypeOfSymbolUncached(symbol *ast.Symbol) *Type { if symbol.CheckFlags()&ast.CheckFlagsSyntheticProperty != 0 { if symbol.CheckFlags()&ast.CheckFlagsDeferredType != 0 { return c.getWriteTypeOfSymbolWithDeferredType(symbol) } links := c.valueSymbolLinks.Get(symbol) - return core.OrElse(links.getWriteType(), links.resolvedType) + return core.OrElse(links.getWriteType(c), links.resolvedType.get(c)) } if symbol.Flags()&ast.SymbolFlagsProperty != 0 { return c.removeMissingType(c.getTypeOfSymbol(symbol), symbol.Flags()&ast.SymbolFlagsOptional != 0) @@ -17201,7 +17387,7 @@ func (c *Checker) GetTypeOfSymbolAtLocation(symbol *ast.Symbol, location *ast.No // getSymbolOfNameOrPropertyAccessExpression), so an access that resolved to // none is matched against the index signature it would use. func (c *Checker) resolvedSymbolAtLocation(location *ast.Node, symbol *ast.Symbol) *ast.Symbol { - resolved := c.symbolNodeLinks.Get(location).resolvedSymbol + resolved := c.symbolNodeLinks.Get(location).resolvedSymbol.get(c) if resolved == nil && symbol.CheckFlags()&ast.CheckFlagsIndexSymbol != 0 && ast.IsPropertyAccessExpression(location) && !ast.IsPrivateIdentifier(location.Name()) { resolved = c.getApplicableIndexSymbol(c.checkExpressionCached(location.Expression()), c.getLiteralTypeFromPropertyName(location.Name())) } @@ -17209,6 +17395,20 @@ func (c *Checker) resolvedSymbolAtLocation(location *ast.Node, symbol *ast.Symbo } func (c *Checker) getTypeOfSymbol(symbol *ast.Symbol) *Type { + links := c.valueSymbolLinks.Get(symbol) + if t := links.resolvedType.get(c); t != nil { + return t + } + if c.memoActive() { + links.resolvedType.begin(c) + result := c.getTypeOfSymbolUncached(symbol) + c.endMemo() + return result + } + return c.getTypeOfSymbolUncached(symbol) +} + +func (c *Checker) getTypeOfSymbolUncached(symbol *ast.Symbol) *Type { if symbol.CheckFlags()&ast.CheckFlagsDeferredType != 0 { return c.getTypeOfSymbolWithDeferredType(symbol) } @@ -17245,23 +17445,23 @@ func (c *Checker) getNonMissingTypeOfSymbol(symbol *ast.Symbol) *Type { func (c *Checker) getTypeOfInstantiatedSymbol(symbol *ast.Symbol) *Type { links := c.valueSymbolLinks.Get(symbol) - if links.resolvedType == nil { - links.resolvedType = c.instantiateType(c.getTypeOfSymbol(links.target), links.mapper) + if links.resolvedType.get(c) == nil { + links.resolvedType.set(c, c.instantiateType(c.getTypeOfSymbol(links.target), links.mapper)) } - return links.resolvedType + return links.resolvedType.get(c) } func (c *Checker) getWriteTypeOfInstantiatedSymbol(symbol *ast.Symbol) *Type { links := c.valueSymbolLinks.Get(symbol) - if links.getWriteType() == nil { + if links.getWriteType(c) == nil { links.setWriteType(c, c.instantiateType(c.getWriteTypeOfSymbol(links.target), links.mapper)) } - return links.getWriteType() + return links.getWriteType(c) } func (c *Checker) getTypeOfVariableOrParameterOrProperty(symbol *ast.Symbol) *Type { links := c.valueSymbolLinks.Get(symbol) - if links.resolvedType == nil { + if links.resolvedType.get(c) == nil { t := c.getTypeOfVariableOrParameterOrPropertyWorker(symbol) if t == nil { panic("Unexpected nil type") @@ -17271,15 +17471,15 @@ func (c *Checker) getTypeOfVariableOrParameterOrProperty(symbol *ast.Symbol) *Ty // to preserve this type. In fact, we need to _prefer_ that type, but it won't // be assigned until contextual typing is complete, so we need to defer in // cases where contextual typing may take place. - if assigned := links.resolvedType; assigned != nil { + if assigned := links.resolvedType.get(c); assigned != nil { return assigned } if !c.isParameterOfContextSensitiveSignature(symbol) { - links.resolvedType = t + links.resolvedType.set(c, t) } return t } - return links.resolvedType + return links.resolvedType.get(c) } func (c *Checker) isParameterOfContextSensitiveSignature(symbol *ast.Symbol) bool { @@ -17318,13 +17518,18 @@ func (c *Checker) getTypeOfVariableOrParameterOrPropertyWorker(symbol *ast.Symbo if !c.pushTypeResolution(symbol, TypeSystemPropertyNameType) { return c.reportCircularityError(symbol) } + var result *Type if symbol.Flags()&ast.SymbolFlagsModuleExports != 0 { if symbol.Name() == "exports" { - return c.getTypeOfSymbol(c.resolveExternalModuleSymbol(symbol.ValueDeclaration().Symbol(), false /*dontResolveAlias*/)) + result = c.getTypeOfSymbol(c.resolveExternalModuleSymbol(symbol.ValueDeclaration().Symbol(), false /*dontResolveAlias*/)) + } else { + result = c.newAnonymousType(symbol, symbol.Members(), nil, nil, nil) + } + if !c.popTypeResolution() { + return c.reportCircularityError(symbol) } - return c.newAnonymousType(symbol, symbol.Members(), nil, nil, nil) + return result } - var result *Type switch declaration.Kind { case ast.KindParameter, ast.KindPropertyDeclaration, ast.KindPropertySignature, ast.KindVariableDeclaration, ast.KindBindingElement: @@ -17563,11 +17768,11 @@ func (c *Checker) padObjectLiteralType(t *Type, pattern *ast.Node) *Type { name := c.getPropertyNameFromBindingElement(e) propType := c.getTypeFromBindingElement(e, false /*includePatternInType*/, true /*reportErrors*/) key := symbolWithTypeKey{name: name, t: propType} - symbol := c.paddedProperties[key] + symbol, _ := c.paddedProperties.get(c, key) if symbol == nil { symbol = c.newSymbol(ast.SymbolFlagsProperty|ast.SymbolFlagsOptional, name) - c.valueSymbolLinks.Get(symbol).resolvedType = propType - c.paddedProperties[key] = symbol + c.valueSymbolLinks.Get(symbol).resolvedType.set(c, propType) + c.paddedProperties.intern(key, symbol) } members.Set(symbol.Name(), symbol) } @@ -17635,8 +17840,8 @@ func (c *Checker) getWidenedLiteralTypeForInitializer(declaration *ast.Node, t * func (c *Checker) getTypeOfFuncClassEnumModule(symbol *ast.Symbol) *Type { links := c.valueSymbolLinks.Get(symbol) - if links.resolvedType == nil { - links.resolvedType = c.getTypeOfFuncClassEnumModuleWorker(symbol) + if links.resolvedType.get(c) == nil { + links.resolvedType.set(c, c.getTypeOfFuncClassEnumModuleWorker(symbol)) } if declaration := symbol.ValueDeclaration(); declaration != nil && c.isContextSensitiveFunctionOrObjectLiteralMethod(declaration) { // Complete the signature before anything resolves the members of the @@ -17644,7 +17849,7 @@ func (c *Checker) getTypeOfFuncClassEnumModule(symbol *ast.Symbol) *Type { // members of the type. c.assignContextualParameterTypesOfFunction(declaration, CheckModeNormal) } - return links.resolvedType + return links.resolvedType.get(c) } func (c *Checker) getTypeOfFuncClassEnumModuleWorker(symbol *ast.Symbol) *Type { @@ -17693,14 +17898,24 @@ func (c *Checker) getBaseTypeVariableOfClass(symbol *ast.Symbol) *Type { * * an object type with at least one construct signature. */ func (c *Checker) getBaseConstructorTypeOfClass(t *Type) *Type { + if c.memoActive() { + t.AsInterfaceType().resolvedBaseConstructorType.begin(c) + result := c.getBaseConstructorTypeOfClassUncached(t) + c.endMemo() + return result + } + return c.getBaseConstructorTypeOfClassUncached(t) +} + +func (c *Checker) getBaseConstructorTypeOfClassUncached(t *Type) *Type { data := t.AsInterfaceType() - if data.resolvedBaseConstructorType != nil { - return data.resolvedBaseConstructorType + if data.resolvedBaseConstructorType.get(c) != nil { + return data.resolvedBaseConstructorType.get(c) } baseTypeNode := getBaseTypeNodeOfClass(t) if baseTypeNode == nil { - data.resolvedBaseConstructorType = c.undefinedType - return data.resolvedBaseConstructorType + data.resolvedBaseConstructorType.set(c, c.undefinedType) + return data.resolvedBaseConstructorType.get(c) } if !c.pushTypeResolution(t, TypeSystemPropertyNameResolvedBaseConstructorType) { return c.errorType @@ -17713,10 +17928,10 @@ func (c *Checker) getBaseConstructorTypeOfClass(t *Type) *Type { } if !c.popTypeResolution() { c.error(t.symbol.ValueDeclaration(), diagnostics.X_0_is_referenced_directly_or_indirectly_in_its_own_base_expression, c.symbolToString(t.symbol)) - if data.resolvedBaseConstructorType == nil { - data.resolvedBaseConstructorType = c.errorType + if data.resolvedBaseConstructorType.get(c) == nil { + data.resolvedBaseConstructorType.set(c, c.errorType) } - return data.resolvedBaseConstructorType + return data.resolvedBaseConstructorType.get(c) } if baseConstructorType.flags&TypeFlagsAny == 0 && baseConstructorType != c.nullWideningType && !c.isConstructorType(baseConstructorType) { err := c.error(baseTypeNode.Expression(), diagnostics.Type_0_is_not_a_constructor_function_type, c.TypeToString(baseConstructorType)) @@ -17733,15 +17948,15 @@ func (c *Checker) getBaseConstructorTypeOfClass(t *Type) *Type { err.AddRelatedInfo(createDiagnosticForNode(baseConstructorType.symbol.Declarations()[0], diagnostics.Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1, c.symbolToString(baseConstructorType.symbol), c.TypeToString(ctorReturn))) } } - if data.resolvedBaseConstructorType == nil { - data.resolvedBaseConstructorType = c.errorType + if data.resolvedBaseConstructorType.get(c) == nil { + data.resolvedBaseConstructorType.set(c, c.errorType) } - return data.resolvedBaseConstructorType + return data.resolvedBaseConstructorType.get(c) } - if data.resolvedBaseConstructorType == nil { - data.resolvedBaseConstructorType = baseConstructorType + if data.resolvedBaseConstructorType.get(c) == nil { + data.resolvedBaseConstructorType.set(c, baseConstructorType) } - return data.resolvedBaseConstructorType + return data.resolvedBaseConstructorType.get(c) } func (c *Checker) isFunctionType(t *Type) bool { @@ -17795,6 +18010,13 @@ func (c *Checker) getConstraintOfType(t *Type) *Type { } func (c *Checker) getConstraintOfTypeParameter(typeParameter *Type) *Type { + c.beginMemo(memoKeyOf(typeParameter, memoTypeParameterConstraint)) + result := c.getConstraintOfTypeParameterUncached(typeParameter) + c.endMemo() + return result +} + +func (c *Checker) getConstraintOfTypeParameterUncached(typeParameter *Type) *Type { if c.hasNonCircularBaseConstraint(typeParameter) { return c.getConstraintFromTypeParameter(typeParameter) } @@ -17812,7 +18034,7 @@ func (c *Checker) getConstraintFromTypeParameter(t *Type) *Type { } tp := t.AsTypeParameter() - if tp.constraint == nil { + if tp.constraint.get(c) == nil { var constraint *Type if tp.target != nil { constraint = c.instantiateType(c.getConstraintOfTypeParameter(tp.target), tp.mapper) @@ -17836,10 +18058,10 @@ func (c *Checker) getConstraintFromTypeParameter(t *Type) *Type { if constraint == nil { constraint = c.noConstraintType } - tp.constraint = constraint + tp.constraint.set(c, constraint) } - if tp.constraint != c.noConstraintType { - return tp.constraint + if tp.constraint.get(c) != c.noConstraintType { + return tp.constraint.get(c) } return nil } @@ -18033,7 +18255,7 @@ func (c *Checker) getConstraintOfDistributiveConditionalType(t *Type) *Type { // Please note: the distributive constraint is a kludge for emulating what a negated type could to do filter // a union - once negated types exist and are applied to the conditional false branch, this "constraint" // likely doesn't need to exist. - if d.root.isDistributive && c.cachedTypes[CachedTypeKey{kind: CachedTypeKindRestrictiveInstantiation, typeId: t.id}] != t { + if d.root.isDistributive && !c.isRestrictiveInstantiation(t) { constraint := c.getSimplifiedType(d.checkType, false /*writing*/) if constraint == d.checkType { constraint = c.getConstraintOfType(constraint) @@ -18056,10 +18278,10 @@ func (c *Checker) getConstraintOfDistributiveConditionalType(t *Type) *Type { func (c *Checker) getDeclaredTypeOfClassOrInterface(symbol *ast.Symbol) *Type { links := c.declaredTypeLinks.Get(symbol) - if links.declaredType == nil { + if links.declaredType.get(c) == nil { kind := core.IfElse(symbol.Flags()&ast.SymbolFlagsClass != 0, ObjectFlagsClass, ObjectFlagsInterface) t := c.newObjectType(kind, symbol) - links.declaredType = t + links.declaredType.set(c, t) outerTypeParameters := c.getOuterTypeParametersOfClassOrInterface(symbol) typeParameters := c.appendLocalTypeParametersOfClassOrInterfaceOrTypeAlias(outerTypeParameters, symbol) // A class or interface is generic if it has type parameters or a "this" type. We always give classes a "this" type @@ -18072,7 +18294,7 @@ func (c *Checker) getDeclaredTypeOfClassOrInterface(symbol *ast.Symbol) *Type { d := t.AsInterfaceType() d.thisType = c.newTypeParameter(symbol) d.thisType.AsTypeParameter().isThisType = true - d.thisType.AsTypeParameter().constraint = t + d.thisType.AsTypeParameter().constraint.intern(t) d.allTypeParameters = append(typeParameters, d.thisType) d.outerTypeParameterCount = len(outerTypeParameters) d.resolvedTypeArguments = d.TypeParameters() @@ -18081,7 +18303,7 @@ func (c *Checker) getDeclaredTypeOfClassOrInterface(symbol *ast.Symbol) *Type { d.target = t } } - return links.declaredType + return links.declaredType.get(c) } /** @@ -18209,7 +18431,7 @@ func (b *keyBuilder) writeAlias(alias *TypeAlias) { } } -func (b *keyBuilder) writeGenericTypeReferences(source *Type, target *Type, ignoreConstraints bool) bool { +func (b *keyBuilder) writeGenericTypeReferences(c *Checker, source *Type, target *Type, ignoreConstraints bool) bool { var constrained bool typeParameters := make([]*Type, 0, 8) var writeTypeReference func(*Type, int) @@ -18217,7 +18439,7 @@ func (b *keyBuilder) writeGenericTypeReferences(source *Type, target *Type, igno b.writeType(ref.Target()) for _, t := range ref.AsTypeReference().resolvedTypeArguments { if t.flags&TypeFlagsTypeParameter != 0 { - if ignoreConstraints || t.checker.getConstraintOfTypeParameter(t) == nil { + if ignoreConstraints || c.getConstraintOfTypeParameter(t) == nil { index := slices.Index(typeParameters, t) if index < 0 { index = len(typeParameters) @@ -18228,7 +18450,7 @@ func (b *keyBuilder) writeGenericTypeReferences(source *Type, target *Type, igno continue } constrained = true - } else if depth < 4 && isTypeReferenceWithGenericArguments(t) { + } else if depth < 4 && c.isTypeReferenceWithGenericArguments(t) { b.writeByte('<') writeTypeReference(t, depth+1) b.writeByte('>') @@ -18283,7 +18505,7 @@ func (c *Checker) getObjectLiteralTypeKey(node *ast.Node, flags ObjectFlags, pro } else { b.writeByte(0) } - b.writeType(links.resolvedType) + b.writeType(links.resolvedType.peek()) } b.writeInt(len(indexInfos)) for _, info := range indexInfos { @@ -18419,15 +18641,15 @@ func getConditionalTypeKey(typeArguments []*Type, alias *TypeAlias, forConstrain return b.hash() } -func getRelationKey(source *Type, target *Type, intersectionState IntersectionState, isIdentity bool, ignoreConstraints bool) (CacheHashKey, bool) { +func (c *Checker) getRelationKey(source *Type, target *Type, intersectionState IntersectionState, isIdentity bool, ignoreConstraints bool) (CacheHashKey, bool) { if isIdentity && source.id > target.id { source, target = target, source } var b keyBuilder var constrained bool - if isTypeReferenceWithGenericArguments(source) && isTypeReferenceWithGenericArguments(target) { + if c.isTypeReferenceWithGenericArguments(source) && c.isTypeReferenceWithGenericArguments(target) { b.writeByte('g') - constrained = b.writeGenericTypeReferences(source, target, ignoreConstraints) + constrained = b.writeGenericTypeReferences(c, source, target, ignoreConstraints) } else { b.writeByte('s') b.writeType(source) @@ -18446,9 +18668,9 @@ func getNodeListKey(nodes []*ast.Node) CacheHashKey { return b.hash() } -func isTypeReferenceWithGenericArguments(t *Type) bool { - return isNonDeferredTypeReference(t) && core.Some(t.checker.getTypeArguments(t), func(t *Type) bool { - return t.flags&TypeFlagsTypeParameter != 0 || isTypeReferenceWithGenericArguments(t) +func (c *Checker) isTypeReferenceWithGenericArguments(t *Type) bool { + return isNonDeferredTypeReference(t) && core.Some(c.getTypeArguments(t), func(t *Type) bool { + return t.flags&TypeFlagsTypeParameter != 0 || c.isTypeReferenceWithGenericArguments(t) }) } @@ -18749,7 +18971,7 @@ func (c *Checker) getTypeFromObjectBindingPattern(pattern *ast.Node, includePatt text := getPropertyNameFromType(exprType) flags := ast.SymbolFlagsProperty | core.IfElse(e.Initializer() != nil, ast.SymbolFlagsOptional, 0) symbol := c.newSymbol(flags, text) - c.valueSymbolLinks.Get(symbol).resolvedType = c.getTypeFromBindingElement(e, includePatternInType, reportErrors) + c.valueSymbolLinks.Get(symbol).resolvedType.set(c, c.getTypeFromBindingElement(e, includePatternInType, reportErrors)) members.Set(symbol.Name(), symbol) } var indexInfos []*IndexInfo @@ -18772,19 +18994,19 @@ func (c *Checker) getTypeFromObjectBindingPattern(pattern *ast.Node, includePatt b.writeString(name) b.writeByte(0) b.writeUint32(uint32(members.Get(name).Flags())) - b.writeType(c.valueSymbolLinks.Get(members.Get(name)).resolvedType) + b.writeType(c.valueSymbolLinks.Get(members.Get(name)).resolvedType.peek()) } key := b.hash() - if existing := c.bindingPatternTypes[key]; existing != nil { + if existing, _ := c.bindingPatternTypes.get(c, key); existing != nil { return existing } result := c.newAnonymousType(nil, members, nil, nil, indexInfos) result.objectFlags |= objectFlags if includePatternInType { - c.patternForType[result] = pattern + c.patternForType.intern(result, pattern) result.objectFlags |= ObjectFlagsContainsObjectOrArrayLiteral } - c.bindingPatternTypes[key] = result + c.bindingPatternTypes.intern(key, result) return result } @@ -18832,13 +19054,13 @@ func (c *Checker) getTypeFromArrayBindingPattern(pattern *ast.Node, includePatte b.writeNode(pattern) b.writeType(result) key := b.hash() - if existing := c.bindingPatternTypes[key]; existing != nil { + if existing, _ := c.bindingPatternTypes.get(c, key); existing != nil { return existing } result = c.cloneTypeReference(result) - c.patternForType[result] = pattern + c.patternForType.intern(result, pattern) result.objectFlags |= ObjectFlagsContainsObjectOrArrayLiteral - c.bindingPatternTypes[key] = result + c.bindingPatternTypes.intern(key, result) } return result } @@ -19031,16 +19253,17 @@ func (c *Checker) getTypeFromPropertyDescriptor(node *ast.Node) *Type { // A property is considered a constructor declared property when all declaration sites are this.xxx assignments, // when no declaration sites have JSDoc type annotations, and when at least one declaration site is in the body of // a class constructor. +type thisExpando struct { + kind thisAssignmentDeclarationKind + location *ast.Node +} + func (c *Checker) isConstructorDeclaredThisProperty(symbol *ast.Symbol) (thisAssignmentDeclarationKind, *ast.Node) { if symbol.ValueDeclaration() == nil || !ast.IsBinaryExpression(symbol.ValueDeclaration()) { return thisAssignmentDeclarationNone, nil } - if kind, ok := c.thisExpandoKinds[symbol]; ok { - location, ok2 := c.thisExpandoLocations[symbol] - if !ok2 { - panic("location should be cached whenever this expando symbol is cached") - } - return kind, location + if cached, ok := c.thisExpandos.get(c, symbol); ok { + return cached.kind, cached.location } allThis := true var typeAnnotation *ast.Node @@ -19071,8 +19294,7 @@ func (c *Checker) isConstructorDeclaredThisProperty(symbol *ast.Symbol) (thisAss kind = core.IfElse(location == nil, thisAssignmentDeclarationMethod, thisAssignmentDeclarationConstructor) } } - c.thisExpandoKinds[symbol] = kind - c.thisExpandoLocations[symbol] = location + c.thisExpandos.intern(symbol, thisExpando{kind, location}) return kind, location } @@ -19206,9 +19428,12 @@ func (c *Checker) getWidenedType(t *Type) *Type { func (c *Checker) getWidenedTypeWithContext(t *Type, context *WideningContext) *Type { if t.objectFlags&ObjectFlagsRequiresWidening != 0 { if context == nil { - if cached := c.cachedTypes[CachedTypeKey{kind: CachedTypeKindWidened, typeId: t.id}]; cached != nil { + key := CachedTypeKey{kind: CachedTypeKindWidened, typeId: t.id} + if cached, _ := c.cachedTypes.get(c, key); cached != nil { return cached } + c.cachedTypes.begin(c, key) + defer c.endMemo() } var result *Type switch { @@ -19237,7 +19462,7 @@ func (c *Checker) getWidenedTypeWithContext(t *Type, context *WideningContext) * result = c.createTypeReference(t.Target(), core.SameMap(c.getTypeArguments(t), c.getWidenedType)) } if result != nil && context == nil { - c.cachedTypes[CachedTypeKey{kind: CachedTypeKindWidened, typeId: t.id}] = result + c.cachedTypes.set(c, CachedTypeKey{kind: CachedTypeKindWidened, typeId: t.id}, result) } return core.OrElse(result, t) } @@ -19343,26 +19568,35 @@ func (c *Checker) getSiblingsOfContext(context *WideningContext) []*Type { } func (c *Checker) getUndefinedProperty(prop *ast.Symbol) *ast.Symbol { - if cached := c.undefinedProperties[prop]; cached != nil { + if cached, _ := c.undefinedProperties.get(c, prop); cached != nil { return cached } + c.undefinedProperties.begin(c, prop) result := c.createSymbolWithType(prop, c.undefinedOrMissingType) result.SetFlags(result.Flags() | ast.SymbolFlagsOptional) - c.undefinedProperties[prop] = result + c.undefinedProperties.set(c, prop, result) + c.endMemo() return result } func (c *Checker) getTypeOfEnumMember(symbol *ast.Symbol) *Type { links := c.valueSymbolLinks.Get(symbol) - if links.resolvedType == nil { - links.resolvedType = c.getDeclaredTypeOfEnumMember(symbol) + if links.resolvedType.get(c) == nil { + links.resolvedType.set(c, c.getDeclaredTypeOfEnumMember(symbol)) } - return links.resolvedType + return links.resolvedType.get(c) } func (c *Checker) getTypeOfAccessors(symbol *ast.Symbol) *Type { + c.beginMemo(memoKeyOf(symbol, memoAccessorType)) + result := c.getTypeOfAccessorsUncached(symbol) + c.endMemo() + return result +} + +func (c *Checker) getTypeOfAccessorsUncached(symbol *ast.Symbol) *Type { links := c.valueSymbolLinks.Get(symbol) - if links.resolvedType == nil { + if links.resolvedType.get(c) == nil { if !c.pushTypeResolution(symbol, TypeSystemPropertyNameType) { return c.errorType } @@ -19408,16 +19642,16 @@ func (c *Checker) getTypeOfAccessors(symbol *ast.Symbol) *Type { } t = c.anyType } - if links.resolvedType == nil { - links.resolvedType = t + if links.resolvedType.get(c) == nil { + links.resolvedType.set(c, t) } } - return links.resolvedType + return links.resolvedType.get(c) } func (c *Checker) getWriteTypeOfAccessors(symbol *ast.Symbol) *Type { links := c.valueSymbolLinks.Get(symbol) - if links.getWriteType() == nil { + if links.getWriteType(c) == nil { if !c.pushTypeResolution(symbol, TypeSystemPropertyNameWriteType) { return c.errorType } @@ -19436,7 +19670,7 @@ func (c *Checker) getWriteTypeOfAccessors(symbol *ast.Symbol) *Type { writeType = c.anyType } // Absent an explicit setter type annotation we use the read type of the accessor. - if links.getWriteType() == nil { + if links.getWriteType(c) == nil { if writeType != nil { links.setWriteType(c, writeType) } else { @@ -19444,12 +19678,12 @@ func (c *Checker) getWriteTypeOfAccessors(symbol *ast.Symbol) *Type { } } } - return links.getWriteType() + return links.getWriteType(c) } func (c *Checker) getTypeOfAlias(symbol *ast.Symbol) *Type { links := c.valueSymbolLinks.Get(symbol) - if links.resolvedType == nil { + if links.resolvedType.get(c) == nil { if !c.pushTypeResolution(symbol, TypeSystemPropertyNameType) { return c.errorType } @@ -19460,22 +19694,22 @@ func (c *Checker) getTypeOfAlias(symbol *ast.Symbol) *Type { // type symbol, call getDeclaredTypeOfSymbol. // This check is important because without it, a call to getTypeOfSymbol could end // up recursively calling getTypeOfAlias, causing a stack overflow. - if links.resolvedType == nil { + if links.resolvedType.get(c) == nil { if c.getSymbolFlags(targetSymbol)&ast.SymbolFlagsValue != 0 { - links.resolvedType = c.getTypeOfSymbol(targetSymbol) + links.resolvedType.set(c, c.getTypeOfSymbol(targetSymbol)) } else { - links.resolvedType = c.errorType + links.resolvedType.set(c, c.errorType) } } if !c.popTypeResolution() { c.reportCircularityError(core.OrElse(exportSymbol, symbol)) - if links.resolvedType == nil { - links.resolvedType = c.errorType + if links.resolvedType.get(c) == nil { + links.resolvedType.set(c, c.errorType) } - return links.resolvedType + return links.resolvedType.get(c) } } - return links.resolvedType + return links.resolvedType.get(c) } func (c *Checker) addOptionality(t *Type) *Type { @@ -19611,12 +19845,17 @@ func (c *Checker) pushTypeResolution(target TypeSystemEntity, propertyName TypeS resolutionCycleStartIndex := c.findResolutionCycleStartIndex(target, propertyName) if resolutionCycleStartIndex >= 0 { // A cycle was found - for i := resolutionCycleStartIndex; i < len(c.typeResolutions); i++ { - c.typeResolutions[i].result = false + for i := resolutionCycleStartIndex; i < len(c.resolutions); i++ { + if c.resolutions[i].isTypeResolution { + c.resolutions[i].typeResolution.result = false + } + } + if !c.checking { + c.memoCycle(int(c.resolutions[resolutionCycleStartIndex].prevMemo)) } return false } - c.typeResolutions = append(c.typeResolutions, TypeResolution{target: target, propertyName: propertyName, result: true}) + c.beginTypeResolution(target, propertyName) return true } @@ -19625,17 +19864,47 @@ func (c *Checker) pushTypeResolution(target TypeSystemEntity, propertyName TypeS * be true if no circularities were detected, or false if a circularity was found. */ func (c *Checker) popTypeResolution() bool { - lastIndex := len(c.typeResolutions) - 1 - result := c.typeResolutions[lastIndex].result - c.typeResolutions[lastIndex] = TypeResolution{} // Clear the last entry to avoid memory leaks - c.typeResolutions = c.typeResolutions[:lastIndex] + n := len(c.resolutions) - 1 + debug.Assert(c.typeResolutionTop == n+1, "resolutions left above a type resolution") + f := &c.resolutions[n] + result := f.typeResolution.result + c.typeResolutionTop = int(f.prevTypeResolution) + c.resolutions[n] = resolution{} + c.resolutions = c.resolutions[:n] return result } +// beginTypeResolution starts the resolution of propertyName for target, which +// re-entering detects as a cycle. +func (c *Checker) beginTypeResolution(target TypeSystemEntity, propertyName TypeSystemPropertyName) { + f := resolution{ + prevMemo: int32(c.memoTop), + isTypeResolution: true, + prevTypeResolution: int32(c.typeResolutionTop), + typeResolution: TypeResolution{target: target, propertyName: propertyName, result: true}, + } + c.resolutions = append(c.resolutions, f) + c.typeResolutionTop = len(c.resolutions) +} + +// topTypeResolution returns the innermost resolution, which must be the +// innermost resolution. +func (c *Checker) topTypeResolution() *TypeResolution { + debug.Assert(c.typeResolutionTop == len(c.resolutions), "resolutions left above a type resolution") + return &c.resolutions[len(c.resolutions)-1].typeResolution +} + func (c *Checker) findResolutionCycleStartIndex(target TypeSystemEntity, propertyName TypeSystemPropertyName) int { - for i := len(c.typeResolutions) - 1; i >= c.resolutionStart; i-- { - resolution := &c.typeResolutions[i] + for i := c.typeResolutionTop - 1; i >= c.resolutionStart; i = int(c.resolutions[i].prevTypeResolution) - 1 { + resolution := &c.resolutions[i].typeResolution if c.typeResolutionHasProperty(resolution) { + // Only now does the search depend on the result, which was set + // before its computation finished. + if c.memoActive() { + if p := c.typeResolutionMemo(resolution); p != nil { + c.observeCell(p) + } + } return -1 } if resolution.target == target && resolution.propertyName == propertyName { @@ -19645,30 +19914,34 @@ func (c *Checker) findResolutionCycleStartIndex(target TypeSystemEntity, propert return -1 } +// typeResolutionHasProperty reports whether a resolution on the stack already +// has a result. Its computation is in progress, so the result is read without +// observing it; see findResolutionCycleStartIndex. func (c *Checker) typeResolutionHasProperty(r *TypeResolution) bool { switch r.propertyName { case TypeSystemPropertyNameType: - return c.valueSymbolLinks.Get(r.target.(*ast.Symbol)).resolvedType != nil + return c.valueSymbolLinks.Get(r.target.(*ast.Symbol)).resolvedType.peek() != nil case TypeSystemPropertyNameDeclaredType: - return c.typeAliasLinks.Get(r.target.(*ast.Symbol)).declaredType != nil + return c.typeAliasLinks.Get(r.target.(*ast.Symbol)).declaredType.peek() != nil case TypeSystemPropertyNameResolvedTypeArguments: return r.target.(*Type).AsTypeReference().resolvedTypeArguments != nil case TypeSystemPropertyNameResolvedBaseTypes: return r.target.(*Type).AsInterfaceType().baseTypesResolved case TypeSystemPropertyNameResolvedBaseConstructorType: - return r.target.(*Type).AsInterfaceType().resolvedBaseConstructorType != nil + return r.target.(*Type).AsInterfaceType().resolvedBaseConstructorType.peek() != nil case TypeSystemPropertyNameResolvedReturnType: - return r.target.(*Signature).resolvedReturnType != nil + return r.target.(*Signature).resolvedReturnType.peek() != nil case TypeSystemPropertyNameResolvedBaseConstraint: - return r.target.(*Type).AsConstrainedType().resolvedBaseConstraint != nil + return r.target.(*Type).AsConstrainedType().resolvedBaseConstraint.peek() != nil case TypeSystemPropertyNameInitializerIsUndefined: return c.nodeLinks.Get(r.target.(*ast.Node)).flags&NodeCheckFlagsInitializerIsUndefinedComputed != 0 case TypeSystemPropertyNameWriteType: - return c.valueSymbolLinks.Get(r.target.(*ast.Symbol)).getWriteType() != nil + extra := c.valueSymbolLinks.Get(r.target.(*ast.Symbol)).extra + return extra != nil && extra.writeType.peek() != nil case TypeSystemPropertyNameAliasTarget: - return c.aliasSymbolLinks.Get(r.target.(*ast.Symbol)).aliasTarget != nil + return c.aliasSymbolLinks.Get(r.target.(*ast.Symbol)).aliasTarget.peek() != nil case TypeSystemPropertyNameComputedPropertyName: - return c.typeNodeLinks.Get(r.target.(*ast.Node)).resolvedType != nil + return c.typeNodeLinks.Get(r.target.(*ast.Node)).resolvedType.peek() != nil } panic("Unhandled case in typeResolutionHasProperty") } @@ -19981,6 +20254,13 @@ func (c *Checker) isApplicableIndexType(source *Type, target *Type) bool { } func (c *Checker) resolveStructuredTypeMembers(t *Type) *StructuredType { + c.beginMemo(memoKeyOf(t, memoStructuredMembers)) + result := c.resolveStructuredTypeMembersUncached(t) + c.endMemo() + return result +} + +func (c *Checker) resolveStructuredTypeMembersUncached(t *Type) *StructuredType { if t.objectFlags&ObjectFlagsMembersResolved == 0 { switch { case t.flags&TypeFlagsObject != 0: @@ -20194,17 +20474,36 @@ func findIndexInfo(indexInfos []*IndexInfo, keyType *Type) *IndexInfo { } func (c *Checker) getBaseTypes(t *Type) []*Type { + if t.objectFlags&(ObjectFlagsClassOrInterface|ObjectFlagsTuple) == 0 { + return nil + } + if data := t.AsInterfaceType(); data.baseTypesResolved { + // Observing the result is what re-entering its computation amounts + // to, without the resolution. Walks over base types such as + // hasBaseType revisit shared bases many times. + if c.memoActive() { + c.observeMemo(memoKeyOf(t, memoBaseTypes)) + } + return data.resolvedBaseTypes.get(c) + } + c.beginMemo(memoKeyOf(t, memoBaseTypes)) + result := c.getBaseTypesUncached(t) + c.endMemo() + return result +} + +func (c *Checker) getBaseTypesUncached(t *Type) []*Type { if t.objectFlags&(ObjectFlagsClassOrInterface|ObjectFlagsTuple) == 0 { return nil } data := t.AsInterfaceType() if !data.baseTypesResolved { if !c.pushTypeResolution(t, TypeSystemPropertyNameResolvedBaseTypes) { - return data.resolvedBaseTypes + return data.resolvedBaseTypes.get(c) } switch { case t.objectFlags&ObjectFlagsTuple != 0: - data.resolvedBaseTypes = []*Type{c.getTupleBaseType(t)} + data.resolvedBaseTypes.set(c, []*Type{c.getTupleBaseType(t)}) case t.symbol.Flags()&(ast.SymbolFlagsClass|ast.SymbolFlagsInterface) != 0: if t.symbol.Flags()&ast.SymbolFlagsClass != 0 { c.resolveBaseTypesOfClass(t) @@ -20229,7 +20528,7 @@ func (c *Checker) getBaseTypes(t *Type) []*Type { t.objectFlags &^= ObjectFlagsMembersResolved data.baseTypesResolved = true } - return data.resolvedBaseTypes + return data.resolvedBaseTypes.get(c) } func (c *Checker) getTupleBaseType(t *Type) *Type { @@ -20290,7 +20589,7 @@ func (c *Checker) resolveBaseTypesOfClass(t *Type) { c.error(t.symbol.ValueDeclaration(), diagnostics.Type_0_recursively_references_itself_as_a_base_type, c.TypeToString(t)) return } - t.AsInterfaceType().resolvedBaseTypes = []*Type{reducedBaseType} + t.AsInterfaceType().resolvedBaseTypes.set(c, []*Type{reducedBaseType}) } func getBaseTypeNodeOfClass(t *Type) *ast.Node { @@ -20329,7 +20628,7 @@ func (c *Checker) getSignatureInstantiation(sig *Signature, typeArguments []*Typ newReturnType := c.getOrCreateTypeFromSignature(newReturnSignature) newReturnType.AsObjectType().mapper = instantiatedSignature.mapper newInstantiatedSignature := c.cloneSignature(instantiatedSignature) - newInstantiatedSignature.resolvedReturnType = newReturnType + newInstantiatedSignature.resolvedReturnType.intern(newReturnType) return newInstantiatedSignature } } @@ -20346,10 +20645,12 @@ func (c *Checker) cloneSignature(sig *Signature) *Signature { func (c *Checker) getSignatureInstantiationWithoutFillingInTypeArguments(sig *Signature, typeArguments []*Type) *Signature { key := CachedSignatureKey{sig: sig, key: getTypeListKey(typeArguments)} - instantiation := c.cachedSignatures[key] + instantiation, _ := c.cachedSignatures.get(c, key) if instantiation == nil { + c.cachedSignatures.begin(c, key) instantiation = c.createSignatureInstantiation(sig, typeArguments) - c.cachedSignatures[key] = instantiation + c.cachedSignatures.set(c, key, instantiation) + c.endMemo() } return instantiation } @@ -20427,10 +20728,12 @@ func (c *Checker) getErasedSignature(signature *Signature) *Signature { return signature } key := CachedSignatureKey{sig: signature, key: SignatureKeyErased} - erased := c.cachedSignatures[key] + erased, _ := c.cachedSignatures.get(c, key) if erased == nil { + c.cachedSignatures.begin(c, key) erased = c.instantiateSignatureEx(signature, newArrayToSingleTypeMapper(signature.TypeParameters(), c.anyType), true /*eraseTypeParameters*/) - c.cachedSignatures[key] = erased + c.cachedSignatures.set(c, key, erased) + c.endMemo() } return erased } @@ -20440,10 +20743,12 @@ func (c *Checker) getCanonicalSignature(signature *Signature) *Signature { return signature } key := CachedSignatureKey{sig: signature, key: SignatureKeyCanonical} - canonical := c.cachedSignatures[key] + canonical, _ := c.cachedSignatures.get(c, key) if canonical == nil { + c.cachedSignatures.begin(c, key) canonical = c.createCanonicalSignature(signature) - c.cachedSignatures[key] = canonical + c.cachedSignatures.set(c, key, canonical) + c.endMemo() } return canonical } @@ -20470,9 +20775,10 @@ func (c *Checker) getBaseSignature(signature *Signature) *Signature { return signature } key := CachedSignatureKey{sig: signature, key: SignatureKeyBase} - if cached := c.cachedSignatures[key]; cached != nil { + if cached, _ := c.cachedSignatures.get(c, key); cached != nil { return cached } + c.cachedSignatures.begin(c, key) baseConstraintMapper := newTypeMapper(typeParameters, core.Map(typeParameters, func(tp *Type) *Type { return core.OrElse(c.getConstraintOfTypeParameter(tp), c.unknownType) })) @@ -20487,7 +20793,8 @@ func (c *Checker) getBaseSignature(signature *Signature) *Signature { // and then apply a type eraser to remove any remaining circularly dependent type parameters baseConstraints = c.instantiateTypes(baseConstraints, newArrayToSingleTypeMapper(typeParameters, c.anyType)) result := c.instantiateSignatureEx(signature, newTypeMapper(typeParameters, baseConstraints), true /*eraseTypeParameters*/) - c.cachedSignatures[key] = result + c.cachedSignatures.set(c, key, result) + c.endMemo() return result } @@ -20533,7 +20840,7 @@ func (c *Checker) resolveBaseTypesOfInterface(t *Type) { if !c.isErrorType(baseType) { if c.isValidBaseType(baseType) { if t != baseType && !c.hasBaseType(baseType, t) { - data.resolvedBaseTypes = append(data.resolvedBaseTypes, baseType) + data.resolvedBaseTypes.set(c, append(data.resolvedBaseTypes.get(c), baseType)) } else { c.reportCircularBaseType(declaration, t) } @@ -20883,8 +21190,8 @@ func (c *Checker) getSignatureFromDeclaration(declaration *ast.Node) *Signature // of context-sensitive functions. func (c *Checker) getSignatureFromDeclarationUncontextual(declaration *ast.Node) *Signature { links := c.signatureLinks.Get(declaration) - if links.resolvedSignature != nil { - return links.resolvedSignature + if links.resolvedSignature.get(c) != nil { + return links.resolvedSignature.get(c) } var parameters []*ast.Symbol var flags SignatureFlags @@ -20953,14 +21260,14 @@ func (c *Checker) getSignatureFromDeclarationUncontextual(declaration *ast.Node) if ast.IsConstructorTypeNode(declaration) && ast.HasSyntacticModifier(declaration, ast.ModifierFlagsAbstract) || ast.IsConstructorDeclaration(declaration) && ast.HasSyntacticModifier(declaration.Parent, ast.ModifierFlagsAbstract) { flags |= SignatureFlagsAbstract } - if links.resolvedSignature != nil { + if existing := links.resolvedSignature.get(c); existing != nil { // Computing the signature reached the enclosing call, which // contextually typed the function with a signature of its own, as // when the call is checked first. Keep that one. - return links.resolvedSignature + return existing } - links.resolvedSignature = c.newSignature(flags, declaration, typeParameters, thisParameter, parameters, nil /*resolvedReturnType*/, nil /*resolvedTypePredicate*/, minArgumentCount) - return links.resolvedSignature + links.resolvedSignature.set(c, c.newSignature(flags, declaration, typeParameters, thisParameter, parameters, nil /*resolvedReturnType*/, nil /*resolvedTypePredicate*/, minArgumentCount)) + return links.resolvedSignature.get(c) } func (c *Checker) getTypeParametersFromDeclaration(declaration *ast.Node) []*Type { @@ -21053,8 +21360,21 @@ func isLateBindableAST(node *ast.Node) bool { } func (c *Checker) getReturnTypeOfSignature(sig *Signature) *Type { - if sig.resolvedReturnType != nil { - return sig.resolvedReturnType + if t := sig.resolvedReturnType.get(c); t != nil { + return t + } + if c.memoActive() { + sig.resolvedReturnType.begin(c) + result := c.getReturnTypeOfSignatureUncached(sig) + c.endMemo() + return result + } + return c.getReturnTypeOfSignatureUncached(sig) +} + +func (c *Checker) getReturnTypeOfSignatureUncached(sig *Signature) *Type { + if sig.resolvedReturnType.get(c) != nil { + return sig.resolvedReturnType.get(c) } if !c.pushTypeResolution(sig, TypeSystemPropertyNameResolvedReturnType) { return c.errorType @@ -21096,10 +21416,10 @@ func (c *Checker) getReturnTypeOfSignature(sig *Signature) *Type { } t = c.anyType } - if sig.resolvedReturnType == nil { - sig.resolvedReturnType = t + if sig.resolvedReturnType.get(c) == nil { + sig.resolvedReturnType.set(c, t) } - return sig.resolvedReturnType + return sig.resolvedReturnType.get(c) } func (c *Checker) getNonCircularReturnTypeOfSignature(sig *Signature) *Type { @@ -21823,12 +22143,12 @@ func (c *Checker) instantiateSymbol(symbol *ast.Symbol, m *TypeMapper) *ast.Symb } // If the type of the symbol is already resolved, and if that type could not possibly // be affected by instantiation, simply return the symbol itself. - if links.resolvedType != nil && !c.couldContainTypeVariables(links.resolvedType) { + if links.resolvedType.get(c) != nil && !c.couldContainTypeVariables(links.resolvedType.get(c)) { if symbol.Flags()&ast.SymbolFlagsSetAccessor == 0 { return symbol } // If we're a setter, check writeType. - if links.getWriteType() != nil && !c.couldContainTypeVariables(links.getWriteType()) { + if links.getWriteType(c) != nil && !c.couldContainTypeVariables(links.getWriteType(c)) { return symbol } } @@ -21938,7 +22258,7 @@ func (c *Checker) getDefaultConstructSignatures(classType *Type) []*Signature { sig = c.cloneSignature(baseSig) } sig.setTypeParameters(c, classType.AsInterfaceType().LocalTypeParameters()) - sig.resolvedReturnType = classType + sig.resolvedReturnType.intern(classType) if isAbstract { sig.flags |= SignatureFlagsAbstract } else { @@ -22042,7 +22362,7 @@ func (c *Checker) resolveMappedTypeMembers(t *Type) { func (c *Checker) getTypeOfMappedSymbol(symbol *ast.Symbol) *Type { links := c.valueSymbolLinks.Get(symbol) - if links.resolvedType == nil { + if links.resolvedType.get(c) == nil { mappedType := links.getContainingType() if !c.pushTypeResolution(symbol, TypeSystemPropertyNameType) { mappedType.AsMappedType().containsError = true @@ -22061,17 +22381,17 @@ func (c *Checker) getTypeOfMappedSymbol(symbol *ast.Symbol) *Type { propType = c.removeMissingOrUndefinedType(propType) } if c.popTypeResolution() { - if links.resolvedType == nil { - links.resolvedType = propType + if links.resolvedType.get(c) == nil { + links.resolvedType.set(c, propType) } } else { - if links.resolvedType == nil { - links.resolvedType = c.errorType + if links.resolvedType.get(c) == nil { + links.resolvedType.set(c, c.errorType) } - c.error(c.currentNode, diagnostics.Type_of_property_0_circularly_references_itself_in_mapped_type_1, c.symbolToString(symbol), c.TypeToString(mappedType)) + c.errorAtCurrentNode(diagnostics.Type_of_property_0_circularly_references_itself_in_mapped_type_1, c.symbolToString(symbol), c.TypeToString(mappedType)) } } - return links.resolvedType + return links.resolvedType.get(c) } // Return the lower bound of the key type in a mapped type. Intuitively, the lower @@ -22326,18 +22646,18 @@ func (c *Checker) combineUnionOrIntersectionParameters(left *Signature, right *S core.IfElse(isRestParam, ast.CheckFlagsRestParameter, core.IfElse(isOptional, ast.CheckFlagsOptionalParameter, 0))) links := c.valueSymbolLinks.Get(paramSymbol) if isRestParam { - links.resolvedType = c.createArrayType(combinedParamType) + links.resolvedType.set(c, c.createArrayType(combinedParamType)) } else { - links.resolvedType = combinedParamType + links.resolvedType.set(c, combinedParamType) } params[i] = paramSymbol } if needsExtraRestElement { restParamSymbol := c.newSymbolEx(ast.SymbolFlagsFunctionScopedVariable, "args", ast.CheckFlagsRestParameter) links := c.valueSymbolLinks.Get(restParamSymbol) - links.resolvedType = c.createArrayType(c.getTypeAtPosition(shorter, longestCount)) + links.resolvedType.set(c, c.createArrayType(c.getTypeAtPosition(shorter, longestCount))) if shorter == right { - links.resolvedType = c.instantiateType(links.resolvedType, mapper) + links.resolvedType.set(c, c.instantiateType(links.resolvedType.get(c), mapper)) } params[longestCount] = restParamSymbol } @@ -22377,7 +22697,7 @@ func (c *Checker) resolveIntersectionTypeMembers(t *Type) { if len(signatures) != 0 && mixinCount > 0 { signatures = core.Map(signatures, func(s *Signature) *Signature { clone := c.cloneSignature(s) - clone.resolvedReturnType = c.includeMixinType(c.getReturnTypeOfSignature(s), types, mixinFlags, i) + clone.resolvedReturnType.intern(c.includeMixinType(c.getReturnTypeOfSignature(s), types, mixinFlags, i)) return clone }) } @@ -22652,7 +22972,7 @@ func (c *Checker) createUnionOrIntersectionProperty(containingType *Type, name s var singlePropMapper *TypeMapper if singleProp.Flags()&ast.SymbolFlagsTransient != 0 { links := c.valueSymbolLinks.Get(singleProp) - singlePropType = links.resolvedType + singlePropType = links.resolvedType.get(c) singlePropMapper = links.mapper } clone := c.createSymbolWithType(singleProp, singlePropType) @@ -22728,9 +23048,9 @@ func (c *Checker) createUnionOrIntersectionProperty(containingType *Type, name s return result } if isUnion { - links.resolvedType = c.getUnionType(propTypes) + links.resolvedType.set(c, c.getUnionType(propTypes)) } else { - links.resolvedType = c.getIntersectionType(propTypes) + links.resolvedType.set(c, c.getIntersectionType(propTypes)) } if writeTypes != nil { if isUnion { @@ -22793,11 +23113,11 @@ type symbolWithTypeKey struct { // returning the same copy for the same property and type. func (c *Checker) getSymbolWithType(source *ast.Symbol, t *Type) *ast.Symbol { key := symbolWithTypeKey{source: source, t: t} - if existing := c.symbolsWithType[key]; existing != nil { + if existing, _ := c.symbolsWithType.get(c, key); existing != nil { return existing } result := c.createSymbolWithType(source, t) - c.symbolsWithType[key] = result + c.symbolsWithType.intern(key, result) return result } @@ -22805,11 +23125,11 @@ func (c *Checker) getSymbolWithType(source *ast.Symbol, t *Type) *ast.Symbol { // creates one with the given creation. func (c *Checker) internObjectType(symbol *ast.Symbol, flags ObjectFlags, members ast.SymbolTable, indexInfos []*IndexInfo, create func() *Type) *Type { key := c.getObjectTypeContentKey(symbol, flags&^(ObjectFlagsCouldContainTypeVariablesComputed|ObjectFlagsCouldContainTypeVariables|ObjectFlagsMembersResolved), members, indexInfos) - if existing := c.objectContentTypes[key]; existing != nil { + if existing, _ := c.objectContentTypes.get(c, key); existing != nil { return existing } result := create() - c.objectContentTypes[key] = result + c.objectContentTypes.intern(key, result) return result } @@ -22819,7 +23139,7 @@ func (c *Checker) createSymbolWithType(source *ast.Symbol, t *Type) *ast.Symbol symbol.SetParent(source.Parent()) symbol.SetValueDeclaration(source.ValueDeclaration()) links := c.valueSymbolLinks.Get(symbol) - links.resolvedType = t + links.resolvedType.set(c, t) links.target = source links.setNameType(c, c.valueSymbolLinks.Get(source).getNameType()) return symbol @@ -22915,10 +23235,12 @@ func (c *Checker) getApparentTypeOfIntersectionType(t *Type, thisArgument *Type) return d.resolvedApparentType } key := CachedTypeKey{kind: CachedTypeKindApparentType, typeId: thisArgument.id} - result := c.cachedTypes[key] + result, _ := c.cachedTypes.get(c, key) if result == nil { + c.cachedTypes.begin(c, key) result = c.getTypeWithThisArgument(t, thisArgument, true /*needApparentType*/) - c.cachedTypes[key] = result + c.cachedTypes.set(c, key, result) + c.endMemo() } return result } @@ -23073,11 +23395,16 @@ func (c *Checker) getTypeArguments(t *Type) []*Type { if d.resolvedTypeArguments == nil { d.resolvedTypeArguments = slices.Repeat([]*Type{c.errorType}, len(n.TypeParameters())) } - errorNode := core.IfElse(node != nil, node, c.currentNode) + message := diagnostics.Tuple_type_arguments_circularly_reference_themselves + var args []any if d.target.symbol != nil { - c.error(errorNode, diagnostics.Type_arguments_for_0_circularly_reference_themselves, c.symbolToString(d.target.symbol)) + message = diagnostics.Type_arguments_for_0_circularly_reference_themselves + args = []any{c.symbolToString(d.target.symbol)} + } + if node != nil { + c.error(node, message, args...) } else { - c.error(errorNode, diagnostics.Tuple_type_arguments_circularly_reference_themselves) + c.errorAtCurrentNode(message, args...) } } } @@ -23148,6 +23475,13 @@ func (c *Checker) getDefaultTypeArgumentType(isInJavaScriptFile bool) *Type { // this gets the instantiated default type of its target. If the type parameter has no default type or // the default is circular, `undefined` is returned. func (c *Checker) getDefaultFromTypeParameter(t *Type) *Type { + c.beginMemo(memoKeyOf(t, memoTypeParameterDefault)) + result := c.getDefaultFromTypeParameterUncached(t) + c.endMemo() + return result +} + +func (c *Checker) getDefaultFromTypeParameterUncached(t *Type) *Type { if t.flags&TypeFlagsTypeParameter == 0 { return nil } @@ -23160,17 +23494,17 @@ func (c *Checker) getDefaultFromTypeParameter(t *Type) *Type { func (c *Checker) getResolvedTypeParameterDefault(t *Type) *Type { d := t.AsTypeParameter() - if d.resolvedDefaultType == nil { + if d.resolvedDefaultType.get(c) == nil { if d.target != nil { targetDefault := c.getResolvedTypeParameterDefault(d.target) if targetDefault != nil { - d.resolvedDefaultType = c.instantiateType(targetDefault, d.mapper) + d.resolvedDefaultType.set(c, c.instantiateType(targetDefault, d.mapper)) } else { - d.resolvedDefaultType = c.noConstraintType + d.resolvedDefaultType.set(c, c.noConstraintType) } } else { // To block recursion, set the initial value to the resolvingDefaultType. - d.resolvedDefaultType = c.resolvingDefaultType + d.resolvedDefaultType.set(c, c.resolvingDefaultType) defaultType := c.noConstraintType if t.symbol != nil { defaultDeclaration := core.FirstNonNil(t.symbol.Declarations(), func(decl *ast.Node) *ast.Node { @@ -23183,16 +23517,16 @@ func (c *Checker) getResolvedTypeParameterDefault(t *Type) *Type { defaultType = c.getTypeFromTypeNode(defaultDeclaration) } } - if d.resolvedDefaultType == c.resolvingDefaultType { + if d.resolvedDefaultType.get(c) == c.resolvingDefaultType { // If we have not been called recursively, set the correct default type. - d.resolvedDefaultType = defaultType + d.resolvedDefaultType.set(c, defaultType) } } - } else if d.resolvedDefaultType == c.resolvingDefaultType { + } else if d.resolvedDefaultType.get(c) == c.resolvingDefaultType { // If we are called recursively for this type parameter, mark the default as circular. - d.resolvedDefaultType = c.circularConstraintType + d.resolvedDefaultType.set(c, c.circularConstraintType) } - return d.resolvedDefaultType + return d.resolvedDefaultType.get(c) } func (c *Checker) getDefaultOrUnknownFromTypeParameter(t *Type) *Type { @@ -23276,11 +23610,11 @@ func (c *Checker) instantiateTypeWithAlias(t *Type, m *TypeMapper, alias *TypeAl circularTypeNames := c.getCircularTypeNames() switch { case len(circularTypeNames) == 1: - c.error(c.currentNode, diagnostics.Instantiations_of_type_0_appear_infinitely_circular, circularTypeNames[0]) + c.errorAtCurrentNode(diagnostics.Instantiations_of_type_0_appear_infinitely_circular, circularTypeNames[0]) case len(circularTypeNames) > 1: - c.error(c.currentNode, diagnostics.Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0, quotedAndCommaSeparated(circularTypeNames)) + c.errorAtCurrentNode(diagnostics.Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0, quotedAndCommaSeparated(circularTypeNames)) default: - c.error(c.currentNode, diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite) + c.errorAtCurrentNode(diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite) } return c.errorType } @@ -23511,7 +23845,7 @@ func (c *Checker) getObjectTypeInstantiation(t *Type, m *TypeMapper, alias *Type links := c.typeNodeLinks.Get(declaration) switch { case t.objectFlags&ObjectFlagsReference != 0: // Deferred type reference - target = links.resolvedType + target = links.resolvedType.get(c) case t.objectFlags&ObjectFlagsInstantiated != 0: target = t.Target() default: @@ -24005,6 +24339,25 @@ func (c *Checker) tryGetTypeFromTypeNode(node *ast.Node) *Type { } func (c *Checker) getTypeFromTypeNode(node *ast.Node) *Type { + c.beginMemo(memoKeyOf(node, memoTypeNodeType)) + result := c.getTypeFromTypeNodeUncached(node) + c.endMemo() + return result +} + +// memoTypeNode calls a getTypeFromXXXNode worker that caches its result in the +// links of the type node. +func memoTypeNode(c *Checker, node *ast.Node, worker func(*Checker, *ast.Node) *Type) *Type { + if c.memoActive() { + c.typeNodeLinks.Get(node).resolvedType.begin(c) + result := worker(c, node) + c.endMemo() + return result + } + return worker(c, node) +} + +func (c *Checker) getTypeFromTypeNodeUncached(node *ast.Node) *Type { return c.getConditionalFlowTypeOfType(c.getTypeFromTypeNodeWorker(node), node) } @@ -24099,10 +24452,10 @@ func (c *Checker) getTypeFromTypeNodeWorker(node *ast.Node) *Type { func (c *Checker) getTypeFromThisTypeNode(node *ast.Node) *Type { links := c.typeNodeLinks.Get(node) - if links.resolvedType == nil { - links.resolvedType = c.getThisType(node) + if links.resolvedType.get(c) == nil { + links.resolvedType.set(c, c.getThisType(node)) } - return links.resolvedType + return links.resolvedType.get(c) } func (c *Checker) getThisType(node *ast.Node) *Type { @@ -24124,66 +24477,66 @@ func (c *Checker) getTypeFromLiteralTypeNode(node *ast.Node) *Type { return c.nullType } links := c.typeNodeLinks.Get(node) - if links.resolvedType == nil { - links.resolvedType = c.getRegularTypeOfLiteralType(c.checkExpression(node.AsLiteralTypeNode().Literal)) + if links.resolvedType.get(c) == nil { + links.resolvedType.set(c, c.getRegularTypeOfLiteralType(c.checkExpression(node.AsLiteralTypeNode().Literal))) } - return links.resolvedType + return links.resolvedType.get(c) } func (c *Checker) getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node *ast.Node) *Type { links := c.typeNodeLinks.Get(node) - if links.resolvedType == nil { + if links.resolvedType.get(c) == nil { // Deferred resolution of members is handled by resolveObjectTypeMembers alias := c.getAliasForTypeNode(node) if sym := node.Symbol(); sym == nil || c.getMembersOfSymbol(sym).Len() == 0 && alias == nil { - links.resolvedType = c.emptyTypeLiteralType + links.resolvedType.set(c, c.emptyTypeLiteralType) } else { t := c.newObjectType(ObjectFlagsAnonymous, node.Symbol()) t.alias = alias - links.resolvedType = t + links.resolvedType.set(c, t) } } - return links.resolvedType + return links.resolvedType.get(c) } func (c *Checker) getTypeFromIndexedAccessTypeNode(node *ast.Node) *Type { links := c.typeNodeLinks.Get(node) - if links.resolvedType == nil { + if links.resolvedType.get(c) == nil { objectType := c.getTypeFromTypeNode(node.AsIndexedAccessTypeNode().ObjectType) indexType := c.getTypeFromTypeNode(node.AsIndexedAccessTypeNode().IndexType) potentialAlias := c.getAliasForTypeNode(node) - links.resolvedType = c.getIndexedAccessTypeEx(objectType, indexType, AccessFlagsNone, node, potentialAlias) + links.resolvedType.set(c, c.getIndexedAccessTypeEx(objectType, indexType, AccessFlagsNone, node, potentialAlias)) } - return links.resolvedType + return links.resolvedType.get(c) } func (c *Checker) getTypeFromTypeOperatorNode(node *ast.Node) *Type { links := c.typeNodeLinks.Get(node) - if links.resolvedType == nil { + if links.resolvedType.get(c) == nil { argType := node.Type() switch node.AsTypeOperatorNode().Operator { case ast.KindKeyOfKeyword: - links.resolvedType = c.getIndexType(c.getTypeFromTypeNode(argType)) + links.resolvedType.set(c, c.getIndexType(c.getTypeFromTypeNode(argType))) case ast.KindUniqueKeyword: if argType.Kind == ast.KindSymbolKeyword { - links.resolvedType = c.getESSymbolLikeTypeForNode(ast.WalkUpParenthesizedTypes(node.Parent)) + links.resolvedType.set(c, c.getESSymbolLikeTypeForNode(ast.WalkUpParenthesizedTypes(node.Parent))) } else { - links.resolvedType = c.errorType + links.resolvedType.set(c, c.errorType) } case ast.KindReadonlyKeyword: - links.resolvedType = c.getTypeFromTypeNode(argType) + links.resolvedType.set(c, c.getTypeFromTypeNode(argType)) default: panic("Unhandled case in getTypeFromTypeOperatorNode") } } - return links.resolvedType + return links.resolvedType.get(c) } func (c *Checker) getESSymbolLikeTypeForNode(node *ast.Node) *Type { if isValidESSymbolDeclaration(node) { symbol := c.getSymbolOfNode(node) if symbol != nil { - uniqueType := c.uniqueESSymbolTypes[symbol] + uniqueType, _ := c.uniqueESSymbolTypes.get(c, symbol) if uniqueType == nil { var b strings.Builder b.WriteString(ast.InternalSymbolNamePrefix) @@ -24192,7 +24545,7 @@ func (c *Checker) getESSymbolLikeTypeForNode(node *ast.Node) *Type { b.WriteByte('@') b.WriteString(strconv.FormatUint(uint64(ast.GetSymbolId(symbol)), 10)) uniqueType = c.newUniqueESSymbolType(symbol, b.String()) - c.uniqueESSymbolTypes[symbol] = uniqueType + c.uniqueESSymbolTypes.intern(symbol, uniqueType) } return uniqueType } @@ -24202,19 +24555,19 @@ func (c *Checker) getESSymbolLikeTypeForNode(node *ast.Node) *Type { func (c *Checker) getTypeFromTypeReference(node *ast.Node) *Type { links := c.typeNodeLinks.Get(node) - if links.resolvedType == nil { + if links.resolvedType.get(c) == nil { // Cache both the resolved symbol and the resolved type. The resolved symbol is needed when we check the // type reference in checkTypeReferenceNode. // handle LS queries on the `const` in `x as const` by resolving to the type of `x` if isConstTypeReference(node) && ast.IsAssertionExpression(node.Parent) { - links.resolvedType = c.checkExpressionCached(node.Parent.Expression()) + links.resolvedType.set(c, c.checkExpressionCached(node.Parent.Expression())) } else if t := c.getIntendedTypeFromJSDocTypeReference(node); t != nil { - links.resolvedType = t + links.resolvedType.set(c, t) } else { - links.resolvedType = c.getDistributedTypeParameter(node, c.getTypeReferenceType(node, c.getSymbolFromTypeReference(node))) + links.resolvedType.set(c, c.getDistributedTypeParameter(node, c.getTypeReferenceType(node, c.getSymbolFromTypeReference(node)))) } } - return links.resolvedType + return links.resolvedType.get(c) } func (c *Checker) getDistributedTypeParameter(node *ast.Node, t *Type) *Type { @@ -24236,15 +24589,17 @@ func (c *Checker) getDistributedTypeFromTypeParameter(t *Type) *Type { tp := t.AsTypeParameter() if tp.distributedType == nil { tp.distributedType = c.newTypeParameter(t.symbol) - tp.distributedType.AsTypeParameter().isDistributed = true - tp.distributedType.AsTypeParameter().constraint = t + distributed := tp.distributedType.AsTypeParameter() + distributed.isDistributed = true + distributed.constraint.intern(t) + distributed.distributedType = t } return tp.distributedType } func getNonDistributedTypeParameter(t *Type) *Type { if t.flags&TypeFlagsTypeParameter != 0 && t.AsTypeParameter().isDistributed { - return t.AsTypeParameter().constraint + return t.AsTypeParameter().distributedType } return t } @@ -24311,13 +24666,23 @@ func (c *Checker) getIntendedTypeFromJSDocTypeReference(node *ast.Node) *Type { } func (c *Checker) getSymbolFromTypeReference(node *ast.Node) *ast.Symbol { + if c.memoActive() { + c.symbolNodeLinks.Get(node).resolvedSymbol.begin(c) + result := c.getSymbolFromTypeReferenceCached(node) + c.endMemo() + return result + } + return c.getSymbolFromTypeReferenceCached(node) +} + +func (c *Checker) getSymbolFromTypeReferenceCached(node *ast.Node) *ast.Symbol { links := c.symbolNodeLinks.Get(node) - if links.resolvedSymbol == nil { + if links.resolvedSymbol.get(c) == nil { // The `const` in a `const` assertion resolves to nothing; resolveName knows not to // report an error for it, so no special-casing is needed here. - links.resolvedSymbol = c.resolveTypeReferenceName(node, ast.SymbolFlagsType, false /*ignoreErrors*/) + links.resolvedSymbol.set(c, c.resolveTypeReferenceName(node, ast.SymbolFlagsType, false /*ignoreErrors*/)) } - return links.resolvedSymbol + return links.resolvedSymbol.get(c) } func (c *Checker) resolveTypeReferenceName(typeReference *ast.Node, meaning ast.SymbolFlags, ignoreErrors bool) *ast.Symbol { @@ -24360,12 +24725,12 @@ func (c *Checker) getUnresolvedSymbolForEntityName(name *ast.Node) *ast.Symbol { } else { path = text } - result := c.unresolvedSymbols[path] + result, _ := c.unresolvedSymbols.get(c, path) if result == nil { result = c.newSymbolEx(ast.SymbolFlagsTypeAlias, text, ast.CheckFlagsUnresolved) - c.unresolvedSymbols[path] = result + c.unresolvedSymbols.intern(path, result) result.SetParent(parentSymbol) - c.typeAliasLinks.Get(result).declaredType = c.unresolvedType + c.typeAliasLinks.Get(result).declaredType.intern(c.unresolvedType) } return result } @@ -24613,10 +24978,11 @@ func (n *TupleNormalizer) normalize(c *Checker, elementTypes []*Type, elementInf } else if isTupleType(t) { spreadTypes := c.getElementTypes(t) if len(spreadTypes)+len(n.types) >= 10_000 { - message := core.IfElse(ast.IsPartOfTypeNode(c.currentNode), - diagnostics.Type_produces_a_tuple_type_that_is_too_large_to_represent, - diagnostics.Expression_produces_a_tuple_type_that_is_too_large_to_represent) - c.error(c.currentNode, message) + c.reportAtCurrentNode(func(c *Checker, node *ast.Node) { + c.error(node, core.IfElse(node != nil && ast.IsPartOfTypeNode(node), + diagnostics.Type_produces_a_tuple_type_that_is_too_large_to_represent, + diagnostics.Expression_produces_a_tuple_type_that_is_too_large_to_represent)) + }) return false } // Spread variadic elements with tuple types into the resulting tuple. @@ -24818,11 +25184,11 @@ func (c *Checker) getTypeFromTypeAliasReference(node *ast.Node, symbol *ast.Symb if symbol.CheckFlags()&ast.CheckFlagsUnresolved != 0 { alias := &TypeAlias{symbol: symbol, typeArguments: core.Map(typeArguments, c.getTypeFromTypeNode)} key := getAliasKey(alias) - errorType := c.errorTypes[key] + errorType, _ := c.errorTypes.get(c, key) if errorType == nil { errorType = c.newIntrinsicType(TypeFlagsAny, "error") errorType.alias = alias - c.errorTypes[key] = errorType + c.errorTypes.intern(key, errorType) } return errorType } @@ -24904,6 +25270,13 @@ func isLocalTypeAlias(symbol *ast.Symbol) bool { } func (c *Checker) getDeclaredTypeOfSymbol(symbol *ast.Symbol) *Type { + c.beginMemo(memoKeyOf(symbol, memoDeclaredType)) + result := c.getDeclaredTypeOfSymbolUncached(symbol) + c.endMemo() + return result +} + +func (c *Checker) getDeclaredTypeOfSymbolUncached(symbol *ast.Symbol) *Type { result := c.tryGetDeclaredTypeOfSymbol(symbol) if result == nil { result = c.errorType @@ -25073,15 +25446,15 @@ func (c *Checker) appendTypeParameters(typeParameters []*Type, declarations []*a func (c *Checker) getDeclaredTypeOfTypeParameter(symbol *ast.Symbol) *Type { links := c.declaredTypeLinks.Get(symbol) - if links.declaredType == nil { - links.declaredType = c.newTypeParameter(symbol) + if links.declaredType.get(c) == nil { + links.declaredType.set(c, c.newTypeParameter(symbol)) } - return links.declaredType + return links.declaredType.get(c) } func (c *Checker) getDeclaredTypeOfTypeAlias(symbol *ast.Symbol) *Type { links := c.typeAliasLinks.Get(symbol) - if links.declaredType == nil { + if links.declaredType.get(c) == nil { // Note that we use the links object as the target here because the symbol object is used as the unique // identity for resolution of the 'type' property in SymbolLinks. if !c.pushTypeResolution(symbol, TypeSystemPropertyNameDeclaredType) { @@ -25110,16 +25483,16 @@ func (c *Checker) getDeclaredTypeOfTypeAlias(symbol *ast.Symbol) *Type { c.error(errorNode, diagnostics.Type_alias_0_circularly_references_itself, c.symbolToString(symbol)) t = c.errorType } - if links.declaredType == nil { - links.declaredType = t + if links.declaredType.get(c) == nil { + links.declaredType.set(c, t) } } - return links.declaredType + return links.declaredType.get(c) } func (c *Checker) getDeclaredTypeOfEnum(symbol *ast.Symbol) *Type { links := c.declaredTypeLinks.Get(symbol) - if !(links.declaredType != nil) { + if !(links.declaredType.get(c) != nil) { var memberTypeList []*Type for _, declaration := range symbol.Declarations() { if declaration.Kind == ast.KindEnumDeclaration { @@ -25133,7 +25506,7 @@ func (c *Checker) getDeclaredTypeOfEnum(symbol *ast.Symbol) *Type { } else { memberType = c.createComputedEnumType(memberSymbol) } - c.declaredTypeLinks.Get(memberSymbol).declaredType = c.getFreshTypeOfLiteralType(memberType) + c.declaredTypeLinks.Get(memberSymbol).declaredType.set(c, c.getFreshTypeOfLiteralType(memberType)) memberTypeList = append(memberTypeList, memberType) } } @@ -25149,9 +25522,9 @@ func (c *Checker) getDeclaredTypeOfEnum(symbol *ast.Symbol) *Type { enumType.flags |= TypeFlagsEnumLiteral enumType.symbol = symbol } - links.declaredType = enumType + links.declaredType.set(c, enumType) } - return links.declaredType + return links.declaredType.get(c) } func (c *Checker) getEnumMemberValue(node *ast.Node) evaluator.Result { @@ -25171,16 +25544,22 @@ func (c *Checker) createComputedEnumType(symbol *ast.Symbol) *Type { func (c *Checker) getDeclaredTypeOfEnumMember(symbol *ast.Symbol) *Type { links := c.declaredTypeLinks.Get(symbol) - if !(links.declaredType != nil) { + if !(links.declaredType.get(c) != nil) { enumType := c.getDeclaredTypeOfEnum(c.getParentOfSymbol(symbol)) - if links.declaredType == nil { - links.declaredType = enumType + if links.declaredType.get(c) == nil { + links.declaredType.set(c, enumType) } } - return links.declaredType + return links.declaredType.get(c) } func (c *Checker) computeEnumMemberValues(node *ast.Node) { + c.beginMemo(memoKeyOf(node, memoEnumMemberValue)) + c.computeEnumMemberValuesUncached(node) + c.endMemo() +} + +func (c *Checker) computeEnumMemberValuesUncached(node *ast.Node) { nodeLinks := c.nodeLinks.Get(node) if !(nodeLinks.flags&NodeCheckFlagsEnumValuesComputed != 0) { nodeLinks.flags |= NodeCheckFlagsEnumValuesComputed @@ -25336,36 +25715,36 @@ func (c *Checker) evaluateEnumMember(expr *ast.Node, symbol *ast.Symbol, locatio func (c *Checker) getDeclaredTypeOfAlias(symbol *ast.Symbol) *Type { links := c.declaredTypeLinks.Get(symbol) - if links.declaredType == nil { - links.declaredType = c.getDeclaredTypeOfSymbol(c.resolveAlias(symbol)) + if links.declaredType.get(c) == nil { + links.declaredType.set(c, c.getDeclaredTypeOfSymbol(c.resolveAlias(symbol))) } - return links.declaredType + return links.declaredType.get(c) } func (c *Checker) getTypeFromTypeQueryNode(node *ast.Node) *Type { links := c.typeNodeLinks.Get(node) - if links.resolvedType == nil { + if links.resolvedType.get(c) == nil { // TypeScript 1.0 spec (April 2014): 3.6.3 // The expression is processed as an identifier expression (section 4.3) // or property access expression(section 4.10), // the widened type(section 3.9) of which becomes the result. t := c.checkExpressionWithTypeArguments(node) - links.resolvedType = c.getRegularTypeOfLiteralType(c.getWidenedType(t)) + links.resolvedType.set(c, c.getRegularTypeOfLiteralType(c.getWidenedType(t))) } - return links.resolvedType + return links.resolvedType.get(c) } func (c *Checker) getTypeFromArrayOrTupleTypeNode(node *ast.Node) *Type { links := c.typeNodeLinks.Get(node) - if links.resolvedType == nil { + if links.resolvedType.get(c) == nil { target := c.getArrayOrTupleTargetType(node) if target == c.emptyGenericType { - links.resolvedType = c.emptyObjectType + links.resolvedType.set(c, c.emptyObjectType) } else if !(node.Kind == ast.KindTupleType && core.Some(node.Elements(), c.isVariadicTupleElement)) && c.isDeferredTypeReferenceNode(node, false) { if node.Kind == ast.KindTupleType && len(node.Elements()) == 0 { - links.resolvedType = target + links.resolvedType.set(c, target) } else { - links.resolvedType = c.createDeferredTypeReference(target, node, nil /*mapper*/, nil /*alias*/) + links.resolvedType.set(c, c.createDeferredTypeReference(target, node, nil /*mapper*/, nil /*alias*/)) } } else { var elementTypes []*Type @@ -25375,13 +25754,13 @@ func (c *Checker) getTypeFromArrayOrTupleTypeNode(node *ast.Node) *Type { elementTypes = core.Map(node.Elements(), c.getTypeFromTypeNode) } if target.objectFlags&ObjectFlagsTuple != 0 { - links.resolvedType = c.createNormalizedTupleTypeEx(target, elementTypes, ObjectFlagsFromTypeNode) + links.resolvedType.set(c, c.createNormalizedTupleTypeEx(target, elementTypes, ObjectFlagsFromTypeNode)) } else { - links.resolvedType = c.createTypeReferenceEx(target, elementTypes, ObjectFlagsFromTypeNode) + links.resolvedType.set(c, c.createTypeReferenceEx(target, elementTypes, ObjectFlagsFromTypeNode)) } } } - return links.resolvedType + return links.resolvedType.get(c) } func (c *Checker) isVariadicTupleElement(node *ast.Node) bool { @@ -25406,14 +25785,14 @@ func (c *Checker) isReadonlyTypeOperator(node *ast.Node) bool { func (c *Checker) getTypeFromNamedTupleTypeNode(node *ast.Node) *Type { links := c.typeNodeLinks.Get(node) - if links.resolvedType == nil { + if links.resolvedType.get(c) == nil { if node.AsNamedTupleMember().DotDotDotToken != nil { - links.resolvedType = c.getTypeFromRestTypeNode(node) + links.resolvedType.set(c, c.getTypeFromRestTypeNode(node)) } else { - links.resolvedType = c.addOptionalityEx(c.getTypeFromTypeNode(node.Type()), true /*isProperty*/, node.QuestionToken() != nil) + links.resolvedType.set(c, c.addOptionalityEx(c.getTypeFromTypeNode(node.Type()), true /*isProperty*/, node.QuestionToken() != nil)) } } - return links.resolvedType + return links.resolvedType.get(c) } func (c *Checker) getTypeFromRestTypeNode(node *ast.Node) *Type { @@ -25451,16 +25830,16 @@ func (c *Checker) getTypeFromOptionalTypeNode(node *ast.Node) *Type { func (c *Checker) getTypeFromUnionTypeNode(node *ast.Node) *Type { links := c.typeNodeLinks.Get(node) - if links.resolvedType == nil { + if links.resolvedType.get(c) == nil { alias := c.getAliasForTypeNode(node) - links.resolvedType = c.getUnionTypeEx(core.Map(node.AsUnionTypeNode().Types.Nodes, c.getTypeFromTypeNode), UnionReductionLiteral, alias, nil /*origin*/) + links.resolvedType.set(c, c.getUnionTypeEx(core.Map(node.AsUnionTypeNode().Types.Nodes, c.getTypeFromTypeNode), UnionReductionLiteral, alias, nil /*origin*/)) } - return links.resolvedType + return links.resolvedType.get(c) } func (c *Checker) getTypeFromIntersectionTypeNode(node *ast.Node) *Type { links := c.typeNodeLinks.Get(node) - if links.resolvedType == nil { + if links.resolvedType.get(c) == nil { alias := c.getAliasForTypeNode(node) types := core.Map(node.AsIntersectionTypeNode().Types.Nodes, c.getTypeFromTypeNode) // We perform no supertype reduction for X & {} or {} & X, where X is one of string, number, bigint, @@ -25474,14 +25853,14 @@ func (c *Checker) getTypeFromIntersectionTypeNode(node *ast.Node) *Type { noSupertypeReduction = t.flags&(TypeFlagsString|TypeFlagsNumber|TypeFlagsBigInt) != 0 || t.flags&TypeFlagsTemplateLiteral != 0 && c.isPatternLiteralType(t) } } - links.resolvedType = c.getIntersectionTypeEx(types, core.IfElse(noSupertypeReduction, IntersectionFlagsNoSupertypeReduction, 0), alias) + links.resolvedType.set(c, c.getIntersectionTypeEx(types, core.IfElse(noSupertypeReduction, IntersectionFlagsNoSupertypeReduction, 0), alias)) } - return links.resolvedType + return links.resolvedType.get(c) } func (c *Checker) getTypeFromTemplateTypeNode(node *ast.Node) *Type { links := c.typeNodeLinks.Get(node) - if links.resolvedType == nil { + if links.resolvedType.get(c) == nil { spans := node.AsTemplateLiteralTypeNode().TemplateSpans texts := make([]string, len(spans.Nodes)+1) types := make([]*Type, len(spans.Nodes)) @@ -25490,28 +25869,28 @@ func (c *Checker) getTypeFromTemplateTypeNode(node *ast.Node) *Type { texts[i+1] = span.AsTemplateLiteralTypeSpan().Literal.Text() types[i] = c.getTypeFromTypeNode(span.Type()) } - links.resolvedType = c.getTemplateLiteralType(texts, types) + links.resolvedType.set(c, c.getTemplateLiteralType(texts, types)) } - return links.resolvedType + return links.resolvedType.get(c) } func (c *Checker) getTypeFromMappedTypeNode(node *ast.Node) *Type { links := c.typeNodeLinks.Get(node) - if links.resolvedType == nil { + if links.resolvedType.get(c) == nil { t := c.newObjectType(ObjectFlagsMapped, node.Symbol()) t.AsMappedType().declaration = node.AsMappedTypeNode() t.alias = c.getAliasForTypeNode(node) - links.resolvedType = t + links.resolvedType.set(c, t) // Eagerly resolve the constraint type which forces an error if the constraint type circularly // references itself through one or more type aliases. c.getConstraintTypeFromMappedType(t) } - return links.resolvedType + return links.resolvedType.get(c) } func (c *Checker) getTypeFromConditionalTypeNode(node *ast.Node) *Type { links := c.typeNodeLinks.Get(node) - if links.resolvedType == nil { + if links.resolvedType.get(c) == nil { checkType := c.getTypeFromTypeNode(node.AsConditionalTypeNode().CheckType) alias := c.getAliasForTypeNode(node) allOuterTypeParameters := c.getOuterTypeParameters(node, true /*includeThisTypes*/) @@ -25531,13 +25910,13 @@ func (c *Checker) getTypeFromConditionalTypeNode(node *ast.Node) *Type { instantiations: nil, alias: alias, } - links.resolvedType = c.getConditionalType(root, nil /*mapper*/, false /*forConstraint*/, nil) + links.resolvedType.set(c, c.getConditionalType(root, nil /*mapper*/, false /*forConstraint*/, nil)) if outerTypeParameters != nil { root.instantiations = make(map[CacheHashKey]*Type) - root.instantiations[getConditionalTypeKey(outerTypeParameters, nil /*alias*/, false /*forConstraint*/)] = links.resolvedType + root.instantiations[getConditionalTypeKey(outerTypeParameters, nil /*alias*/, false /*forConstraint*/)] = links.resolvedType.get(c) } } - return links.resolvedType + return links.resolvedType.get(c) } func (c *Checker) getConditionalType(root *ConditionalRoot, mapper *TypeMapper, forConstraint bool, alias *TypeAlias) *Type { @@ -25551,7 +25930,7 @@ func (c *Checker) getConditionalType(root *ConditionalRoot, mapper *TypeMapper, // cases we increment the tail recursion counter and stop after 1000 iterations. for { if tailCount == 1000 { - c.error(c.currentNode, diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite) + c.errorAtCurrentNode(diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite) return c.errorType } checkType := c.instantiateType(c.getActualTypeVariable(root.checkType), mapper) @@ -25724,11 +26103,13 @@ func (c *Checker) getPermissiveInstantiation(t *Type) *Type { return t } key := CachedTypeKey{kind: CachedTypeKindPermissiveInstantiation, typeId: t.id} - if cached := c.cachedTypes[key]; cached != nil { + if cached, _ := c.cachedTypes.get(c, key); cached != nil { return cached } + c.cachedTypes.begin(c, key) result := c.instantiateType(t, c.permissiveMapper) - c.cachedTypes[key] = result + c.cachedTypes.set(c, key, result) + c.endMemo() return result } @@ -25737,32 +26118,41 @@ func (c *Checker) getRestrictiveInstantiation(t *Type) *Type { return t } key := CachedTypeKey{kind: CachedTypeKindRestrictiveInstantiation, typeId: t.id} - if cached := c.cachedTypes[key]; cached != nil { + if cached, _ := c.cachedTypes.get(c, key); cached != nil { return cached } + c.cachedTypes.begin(c, key) result := c.instantiateType(t, c.restrictiveMapper) - c.cachedTypes[key] = result + c.cachedTypes.set(c, key, result) + c.endMemo() // We set the following so we don't attempt to set the restrictive instance of a restrictive instance // which is redundant - we'll produce new type identities, but all type params have already been mapped. // This also gives us a way to detect restrictive instances upon comparisons and _disable_ the "distributeive constraint" // assignability check for them, which is distinctly unsafe, as once you have a restrctive instance, all the type parameters // are constrained to `unknown` and produce tons of false positives/negatives! - c.cachedTypes[CachedTypeKey{kind: CachedTypeKindRestrictiveInstantiation, typeId: result.id}] = result + c.cachedTypes.intern(CachedTypeKey{kind: CachedTypeKindRestrictiveInstantiation, typeId: result.id}, result) return result } +// isRestrictiveInstantiation reports whether t is the result of a restrictive +// instantiation, which is recorded purely from its construction. +func (c *Checker) isRestrictiveInstantiation(t *Type) bool { + r, _ := c.cachedTypes.get(c, CachedTypeKey{kind: CachedTypeKindRestrictiveInstantiation, typeId: t.id}) + return r == t +} + func (c *Checker) getRestrictiveTypeParameter(t *Type) *Type { - if t.AsTypeParameter().constraint == nil && c.getConstraintDeclaration(t) == nil || t.AsTypeParameter().constraint == c.noConstraintType { + if t.AsTypeParameter().constraint.get(c) == nil && c.getConstraintDeclaration(t) == nil || t.AsTypeParameter().constraint.get(c) == c.noConstraintType { return t } key := CachedTypeKey{kind: CachedTypeKindRestrictiveTypeParameter, typeId: t.id} - if cached := c.cachedTypes[key]; cached != nil { + if cached, _ := c.cachedTypes.get(c, key); cached != nil { return cached } result := c.newTypeParameter(t.symbol) - result.AsTypeParameter().constraint = c.noConstraintType + result.AsTypeParameter().constraint.intern(c.noConstraintType) result.AsTypeParameter().origin = t - c.cachedTypes[key] = result + c.cachedTypes.intern(key, result) return result } @@ -25810,29 +26200,29 @@ func (c *Checker) getInferredTrueTypeFromConditionalType(t *Type) *Type { func (c *Checker) getTypeFromInferTypeNode(node *ast.Node) *Type { links := c.typeNodeLinks.Get(node) - if links.resolvedType == nil { - links.resolvedType = c.getDeclaredTypeOfTypeParameter(c.getSymbolOfDeclaration(node.AsInferTypeNode().TypeParameter)) + if links.resolvedType.get(c) == nil { + links.resolvedType.set(c, c.getDeclaredTypeOfTypeParameter(c.getSymbolOfDeclaration(node.AsInferTypeNode().TypeParameter))) } - return links.resolvedType + return links.resolvedType.get(c) } func (c *Checker) getTypeFromImportTypeNode(node *ast.Node) *Type { links := c.typeNodeLinks.Get(node) - if links.resolvedType == nil { + if links.resolvedType.get(c) == nil { n := node.AsImportTypeNode() if !ast.IsLiteralImportTypeNode(node) { c.error(n.Argument, diagnostics.String_literal_expected) - c.symbolNodeLinks.Get(node).resolvedSymbol = c.unknownSymbol - links.resolvedType = c.errorType - return links.resolvedType + c.symbolNodeLinks.Get(node).resolvedSymbol.set(c, c.unknownSymbol) + links.resolvedType.set(c, c.errorType) + return links.resolvedType.get(c) } targetMeaning := core.IfElse(n.IsTypeOf, ast.SymbolFlagsValue, ast.SymbolFlagsType) // TODO: Future work: support unions/generics/whatever via a deferred import-type innerModuleSymbol := c.resolveExternalModuleName(node, n.Argument.AsLiteralTypeNode().Literal, false /*ignoreErrors*/, c.getTypeFromImportAttributes(ast.GetImportAttributes(node))) if innerModuleSymbol == nil { - c.symbolNodeLinks.Get(node).resolvedSymbol = c.unknownSymbol - links.resolvedType = c.errorType - return links.resolvedType + c.symbolNodeLinks.Get(node).resolvedSymbol.set(c, c.unknownSymbol) + links.resolvedType.set(c, c.errorType) + return links.resolvedType.get(c) } moduleSymbol := c.resolveExternalModuleSymbol(innerModuleSymbol, false /*dontResolveAlias*/) if !ast.NodeIsMissing(n.Qualifier) { @@ -25867,28 +26257,28 @@ func (c *Checker) getTypeFromImportTypeNode(node *ast.Node) *Type { next := core.OrElse(symbolFromModule, symbolFromVariable) if next == nil { c.error(current, diagnostics.Namespace_0_has_no_exported_member_1, c.getFullyQualifiedName(currentNamespace, nil), scanner.DeclarationNameToString(current)) - links.resolvedType = c.errorType - return links.resolvedType + links.resolvedType.set(c, c.errorType) + return links.resolvedType.get(c) } - c.symbolNodeLinks.Get(current).resolvedSymbol = next - c.symbolNodeLinks.Get(current.Parent).resolvedSymbol = next + c.symbolNodeLinks.Get(current).resolvedSymbol.set(c, next) + c.symbolNodeLinks.Get(current.Parent).resolvedSymbol.set(c, next) currentNamespace = next } - links.resolvedType = c.resolveImportSymbolType(node, currentNamespace, targetMeaning) + links.resolvedType.set(c, c.resolveImportSymbolType(node, currentNamespace, targetMeaning)) } else { if c.getSymbolFlags(moduleSymbol)&targetMeaning != 0 { - links.resolvedType = c.resolveImportSymbolType(node, moduleSymbol, targetMeaning) + links.resolvedType.set(c, c.resolveImportSymbolType(node, moduleSymbol, targetMeaning)) } else { message := core.IfElse(targetMeaning == ast.SymbolFlagsValue, diagnostics.Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here, diagnostics.Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0) c.error(node, message, n.Argument.AsLiteralTypeNode().Literal.Text()) - c.symbolNodeLinks.Get(node).resolvedSymbol = c.unknownSymbol - links.resolvedType = c.errorType + c.symbolNodeLinks.Get(node).resolvedSymbol.set(c, c.unknownSymbol) + links.resolvedType.set(c, c.errorType) } } } - return links.resolvedType + return links.resolvedType.get(c) } func (c *Checker) getIdentifierChain(node *ast.Node) []*ast.Node { @@ -25900,7 +26290,7 @@ func (c *Checker) getIdentifierChain(node *ast.Node) []*ast.Node { func (c *Checker) resolveImportSymbolType(node *ast.Node, symbol *ast.Symbol, meaning ast.SymbolFlags) *Type { resolvedSymbol := c.resolveSymbol(symbol) - c.symbolNodeLinks.Get(node).resolvedSymbol = resolvedSymbol + c.symbolNodeLinks.Get(node).resolvedSymbol.set(c, resolvedSymbol) if meaning == ast.SymbolFlagsValue { // intentionally doesn't use resolved symbol so type is cached as expected on the alias return c.getInstantiationExpressionType(c.getTypeOfSymbol(symbol), node) @@ -25930,7 +26320,7 @@ func (c *Checker) getGlobalImportMetaExpressionType() *Type { importMetaType := c.getGlobalImportMetaType() metaPropertySymbol := c.newSymbolEx(ast.SymbolFlagsProperty, "meta", ast.CheckFlagsReadonly) metaPropertySymbol.SetParent(symbol) - c.valueSymbolLinks.Get(metaPropertySymbol).resolvedType = importMetaType + c.valueSymbolLinks.Get(metaPropertySymbol).resolvedType.set(c, importMetaType) members := createSymbolTable([]*ast.Symbol{metaPropertySymbol}) symbol.SetMembers(members, &c.symbolExtraArena) c.deferredGlobalImportMetaExpressionType = c.newAnonymousType(symbol, members, nil, nil, nil) @@ -26001,10 +26391,10 @@ func (c *Checker) getTupleTargetType(elementInfos []TupleElementInfo, readonly b return c.globalArrayType } key := getTupleKey(elementInfos, readonly) - t := c.tupleTypes[key] + t, _ := c.tupleTypes.get(c, key) if t == nil { t = c.createTupleTargetType(elementInfos, readonly) - c.tupleTypes[key] = t + c.tupleTypes.intern(key, t) } return t } @@ -26033,7 +26423,7 @@ func (c *Checker) createTupleTargetType(elementInfos []TupleElementInfo, readonl combinedFlags |= flags if combinedFlags&ElementFlagsVariable == 0 { property := c.newSymbolEx(ast.SymbolFlagsProperty|core.IfElse(flags&ElementFlagsOptional != 0, ast.SymbolFlagsOptional, 0), strconv.Itoa(i), core.IfElse(readonly, ast.CheckFlagsReadonly, 0)) - c.valueSymbolLinks.Get(property).resolvedType = typeParameter + c.valueSymbolLinks.Get(property).resolvedType.intern(typeParameter) // c.valueSymbolLinks.get(property).tupleLabelDeclaration = elementInfos[i].labeledDeclaration members.Set(property.Name(), property) } @@ -26042,20 +26432,20 @@ func (c *Checker) createTupleTargetType(elementInfos []TupleElementInfo, readonl fixedLength := members.Len() lengthSymbol := c.newSymbolEx(ast.SymbolFlagsProperty, "length", core.IfElse(readonly, ast.CheckFlagsReadonly, 0)) if combinedFlags&ElementFlagsVariable != 0 { - c.valueSymbolLinks.Get(lengthSymbol).resolvedType = c.numberType + c.valueSymbolLinks.Get(lengthSymbol).resolvedType.intern(c.numberType) } else { var literalTypes []*Type for i := minLength; i <= arity; i++ { literalTypes = append(literalTypes, c.getNumberLiteralType(jsnum.Number(i))) } - c.valueSymbolLinks.Get(lengthSymbol).resolvedType = c.getUnionType(literalTypes) + c.valueSymbolLinks.Get(lengthSymbol).resolvedType.intern(c.getUnionType(literalTypes)) } members.Set(lengthSymbol.Name(), lengthSymbol) t := c.newObjectType(ObjectFlagsTuple|ObjectFlagsReference, nil) d := t.AsTupleType() d.thisType = c.newTypeParameter(nil) d.thisType.AsTypeParameter().isThisType = true - d.thisType.AsTypeParameter().constraint = t + d.thisType.AsTypeParameter().constraint.intern(t) for _, tp := range typeParameters { tp.AsTypeParameter().origin = t } @@ -26516,7 +26906,7 @@ func (c *Checker) newSignature(flags SignatureFlags, declaration *ast.Node, type sig.setTypeParameters(c, typeParameters) sig.parameters = parameters sig.setThisParameter(c, thisParameter) - sig.resolvedReturnType = resolvedReturnType + sig.resolvedReturnType.intern(resolvedReturnType) sig.setResolvedTypePredicate(c, resolvedTypePredicate) sig.minArgumentCount = int32(minArgumentCount) sig.resolvedMinArgumentCount = -1 @@ -26566,10 +26956,10 @@ func isFreshLiteralType(t *Type) bool { } func (c *Checker) getStringLiteralType(value string) *Type { - t := c.stringLiteralTypes[value] + t, _ := c.stringLiteralTypes.get(c, value) if t == nil { t = c.newLiteralType(TypeFlagsStringLiteral, value, nil) - c.stringLiteralTypes[value] = t + c.stringLiteralTypes.intern(value, t) } return t } @@ -26583,19 +26973,19 @@ func (c *Checker) getNumberLiteralType(value jsnum.Number) *Type { } return c.nanType } - t := c.numberLiteralTypes[value] + t, _ := c.numberLiteralTypes.get(c, value) if t == nil { t = c.newLiteralType(TypeFlagsNumberLiteral, value, nil) - c.numberLiteralTypes[value] = t + c.numberLiteralTypes.intern(value, t) } return t } func (c *Checker) getBigIntLiteralType(value jsnum.PseudoBigInt) *Type { - t := c.bigintLiteralTypes[value] + t, _ := c.bigintLiteralTypes.get(c, value) if t == nil { t = c.newLiteralType(TypeFlagsBigIntLiteral, value, nil) - c.bigintLiteralTypes[value] = t + c.bigintLiteralTypes.intern(value, t) } return t } @@ -26632,11 +27022,11 @@ func (c *Checker) getEnumLiteralType(value any, enumSymbol *ast.Symbol, symbol * // NaN cannot be used as a Go map key because NaN != NaN in IEEE 754, // so Go map lookups for NaN always miss. Cache NaN enum types separately by enum symbol. if v.IsNaN() { - t := c.enumNaNLiteralTypes[enumSymbol] + t, _ := c.enumNaNLiteralTypes.get(c, enumSymbol) if t == nil { t = c.newLiteralType(flags, value, nil) t.symbol = symbol - c.enumNaNLiteralTypes[enumSymbol] = t + c.enumNaNLiteralTypes.intern(enumSymbol, t) } return t } @@ -26644,11 +27034,11 @@ func (c *Checker) getEnumLiteralType(value any, enumSymbol *ast.Symbol, symbol * panic("Unhandled case in getEnumLiteralType") } key := EnumLiteralKey{enumSymbol: enumSymbol, value: value} - t := c.enumLiteralTypes[key] + t, _ := c.enumLiteralTypes.get(c, key) if t == nil { t = c.newLiteralType(flags, value, nil) t.symbol = symbol - c.enumLiteralTypes[key] = t + c.enumLiteralTypes.intern(key, t) } return t } @@ -26739,11 +27129,13 @@ func (c *Checker) getBaseTypeOfEnumLikeType(t *Type) *Type { func (c *Checker) getBaseTypeOfLiteralTypeUnion(t *Type) *Type { key := CachedTypeKey{kind: CachedTypeKindLiteralUnionBaseType, typeId: t.id} - if cached, ok := c.cachedTypes[key]; ok { + if cached, ok := c.cachedTypes.get(c, key); ok { return cached } + c.cachedTypes.begin(c, key) result := c.mapType(t, c.getBaseTypeOfLiteralType) - c.cachedTypes[key] = result + c.cachedTypes.set(c, key, result) + c.endMemo() return result } @@ -26913,10 +27305,12 @@ func (c *Checker) getUnionTypeEx(types []*Type, unionReduction UnionReduction, a id1, id2 = id2, id1 } key := UnionOfUnionKey{id1: id1, id2: id2, r: unionReduction, a: getAliasKey(alias)} - t := c.unionOfUnionTypes[key] + t, _ := c.unionOfUnionTypes.get(c, key) if t == nil { + c.unionOfUnionTypes.begin(c, key) t = c.getUnionTypeWorker(types, unionReduction, alias, nil /*origin*/) - c.unionOfUnionTypes[key] = t + c.unionOfUnionTypes.set(c, key, t) + c.endMemo() } return t } @@ -27017,7 +27411,7 @@ func (c *Checker) getUnionTypeFromSortedList(types []*Type, precomputedObjectFla return types[0] } key := getUnionKey(types, origin, alias) - t := c.unionTypes[key] + t, _ := c.unionTypes.get(c, key) if t == nil { t = c.newUnionType(precomputedObjectFlags|c.getPropagatingFlagsOfTypes(types, TypeFlagsNullable), types) t.AsUnionType().origin = origin @@ -27025,13 +27419,13 @@ func (c *Checker) getUnionTypeFromSortedList(types []*Type, precomputedObjectFla if len(types) == 2 && types[0].flags&TypeFlagsBooleanLiteral != 0 && types[1].flags&TypeFlagsBooleanLiteral != 0 { t.flags |= TypeFlagsBoolean } - c.unionTypes[key] = t + c.unionTypes.intern(key, t) } return t } func (c *Checker) UnionTypes() iter.Seq[*Type] { - return maps.Values(c.unionTypes) + return c.unionTypes.values() } func (c *Checker) addTypesToUnion(sourceTypes []*Type, types []*Type) ([]*Type, TypeFlags) { @@ -27212,9 +27606,10 @@ func (c *Checker) removeSubtypes(types []*Type, hasObjectTypes bool) []*Type { return types } key := getTypeListKey(types) - if cached := c.subtypeReductionCache[key]; cached != nil { + if cached, _ := c.subtypeReductionCache.get(c, key); cached != nil { return cached } + c.subtypeReductionCache.begin(c, key) // We assume that redundant primitive types have already been removed from the types array and that there // are no any and unknown types in the array. Thus, the only possible supertypes for primitive types are empty // object types, and if none of those are present we can exclude primitive types from the subtype check. @@ -27268,7 +27663,8 @@ func (c *Checker) removeSubtypes(types []*Type, hasObjectTypes bool) []*Type { if tr := c.tracer; tr != nil { tr.Instant(tracing.PhaseCheckTypes, "removeSubtypes_DepthLimit", map[string]any{"estimatedCount": estimatedCount}) } - c.error(c.currentNode, diagnostics.Expression_produces_a_union_type_that_is_too_complex_to_represent) + c.errorAtCurrentNode(diagnostics.Expression_produces_a_union_type_that_is_too_complex_to_represent) + c.endMemo() return nil } } @@ -27293,7 +27689,8 @@ func (c *Checker) removeSubtypes(types []*Type, hasObjectTypes bool) []*Type { } } reduced := c.typeListArena.Clone(types) - c.subtypeReductionCache[key] = reduced + c.subtypeReductionCache.set(c, key, reduced) + c.endMemo() return reduced } @@ -27440,8 +27837,9 @@ func (c *Checker) getIntersectionTypeEx(types []*Type, flags IntersectionFlags, } } key := getIntersectionKey(typeSet, flags, alias) - result := c.intersectionTypes[key] + result, _ := c.intersectionTypes.get(c, key) if result == nil { + c.intersectionTypes.begin(c, key) if includes&TypeFlagsUnion != 0 { var reduced bool typeSet, reduced = c.intersectUnionsOfPrimitiveTypes(typeSet) @@ -27477,6 +27875,7 @@ func (c *Checker) getIntersectionTypeEx(types []*Type, flags IntersectionFlags, // the form X & A & C | X & A & D | X & B & C | X & B & D. If the estimated size of the resulting union type // exceeds 100000 constituents, report an error. if !c.checkCrossProductUnion(typeSet) { + c.endMemo() return c.errorType } constituents := c.getCrossProductIntersections(typeSet, flags) @@ -27492,7 +27891,8 @@ func (c *Checker) getIntersectionTypeEx(types []*Type, flags IntersectionFlags, } else { result = c.getIntersectionTypeWithContent(objectFlags|c.getPropagatingFlagsOfTypes(types /*excludeKinds*/, TypeFlagsNullable), typeSet, alias) } - c.intersectionTypes[key] = result + c.intersectionTypes.set(c, key, result) + c.endMemo() } return result } @@ -27506,12 +27906,12 @@ func (c *Checker) getIntersectionTypeWithContent(objectFlags ObjectFlags, typeSe b.writeUint32(uint32(objectFlags)) b.writeAlias(alias) key := b.hash() - if existing := c.intersectionContentTypes[key]; existing != nil { + if existing, _ := c.intersectionContentTypes.get(c, key); existing != nil { return existing } result := c.newIntersectionType(objectFlags, typeSet) result.alias = alias - c.intersectionContentTypes[key] = result + c.intersectionContentTypes.intern(key, result) return result } @@ -27948,7 +28348,7 @@ func (c *Checker) checkCrossProductUnion(types []*Type) bool { if tr := c.tracer; tr != nil { tr.Instant(tracing.PhaseCheckTypes, "checkCrossProductUnion_DepthLimit", map[string]any{"size": size}) } - c.error(c.currentNode, diagnostics.Expression_produces_a_union_type_that_is_too_complex_to_represent) + c.errorAtCurrentNode(diagnostics.Expression_produces_a_union_type_that_is_too_complex_to_represent) return false } return true @@ -28013,9 +28413,10 @@ func (c *Checker) getExtractStringType(t *Type) *Type { func (c *Checker) getLiteralTypeFromProperties(t *Type, include TypeFlags, includeOrigin bool) *Type { key := PropertiesTypesKey{typeId: t.id, include: include, includeOrigin: includeOrigin} - if cached, ok := c.propertiesTypes[key]; ok { + if cached, ok := c.propertiesTypes.get(c, key); ok { return cached } + c.propertiesTypes.begin(c, key) var origin *Type if includeOrigin && t.objectFlags&(ObjectFlagsClassOrInterface|ObjectFlagsReference) != 0 || t.alias != nil { origin = c.newIndexType(t, IndexFlagsNone) @@ -28036,7 +28437,8 @@ func (c *Checker) getLiteralTypeFromProperties(t *Type, include TypeFlags, inclu } } result := c.getUnionTypeEx(types, UnionReductionLiteral, nil, origin) - c.propertiesTypes[key] = result + c.propertiesTypes.set(c, key, result) + c.endMemo() return result } @@ -28097,30 +28499,40 @@ func isInvalidComputedPropertyName(node *ast.Node) bool { } func (c *Checker) checkComputedPropertyName(node *ast.Node) *Type { + if c.memoActive() { + c.typeNodeLinks.Get(node).resolvedType.begin(c) + result := c.checkComputedPropertyNameUncached(node) + c.endMemo() + return result + } + return c.checkComputedPropertyNameUncached(node) +} + +func (c *Checker) checkComputedPropertyNameUncached(node *ast.Node) *Type { links := c.typeNodeLinks.Get(node) - if links.resolvedType == nil { + if links.resolvedType.get(c) == nil { if isInvalidComputedPropertyName(node) { - links.resolvedType = c.errorType - return links.resolvedType + links.resolvedType.set(c, c.errorType) + return links.resolvedType.get(c) } if !c.pushTypeResolution(node, TypeSystemPropertyNameComputedPropertyName) { return c.errorType } t := c.checkExpression(node.Expression()) c.popTypeResolution() - if links.resolvedType != nil { - return links.resolvedType + if links.resolvedType.get(c) != nil { + return links.resolvedType.get(c) } - links.resolvedType = t + links.resolvedType.set(c, t) // This will allow types number, string, symbol or any. It will also allow enums, the unknown // type, and any union of these types (like string | number). - if links.resolvedType.flags&TypeFlagsNullable != 0 || - !c.isTypeAssignableToKind(links.resolvedType, TypeFlagsStringLike|TypeFlagsNumberLike|TypeFlagsESSymbolLike) && - !c.isTypeAssignableTo(links.resolvedType, c.stringNumberSymbolType) { + if links.resolvedType.get(c).flags&TypeFlagsNullable != 0 || + !c.isTypeAssignableToKind(links.resolvedType.get(c), TypeFlagsStringLike|TypeFlagsNumberLike|TypeFlagsESSymbolLike) && + !c.isTypeAssignableTo(links.resolvedType.get(c), c.stringNumberSymbolType) { c.error(node, diagnostics.A_computed_property_name_must_be_of_type_string_number_symbol_or_any) } } - return links.resolvedType + return links.resolvedType.get(c) } func (c *Checker) isNoInferType(t *Type) bool { @@ -28159,11 +28571,11 @@ func (c *Checker) getIndexTypeForGenericType(t *Type, indexFlags IndexFlags) *Ty kind: core.IfElse(indexFlags&IndexFlagsStringsOnly != 0, CachedTypeKindStringIndexType, CachedTypeKindIndexType), typeId: t.id, } - if indexType := c.cachedTypes[key]; indexType != nil { + if indexType, _ := c.cachedTypes.get(c, key); indexType != nil { return indexType } indexType := c.newIndexType(t, indexFlags&IndexFlagsStringsOnly) - c.cachedTypes[key] = indexType + c.cachedTypes.intern(key, indexType) return indexType } @@ -28264,11 +28676,11 @@ func (c *Checker) getIndexedAccessTypeOrUndefined(objectType *Type, indexType *T // Defer the operation by creating an indexed access type. persistentAccessFlags := accessFlags & AccessFlagsPersistent key := getIndexedAccessKey(objectType, indexType, persistentAccessFlags, alias) - t := c.indexedAccessTypes[key] + t, _ := c.indexedAccessTypes.get(c, key) if t == nil { t = c.newIndexedAccessType(objectType, indexType, persistentAccessFlags) t.alias = alias - c.indexedAccessTypes[key] = t + c.indexedAccessTypes.intern(key, t) } return t } @@ -28341,7 +28753,7 @@ func (c *Checker) getPropertyTypeForIndexType(originalObjectType *Type, objectTy return nil } if accessFlags&AccessFlagsCacheSymbol != 0 { - c.symbolNodeLinks.Get(accessNode).resolvedSymbol = prop + c.symbolNodeLinks.Get(accessNode).resolvedSymbol.set(c, prop) } if c.isThisPropertyAccessInConstructor(accessExpression, prop) { return c.autoType @@ -28721,11 +29133,11 @@ func (c *Checker) getSubstitutionType(baseType *Type, constraint *Type) *Type { func (c *Checker) getOrCreateSubstitutionType(baseType *Type, constraint *Type) *Type { key := SubstitutionTypeKey{baseId: baseType.id, constraintId: constraint.id} - if cached := c.substitutionTypes[key]; cached != nil { + if cached, _ := c.substitutionTypes.get(c, key); cached != nil { return cached } result := c.newSubstitutionType(baseType, constraint) - c.substitutionTypes[key] = result + c.substitutionTypes.intern(key, result) return result } @@ -28749,12 +29161,19 @@ func (c *Checker) getBaseConstraintOfType(t *Type) *Type { } func (c *Checker) getResolvedBaseConstraint(t *Type, stack []RecursionId) *Type { + c.beginMemo(memoKeyOf(t, memoBaseConstraint)) + result := c.getResolvedBaseConstraintUncached(t, stack) + c.endMemo() + return result +} + +func (c *Checker) getResolvedBaseConstraintUncached(t *Type, stack []RecursionId) *Type { constrained := t.AsConstrainedType() if constrained == nil { return t } - if constrained.resolvedBaseConstraint != nil { - return constrained.resolvedBaseConstraint + if constrained.resolvedBaseConstraint.get(c) != nil { + return constrained.resolvedBaseConstraint.get(c) } if !c.pushTypeResolution(t, TypeSystemPropertyNameResolvedBaseConstraint) { return c.circularConstraintType @@ -28766,7 +29185,7 @@ func (c *Checker) getResolvedBaseConstraint(t *Type, stack []RecursionId) *Type // levels of nesting, we are presumably exploring a repeating pattern with a long cycle that hasn't // yet triggered the deeply nested limiter. We have no test cases that actually get to 50 levels of // nesting, so it is effectively just a safety stop. - identity := getRecursionIdentity(t) + identity := c.getRecursionIdentity(t) if len(stack) < 10 || len(stack) < 50 && !slices.Contains(stack, identity) { constraint = c.computeBaseConstraint(c.getSimplifiedType(t /*writing*/, false), append(stack, identity)) } @@ -28774,10 +29193,13 @@ func (c *Checker) getResolvedBaseConstraint(t *Type, stack []RecursionId) *Type if t.flags&TypeFlagsTypeParameter != 0 { errorNode := c.getConstraintDeclaration(t) if errorNode != nil { - diagnostic := c.error(errorNode, diagnostics.Type_parameter_0_has_a_circular_constraint, c.TypeToString(t)) - if c.currentNode != nil && !isNodeDescendantOf(errorNode, c.currentNode) && !isNodeDescendantOf(c.currentNode, errorNode) { - diagnostic.AddRelatedInfo(NewDiagnosticForNode(c.currentNode, diagnostics.Circularity_originates_in_type_at_this_location)) - } + typeString := c.TypeToString(t) + c.reportAtCurrentNode(func(c *Checker, node *ast.Node) { + diagnostic := c.error(errorNode, diagnostics.Type_parameter_0_has_a_circular_constraint, typeString) + if node != nil && !isNodeDescendantOf(errorNode, node) && !isNodeDescendantOf(node, errorNode) { + diagnostic.AddRelatedInfo(NewDiagnosticForNode(node, diagnostics.Circularity_originates_in_type_at_this_location)) + } + }) } } constraint = c.circularConstraintType @@ -28785,8 +29207,8 @@ func (c *Checker) getResolvedBaseConstraint(t *Type, stack []RecursionId) *Type if constraint == nil { constraint = c.noConstraintType } - if constrained.resolvedBaseConstraint == nil { - constrained.resolvedBaseConstraint = constraint + if constrained.resolvedBaseConstraint.get(c) == nil { + constrained.resolvedBaseConstraint.set(c, constraint) } return constraint } @@ -29030,7 +29452,7 @@ func (c *Checker) markPropertyAsReferenced(prop *ast.Symbol, nodeForCheckWriteOn if prop.CheckFlags()&ast.CheckFlagsInstantiated != 0 { target = c.valueSymbolLinks.Get(prop).target } - c.symbolReferenceLinks.Get(target).referenceKinds |= ast.SymbolFlagsAll + c.symbolReferenced(target, ast.SymbolFlagsAll) } func (c *Checker) expandSignatureParametersWithTupleMembers(signature *Signature, restType *TypeReference, restIndex int, restSymbol *ast.Symbol) []*ast.Symbol { @@ -29050,9 +29472,9 @@ func (c *Checker) expandSignatureParametersWithTupleMembers(signature *Signature symbol := c.newSymbolEx(ast.SymbolFlagsFunctionScopedVariable, associatedNames[i], checkFlags) links := c.valueSymbolLinks.Get(symbol) if flags&ElementFlagsRest != 0 { - links.resolvedType = c.createArrayType(t) + links.resolvedType.set(c, c.createArrayType(t)) } else { - links.resolvedType = t + links.resolvedType.set(c, t) } expanded = append(expanded, symbol) } @@ -29228,16 +29650,19 @@ func (c *Checker) getSimplifiedIndexType(t *Type) *Type { // the target of an assignment. func (c *Checker) getSimplifiedIndexedAccessType(t *Type, writing bool) *Type { key := CachedTypeKey{kind: core.IfElse(writing, CachedTypeKindIndexedAccessForWriting, CachedTypeKindIndexedAccessForReading), typeId: t.id} - if cached := c.cachedTypes[key]; cached != nil { + if cached, _ := c.cachedTypes.get(c, key); cached != nil { return core.IfElse(cached == c.circularConstraintType, t, cached) } - c.cachedTypes[key] = t + c.cachedTypes.begin(c, key) + // Resolve circular references to t itself while simplifying. + c.cachedTypes.intern(key, t) result := c.getSimplifiedIndexedAccessTypeWorker(t, writing) if result != t { // If the simplification is a union type that includes t, remove t from the type. result = c.removeType(result, t) - c.cachedTypes[key] = result + c.cachedTypes.set(c, key, result) } + c.endMemo() return result } @@ -29319,11 +29744,13 @@ func (c *Checker) distributeIndexOverObjectType(objectType *Type, indexType *Typ func (c *Checker) getSimplifiedConditionalType(t *Type, writing bool) *Type { key := CachedTypeKey{kind: core.IfElse(writing, CachedTypeKindSimplifiedConditionalTypeForWriting, CachedTypeKindSimplifiedConditionalTypeForReading), typeId: t.id} - if cached, ok := c.cachedTypes[key]; ok { + if cached, ok := c.cachedTypes.get(c, key); ok { return cached } + c.cachedTypes.begin(c, key) result := c.getSimplifiedConditionalTypeWorker(t, writing) - c.cachedTypes[key] = result + c.cachedTypes.set(c, key, result) + c.endMemo() return result } @@ -29413,10 +29840,17 @@ func (c *Checker) getSingleBaseForNonAugmentingSubtype(t *Type) *Type { return nil } key := CachedTypeKey{kind: CachedTypeKindEquivalentBaseType, typeId: t.id} - if t.objectFlags&ObjectFlagsIdenticalBaseTypeCalculated != 0 { - return c.cachedTypes[key] + if cached, ok := c.cachedTypes.get(c, key); ok { + return cached } - t.objectFlags |= ObjectFlagsIdenticalBaseTypeCalculated + c.cachedTypes.begin(c, key) + result := c.getSingleBaseForNonAugmentingSubtypeUncached(t) + c.cachedTypes.set(c, key, result) + c.endMemo() + return result +} + +func (c *Checker) getSingleBaseForNonAugmentingSubtypeUncached(t *Type) *Type { target := t.Target() if target.objectFlags&ObjectFlagsClass != 0 { baseTypeNode := getBaseTypeNodeOfClass(target) @@ -29444,7 +29878,6 @@ func (c *Checker) getSingleBaseForNonAugmentingSubtype(t *Type) *Type { if len(c.getTypeArguments(t)) > len(typeParameters) { instantiatedBase = c.getTypeWithThisArgument(instantiatedBase, core.LastOrNil(c.getTypeArguments(t)), false) } - c.cachedTypes[key] = instantiatedBase return instantiatedBase } @@ -29460,7 +29893,7 @@ func (c *Checker) getModifiersTypeFromMappedType(t *Type) *Type { // Otherwise, get the declared constraint type, and if the constraint type is a type parameter, // get the constraint of that type parameter. If the resulting type is an indexed type 'keyof T', // the modifiers type is T. Otherwise, the modifiers type is unknown. - declaredType := c.getTypeFromMappedTypeNode(m.declaration.AsNode()) + declaredType := memoTypeNode(c, m.declaration.AsNode(), (*Checker).getTypeFromMappedTypeNode) constraint := c.getConstraintTypeFromMappedType(declaredType) extendedConstraint := constraint if constraint != nil && constraint.flags&TypeFlagsTypeParameter != 0 { @@ -29485,9 +29918,10 @@ func (c *Checker) getRegularTypeOfObjectLiteral(t *Type) *Type { return t } key := CachedTypeKey{kind: CachedTypeKindRegularObjectLiteral, typeId: t.id} - if cached := c.cachedTypes[key]; cached != nil { + if cached, _ := c.cachedTypes.get(c, key); cached != nil { return cached } + c.cachedTypes.begin(c, key) resolved := c.resolveStructuredTypeMembers(t) members := c.transformTypeOfMembers(t, c.getRegularTypeOfObjectLiteral) create := func() *Type { @@ -29502,7 +29936,8 @@ func (c *Checker) getRegularTypeOfObjectLiteral(t *Type) *Type { } else { regular = create() } - c.cachedTypes[key] = regular + c.cachedTypes.set(c, key, regular) + c.endMemo() return regular } @@ -29909,6 +30344,12 @@ func (c *Checker) checkExternalEmitHelpers(location *ast.Node, helpers ExternalE if !ast.IsEffectiveExternalModule(sourceFile, c.compilerOptions) || location.Flags&ast.NodeFlagsAmbient != 0 { return } + if !c.checking { + // Helper errors are reported once per file at the first requesting + // location, so the check must happen in checking order. + c.recordEffect(func(c *Checker) { c.checkExternalEmitHelpers(location, helpers) }) + return + } helpersModule := c.resolveHelpersModule(sourceFile, location) if helpersModule == c.unknownSymbol { return @@ -30154,8 +30595,23 @@ func (c *Checker) markAliasReferenced(symbol *ast.Symbol, location *ast.Node) { // we reach a non-alias or an exported entity (which is always considered referenced). We do this by checking the target of // the alias as an expression (which recursively takes us back here if the target references another alias). func (c *Checker) markAliasSymbolAsReferenced(symbol *ast.Symbol) { + if !c.checking { + c.recordReferenceMark(symbol) + return + } + c.referenceAliasSymbol(symbol) +} + +func (c *Checker) referenceAliasSymbol(symbol *ast.Symbol) { links := c.aliasSymbolLinks.Get(symbol) - if !links.referenced { + // Emit marks references too (see withReferenceMarks), but reports + // nothing, so checking must still follow them once to report errors. + followed := links.referenced + if c.checking { + followed = links.referenceChecked + links.referenceChecked = true + } + if !followed { links.referenced = true node := c.getDeclarationOfAliasSymbol(symbol) if node == nil { @@ -30267,12 +30723,14 @@ func (c *Checker) getPromisedTypeOfPromiseEx(t *Type, errorNode *ast.Node, thisT return nil } key := CachedTypeKey{kind: CachedTypeKindPromisedTypeOfPromise, typeId: t.id} - if cached := c.cachedTypes[key]; cached != nil { + if cached, _ := c.cachedTypes.get(c, key); cached != nil { return cached } + c.cachedTypes.begin(c, key) + defer c.endMemo() if c.isReferenceToType(t, c.getGlobalPromiseType()) { result := c.getTypeArguments(t)[0] - c.cachedTypes[key] = result + c.cachedTypes.set(c, key, result) return result } // primitives with a `{ then() }` won't be unwrapped/adopted. @@ -30326,7 +30784,7 @@ func (c *Checker) getPromisedTypeOfPromiseEx(t *Type, errorNode *ast.Node, thisT return nil } result := c.getUnionTypeEx(core.Map(onfulfilledParameterSignatures, c.getTypeOfFirstParameterOfSignature), UnionReductionSubtype, nil, nil) - c.cachedTypes[key] = result + c.cachedTypes.set(c, key, result) return result } @@ -30534,7 +30992,7 @@ func (c *Checker) getTemplateLiteralType(texts []string, types []*Type) *Type { } if !addSpans(texts, types) { if tooLarge { - c.error(c.currentNode, diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite) + c.errorAtCurrentNode(diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite) return c.errorType } return c.stringType @@ -30553,10 +31011,10 @@ func (c *Checker) getTemplateLiteralType(texts []string, types []*Type) *Type { } } key := getTemplateTypeKey(newTexts, newTypes) - t := c.templateLiteralTypes[key] + t, _ := c.templateLiteralTypes.get(c, key) if t == nil { t = c.newTemplateLiteralType(newTexts, newTypes) - c.templateLiteralTypes[key] = t + c.templateLiteralTypes.intern(key, t) } return t } @@ -30626,10 +31084,10 @@ func (c *Checker) applyTemplateStringMapping(symbol *ast.Symbol, texts []string, func (c *Checker) getStringMappingTypeForGenericType(symbol *ast.Symbol, t *Type) *Type { key := StringMappingKey{s: symbol, t: t} - result := c.stringMappingTypes[key] + result, _ := c.stringMappingTypes.get(c, key) if result == nil { result = c.newStringMappingType(symbol, t) - c.stringMappingTypes[key] = result + c.stringMappingTypes.intern(key, result) } return result } @@ -30819,8 +31277,7 @@ func (c *Checker) getContextuallyTypedParameterType(parameter *ast.Node) *Type { return c.getSpreadArgumentType(args, indexOfParameter, len(args), c.anyType, nil /*context*/, CheckModeNormal) } links := c.signatureLinks.Get(iife) - cached := links.resolvedSignature - links.resolvedSignature = c.anySignature + cached := links.resolvedSignature.swap(c.anySignature) var t *Type switch { case indexOfParameter < len(args): @@ -30830,7 +31287,7 @@ func (c *Checker) getContextuallyTypedParameterType(parameter *ast.Node) *Type { default: t = c.undefinedWideningType } - links.resolvedSignature = cached + links.resolvedSignature.swap(cached) return t } contextualSignature := c.getContextualSignature(fn) @@ -31135,7 +31592,7 @@ func (c *Checker) getContextualTypeForArgumentAtIndex(callTarget *ast.Node, argI // If we're already in the process of resolving the given signature, don't resolve again as // that could cause infinite recursion. Instead, return anySignature. var signature *Signature - if c.signatureLinks.Get(callTarget).resolvedSignature == c.resolvingSignature { + if c.signatureLinks.Get(callTarget).resolvedSignature.get(c) == c.resolvingSignature { signature = c.resolvingSignature } else { signature = c.getResolvedSignature(callTarget, nil, CheckModeNormal) @@ -31180,7 +31637,7 @@ func (c *Checker) getContextualTypeForBinaryOperand(node *ast.Node, contextFlags // by the type of the left operand, except for the special case of Javascript declarations of the form // `namespace.prop = namespace.prop || {}`. t := c.getContextualType(binary.AsNode(), contextFlags) - if node == binary.Right && (t == nil || c.patternForType[t] != nil) { + if node == binary.Right && (t == nil || c.patternForType.has(c, t)) { return c.getTypeOfExpression(binary.Left) } return t @@ -31789,7 +32246,7 @@ func (c *Checker) getClassMemberDecoratorContextOverrideType(nameType *Type, isP core.IfElse(isStatic, CachedTypeKindDecoratorContextStatic, CachedTypeKindDecoratorContext), ) key := CachedTypeKey{kind: kind, typeId: nameType.id} - if overrideType := c.cachedTypes[key]; overrideType != nil { + if overrideType, _ := c.cachedTypes.get(c, key); overrideType != nil { return overrideType } members := ast.NewSymbolTable() @@ -31797,7 +32254,7 @@ func (c *Checker) getClassMemberDecoratorContextOverrideType(nameType *Type, isP members.Set("private", c.newProperty("private", core.IfElse(isPrivate, c.trueType, c.falseType))) members.Set("static", c.newProperty("static", core.IfElse(isStatic, c.trueType, c.falseType))) overrideType := c.newAnonymousType(nil, members, nil, nil, nil) - c.cachedTypes[key] = overrideType + c.cachedTypes.intern(key, overrideType) return overrideType } @@ -32015,7 +32472,7 @@ func (c *Checker) getTypeFromIndexInfosOfContextualType(t *Type, name string, na func (c *Checker) isCircularMappedProperty(symbol *ast.Symbol) bool { if symbol.CheckFlags()&ast.CheckFlagsMapped != 0 { links := c.valueSymbolLinks.Get(symbol) - return links.resolvedType == nil && c.findResolutionCycleStartIndex(symbol, TypeSystemPropertyNameType) >= 0 + return links.resolvedType.get(c) == nil && c.findResolutionCycleStartIndex(symbol, TypeSystemPropertyNameType) >= 0 } return false } @@ -32106,9 +32563,10 @@ func (d *ObjectLiteralDiscriminator) matches(index int, t *Type) bool { func (c *Checker) discriminateContextualTypeByObjectMembers(node *ast.Node, contextualType *Type) *Type { key := DiscriminatedContextualTypeKey{nodeId: ast.GetNodeId(node), typeId: contextualType.id} - if discriminated := c.discriminatedContextualTypes[key]; discriminated != nil { + if discriminated, _ := c.discriminatedContextualTypes.get(c, key); discriminated != nil { return discriminated } + c.discriminatedContextualTypes.begin(c, key) discriminated := c.getMatchingUnionConstituentForObjectLiteral(contextualType, node) if discriminated == nil { discriminantProperties := core.Filter(node.Properties(), func(p *ast.Node) bool { @@ -32130,7 +32588,8 @@ func (c *Checker) discriminateContextualTypeByObjectMembers(node *ast.Node, cont discriminator := &ObjectLiteralDiscriminator{c: c, props: discriminantProperties, members: discriminantMembers} discriminated = c.discriminateTypeByDiscriminableItems(contextualType, discriminator) } - c.discriminatedContextualTypes[key] = discriminated + c.discriminatedContextualTypes.set(c, key, discriminated) + c.endMemo() return discriminated } @@ -32629,9 +33088,11 @@ func (c *Checker) getAwaitedTypeNoAliasEx(t *Type, errorNode *ast.Node, diagnost } // If we've already cached an awaited type, return a possible `Awaited` for it. key := CachedTypeKey{kind: CachedTypeKindAwaitedType, typeId: t.id} - if awaitedType := c.cachedTypes[key]; awaitedType != nil { + if awaitedType, _ := c.cachedTypes.get(c, key); awaitedType != nil { return awaitedType } + c.cachedTypes.begin(c, key) + defer c.endMemo() // For a union, get a union of the awaited types of each constituent. if t.flags&TypeFlagsUnion != 0 { if slices.Contains(c.awaitedTypeStack, t) { @@ -32643,12 +33104,12 @@ func (c *Checker) getAwaitedTypeNoAliasEx(t *Type, errorNode *ast.Node, diagnost c.awaitedTypeStack = append(c.awaitedTypeStack, t) mapped := c.mapType(t, func(t *Type) *Type { return c.getAwaitedTypeNoAliasEx(t, errorNode, diagnosticMessage, args...) }) c.awaitedTypeStack = c.awaitedTypeStack[:len(c.awaitedTypeStack)-1] - c.cachedTypes[key] = mapped + c.cachedTypes.set(c, key, mapped) return mapped } // If `type` is generic and should be wrapped in `Awaited`, return it. if c.isAwaitedTypeNeeded(t) { - c.cachedTypes[key] = t + c.cachedTypes.set(c, key, t) return t } var thisTypeForError *Type @@ -32701,7 +33162,7 @@ func (c *Checker) getAwaitedTypeNoAliasEx(t *Type, errorNode *ast.Node, diagnost if awaitedType == nil { return nil } - c.cachedTypes[key] = awaitedType + c.cachedTypes.set(c, key, awaitedType) return awaitedType } // The type was not a promise, so it could not be unwrapped any further. @@ -32729,7 +33190,7 @@ func (c *Checker) getAwaitedTypeNoAliasEx(t *Type, errorNode *ast.Node, diagnost } return nil } - c.cachedTypes[key] = t + c.cachedTypes.set(c, key, t) return t } @@ -33026,7 +33487,7 @@ func (c *Checker) getSymbolAtLocation(node *ast.Node, ignoreErrors bool) *ast.Sy } fallthrough case ast.KindThisType: - return c.getTypeFromThisTypeNode(node).symbol + return memoTypeNode(c, node, (*Checker).getTypeFromThisTypeNode).symbol case ast.KindSuperKeyword: return c.checkExpression(node).symbol case ast.KindConstructorKeyword: @@ -33225,12 +33686,12 @@ func (c *Checker) getSymbolOfNameOrPropertyAccessExpression(name *ast.Node) *ast return c.getSymbolForPrivateIdentifierExpression(name) } else if ast.IsPropertyAccessExpression(name) || ast.IsQualifiedName(name) { links := c.symbolNodeLinks.Get(name) - if links.resolvedSymbol != nil { - return links.resolvedSymbol + if links.resolvedSymbol.get(c) != nil { + return links.resolvedSymbol.get(c) } if ast.IsPropertyAccessExpression(name) { c.checkPropertyAccessExpression(name, CheckModeNormal, false /*writeOnly*/) - if links.resolvedSymbol == nil && !ast.IsPrivateIdentifier(name.Name()) { + if links.resolvedSymbol.get(c) == nil && !ast.IsPrivateIdentifier(name.Name()) { // Not cached in links, where checking would observe it as the // property the access resolved to. return c.getApplicableIndexSymbol( @@ -33241,10 +33702,10 @@ func (c *Checker) getSymbolOfNameOrPropertyAccessExpression(name *ast.Node) *ast } else { c.checkQualifiedName(name, CheckModeNormal) } - if links.resolvedSymbol == nil && isJSDoc && ast.IsQualifiedName(name) { + if links.resolvedSymbol.get(c) == nil && isJSDoc && ast.IsQualifiedName(name) { return c.resolveJSDocMemberName(name) } - return links.resolvedSymbol + return links.resolvedSymbol.get(c) } } else if ast.IsEntityName(name) && isTypeReferenceIdentifier(name) { meaning := core.IfElse(name.Parent.Kind == ast.KindTypeReference, ast.SymbolFlagsType, ast.SymbolFlagsNamespace) @@ -33461,7 +33922,7 @@ func (c *Checker) getApplicableIndexSymbol(t *Type, keyType *Type) *ast.Symbol { symbol.SetValueDeclaration(declarations[0]) symbol.SetParent(t.symbol) links := c.valueSymbolLinks.Get(symbol) - links.resolvedType = info.valueType + links.resolvedType.set(c, info.valueType) info.indexSymbol = symbol } } @@ -33482,9 +33943,10 @@ func (c *Checker) containsArgumentsReference(node *ast.Node) bool { return false } - if containsArguments, ok := c.cachedArgumentsReferenced[node]; ok { + if containsArguments, ok := c.cachedArgumentsReferenced.get(c, node); ok { return containsArguments } + c.cachedArgumentsReferenced.begin(c, node) var visit func(node *ast.Node) bool visit = func(node *ast.Node) bool { @@ -33510,7 +33972,8 @@ func (c *Checker) containsArgumentsReference(node *ast.Node) bool { } containsArguments := visit(node.Body()) - c.cachedArgumentsReferenced[node] = containsArguments + c.cachedArgumentsReferenced.set(c, node, containsArguments) + c.endMemo() return containsArguments } diff --git a/tsc/internal/checker/checker_test.go b/tsc/internal/checker/checker_test.go index 42ae368d35924..fcc3acee0c09a 100644 --- a/tsc/internal/checker/checker_test.go +++ b/tsc/internal/checker/checker_test.go @@ -2,6 +2,9 @@ package checker_test import ( "fmt" + goast "go/ast" + "go/parser" + "go/token" "path/filepath" "strings" "testing" @@ -208,3 +211,25 @@ export type Initial = Box<"first">; assert.Equal(t, c.TypeToString(initial), "Initial") assert.Equal(t, len(c.GetDiagnostics(t.Context(), file)), 0) } + +// Memoized results must only be accessed through memo methods, which account +// for the effects of computing them. +func TestMemoValueOnlyAccessedThroughMethods(t *testing.T) { + t.Parallel() + fset := token.NewFileSet() + files, err := filepath.Glob("*.go") + assert.NilError(t, err) + for _, name := range files { + if name == "memo.go" || strings.HasSuffix(name, "_test.go") { + continue + } + file, err := parser.ParseFile(fset, name, nil, parser.SkipObjectResolution) + assert.NilError(t, err) + goast.Inspect(file, func(n goast.Node) bool { + if sel, ok := n.(*goast.SelectorExpr); ok && sel.Sel.Name == "memoValue" { + t.Errorf("%s: memo value accessed directly; use get or set", fset.Position(sel.Pos())) + } + return true + }) + } +} diff --git a/tsc/internal/checker/emitresolver.go b/tsc/internal/checker/emitresolver.go index e4fad5c3f5b1f..7223d5d4b9167 100644 --- a/tsc/internal/checker/emitresolver.go +++ b/tsc/internal/checker/emitresolver.go @@ -398,7 +398,7 @@ func (r *EmitResolver) IsReferencedAliasDeclaration(node *ast.Node) bool { if aliasLinks.referenced { return true } - target := aliasLinks.aliasTarget + target := aliasLinks.aliasTarget.get(c) if target != nil && node.ModifierFlags()&ast.ModifierFlagsExport != 0 && c.getSymbolFlags(target)&ast.SymbolFlagsValue != 0 && (c.compilerOptions.ShouldPreserveConstEnums() || !isConstEnumOrConstEnumOnlyModule(target)) { @@ -502,6 +502,12 @@ func (r *EmitResolver) MarkLinkedReferencesRecursively(file *ast.SourceFile) { defer r.checkerMu.Unlock() if file != nil { + r.checker.withReferenceMarks(func() { r.markLinkedReferencesRecursively(file) }) + } +} + +func (r *EmitResolver) markLinkedReferencesRecursively(file *ast.SourceFile) { + { var visit ast.Visitor visit = func(n *ast.Node) bool { if ast.IsImportEqualsDeclaration(n) && n.ModifierFlags()&ast.ModifierFlagsExport == 0 { diff --git a/tsc/internal/checker/flow.go b/tsc/internal/checker/flow.go index 7ee926e0f48d5..4fff394da0e98 100644 --- a/tsc/internal/checker/flow.go +++ b/tsc/internal/checker/flow.go @@ -852,11 +852,13 @@ func (c *Checker) getNarrowedType(t *Type, candidate *Type, assumeTrue bool, che return c.getNarrowedTypeWorker(t, candidate, assumeTrue, checkDerived) } key := NarrowedTypeKey{t, candidate, assumeTrue, checkDerived} - if narrowedType, ok := c.narrowedTypes[key]; ok { + if narrowedType, ok := c.narrowedTypes.get(c, key); ok { return narrowedType } + c.narrowedTypes.begin(c, key) narrowedType := c.getNarrowedTypeWorker(t, candidate, assumeTrue, checkDerived) - c.narrowedTypes[key] = narrowedType + c.narrowedTypes.set(c, key, narrowedType) + c.endMemo() return narrowedType } @@ -1346,10 +1348,22 @@ func (c *Checker) getTypeAtFlowLoopLabel(f *FlowState, flow *ast.FlowNode) FlowT return FlowType{t: f.declaredType} } key := FlowLoopKey{flowNode: flow, refKey: f.refKey} + entry, _ := c.flowLoopCache.get(c, key) + if entry == nil { + entry = &flowLoopCacheEntry{} + c.flowLoopCache.intern(key, entry) + } + c.beginMemo(memoKeyOf(entry, memoFlowLoopType)) + result := c.getTypeAtFlowLoopLabelCached(f, flow, key, entry) + c.endMemo() + return result +} + +func (c *Checker) getTypeAtFlowLoopLabelCached(f *FlowState, flow *ast.FlowNode, key FlowLoopKey, entry *flowLoopCacheEntry) FlowType { // If we have previously computed the control flow type for the reference at // this flow loop junction, return the cached type. - if cached := c.flowLoopCache[key]; cached != nil { - return FlowType{t: cached} + if entry.t != nil { + return FlowType{t: entry.t} } // If this flow loop junction and reference are already being processed, return // the union of the types computed for each branch so far, marked as incomplete. @@ -1389,8 +1403,8 @@ func (c *Checker) getTypeAtFlowLoopLabel(f *FlowState, flow *ast.FlowNode) FlowT // If we see a value appear in the cache it is a sign that control flow analysis // was restarted and completed by checkExpressionCached. We can simply pick up // the resulting type and bail out. - if cached := c.flowLoopCache[key]; cached != nil { - return FlowType{t: cached} + if entry.t != nil { + return FlowType{t: entry.t} } } antecedentTypes = core.AppendIfUnique(antecedentTypes, flowType.t) @@ -1413,7 +1427,7 @@ func (c *Checker) getTypeAtFlowLoopLabel(f *FlowState, flow *ast.FlowNode) FlowT if firstAntecedentType.incomplete { return c.newFlowType(result, true /*incomplete*/) } - c.flowLoopCache[key] = result + entry.t = result return FlowType{t: result} } @@ -1524,11 +1538,11 @@ func getCandidateVariableDeclarationInitializer(node *ast.Node) *ast.Node { // and never escape the getFlowTypeOfReference function. func (c *Checker) getEvolvingArrayType(elementType *Type) *Type { key := CachedTypeKey{kind: CachedTypeKindEvolvingArrayType, typeId: elementType.id} - result := c.cachedTypes[key] + result, _ := c.cachedTypes.get(c, key) if result == nil { result = c.newObjectType(ObjectFlagsEvolvingArray, nil) result.AsEvolvingArrayType().elementType = elementType - c.cachedTypes[key] = result + c.cachedTypes.intern(key, result) } return result } @@ -2290,7 +2304,7 @@ func (c *Checker) getTypeOfInitializer(node *ast.Node) *Type { // from its initializer, we'll already have cached the type. Otherwise we compute it now // without caching such that transient types are reflected. if c.typeNodeLinks.Has(node) { - t := c.typeNodeLinks.Get(node).resolvedType + t := c.typeNodeLinks.Get(node).resolvedType.get(c) if t != nil { return t } @@ -2432,10 +2446,12 @@ func (c *Checker) getAssignmentReducedType(declaredType *Type, assignedType *Typ return assignedType } key := AssignmentReducedKey{id1: declaredType.id, id2: assignedType.id} - result := c.assignmentReducedTypes[key] + result, _ := c.assignmentReducedTypes.get(c, key) if result == nil { + c.assignmentReducedTypes.begin(c, key) result = c.getAssignmentReducedTypeWorker(declaredType, assignedType) - c.assignmentReducedTypes[key] = result + c.assignmentReducedTypes.set(c, key, result) + c.endMemo() } return result } @@ -2555,11 +2571,13 @@ func (c *Checker) isReachableFlowNodeWorker(f *FlowState, flow *ast.FlowNode, no flags := flow.Flags if flags&ast.FlowFlagsShared != 0 { if !noCacheCheck && len(f.reduceLabels) == 0 { - if reachable, ok := c.flowNodeReachable[flow]; ok { + if reachable, ok := c.flowNodeReachable.get(c, flow); ok { return reachable } + c.flowNodeReachable.begin(c, flow) reachable := c.isReachableFlowNodeWorker(f, flow, true /*noCacheCheck*/) - c.flowNodeReachable[flow] = reachable + c.flowNodeReachable.set(c, flow, reachable) + c.endMemo() return reachable } noCacheCheck = false @@ -2641,11 +2659,13 @@ func (c *Checker) isPostSuperFlowNodeWorker(f *FlowState, flow *ast.FlowNode, no flags := flow.Flags if flags&ast.FlowFlagsShared != 0 { if !noCacheCheck { - if postSuper, ok := c.flowNodePostSuper[flow]; ok { + if postSuper, ok := c.flowNodePostSuper.get(c, flow); ok { return postSuper } + c.flowNodePostSuper.begin(c, flow) postSuper := c.isPostSuperFlowNodeWorker(f, flow, true /*noCacheCheck*/) - c.flowNodePostSuper[flow] = postSuper + c.flowNodePostSuper.set(c, flow, postSuper) + c.endMemo() } noCacheCheck = false } diff --git a/tsc/internal/checker/inference.go b/tsc/internal/checker/inference.go index 8b0cc87aedef4..c32d7812f02c8 100644 --- a/tsc/internal/checker/inference.go +++ b/tsc/internal/checker/inference.go @@ -399,7 +399,7 @@ func (c *Checker) inferFromMatchingTypes(n *InferenceState, sources []*Type, tar // when inferring from string[] | string[][] to T[] | T[][], the inference of string we make from // relating string[][] to T[][] is of higher quality than the inference of string[] we make relating // string[][] to T[]. - slices.SortFunc(matchedTargets, compareTypesAndDepth) + slices.SortFunc(matchedTargets, c.compareTypesAndDepth) for _, t := range matchedTargets { for _, s := range matchedSources { if matches(c, s, t) { @@ -418,9 +418,9 @@ func (c *Checker) inferFromMatchingTypes(n *InferenceState, sources []*Type, tar } // Compare two types first by depth and then by the regular type ordering. -func compareTypesAndDepth(t1, t2 *Type) int { - d1 := getTypeDepth(t1, 3) - d2 := getTypeDepth(t2, 3) +func (c *Checker) compareTypesAndDepth(t1, t2 *Type) int { + d1 := c.getTypeDepth(t1, 3) + d2 := c.getTypeDepth(t2, 3) if d1 != d2 { return d2 - d1 // Largest depth sorts first } @@ -431,27 +431,27 @@ func compareTypesAndDepth(t1, t2 *Type) int { // and type references, the depth is one plus the largest type argument depth. For union and // intersection types, the depth is the largest constituent type depth. For all other types, // the depth is zero. The maximum depth limits infinite recursion of circular types. -func getTypeDepth(t *Type, maxDepth int) int { +func (c *Checker) getTypeDepth(t *Type, maxDepth int) int { if maxDepth != 0 { if t.alias != nil && len(t.alias.typeArguments) != 0 { - return getTypeListDepth(t.alias.typeArguments, maxDepth-1) + 1 + return c.getTypeListDepth(t.alias.typeArguments, maxDepth-1) + 1 } if t.objectFlags&ObjectFlagsReference != 0 { - if typeArguments := t.checker.getTypeArguments(t); len(typeArguments) != 0 { - return getTypeListDepth(typeArguments, maxDepth-1) + 1 + if typeArguments := c.getTypeArguments(t); len(typeArguments) != 0 { + return c.getTypeListDepth(typeArguments, maxDepth-1) + 1 } } if t.flags&TypeFlagsUnionOrIntersection != 0 { - return getTypeListDepth(t.Types(), maxDepth) + return c.getTypeListDepth(t.Types(), maxDepth) } } return 0 } -func getTypeListDepth(types []*Type, maxDepth int) int { +func (c *Checker) getTypeListDepth(types []*Type, maxDepth int) int { depth := 0 for _, t := range types { - depth = max(depth, getTypeDepth(t, maxDepth)) + depth = max(depth, c.getTypeDepth(t, maxDepth)) } return depth } @@ -984,7 +984,7 @@ func (c *Checker) inferToMappedType(n *InferenceState, source *Type, target *Typ if constraintType.flags&TypeFlagsTypeParameter != 0 { // We're inferring from some source type S to a mapped type { [P in K]: X }, where K is a type // parameter. First infer from 'keyof S' to K. - c.inferWithPriority(n, c.getIndexTypeEx(source, core.IfElse(c.patternForType[source] != nil, IndexFlagsNoIndexSignatures, IndexFlagsNone)), constraintType, InferencePriorityMappedTypeConstraint) + c.inferWithPriority(n, c.getIndexTypeEx(source, core.IfElse(c.patternForType.has(c, source), IndexFlagsNoIndexSignatures, IndexFlagsNone)), constraintType, InferencePriorityMappedTypeConstraint) // If K is constrained to a type C, also infer to C. Thus, for a mapped type { [P in K]: X }, // where K extends keyof T, we make the same inferences as for a homomorphic mapped type // { [P in keyof T]: X }. This enables us to make meaningful inferences when the target is a @@ -1014,11 +1014,13 @@ func (c *Checker) inferToMappedType(n *InferenceState, source *Type, target *Typ // variable T[P] (i.e. we treat the type T[P] as the type variable we're inferring for). func (c *Checker) inferTypeForHomomorphicMappedType(source *Type, target *Type, constraint *Type) *Type { key := ReverseMappedTypeKey{sourceId: source.id, targetId: target.id, constraintId: constraint.id} - if cached := c.reverseHomomorphicMappedCache[key]; cached != nil { + if cached, _ := c.reverseHomomorphicMappedCache.get(c, key); cached != nil { return cached } + c.reverseHomomorphicMappedCache.begin(c, key) t := c.createReverseMappedType(source, target, constraint) - c.reverseHomomorphicMappedCache[key] = t + c.reverseHomomorphicMappedCache.set(c, key, t) + c.endMemo() return t } @@ -1076,9 +1078,10 @@ func (c *Checker) isPartiallyInferableType(t *Type) bool { func (c *Checker) inferReverseMappedType(source *Type, target *Type, constraint *Type) *Type { key := ReverseMappedTypeKey{sourceId: source.id, targetId: target.id, constraintId: constraint.id} - if cached, ok := c.reverseMappedCache[key]; ok { + if cached, ok := c.reverseMappedCache.get(c, key); ok { return core.OrElse(cached, c.unknownType) } + c.reverseMappedCache.begin(c, key) c.reverseMappedSourceStack = append(c.reverseMappedSourceStack, source) c.reverseMappedTargetStack = append(c.reverseMappedTargetStack, target) saveExpandingFlags := c.reverseExpandingFlags @@ -1095,7 +1098,8 @@ func (c *Checker) inferReverseMappedType(source *Type, target *Type, constraint c.reverseMappedSourceStack = c.reverseMappedSourceStack[:len(c.reverseMappedSourceStack)-1] c.reverseMappedTargetStack = c.reverseMappedTargetStack[:len(c.reverseMappedTargetStack)-1] c.reverseExpandingFlags = saveExpandingFlags - c.reverseMappedCache[key] = t + c.reverseMappedCache.set(c, key, t) + c.endMemo() return t } @@ -1160,11 +1164,11 @@ func (c *Checker) resolveReverseMappedTypeMembers(t *Type) { func (c *Checker) getTypeOfReverseMappedSymbol(symbol *ast.Symbol) *Type { links := c.valueSymbolLinks.Get(symbol) - if links.resolvedType == nil { + if links.resolvedType.get(c) == nil { reverseLinks := c.ReverseMappedSymbolLinks.Get(symbol) - links.resolvedType = core.OrElse(c.inferReverseMappedType(reverseLinks.propertyType, reverseLinks.mappedType, reverseLinks.constraintType), c.unknownType) + links.resolvedType.set(c, core.OrElse(c.inferReverseMappedType(reverseLinks.propertyType, reverseLinks.mappedType, reverseLinks.constraintType), c.unknownType)) } - return links.resolvedType + return links.resolvedType.get(c) } // If the original mapped type had an intersection constraint we extract its components, @@ -1250,7 +1254,7 @@ func (c *Checker) createEmptyObjectTypeFromStringLiteral(t *Type) *Type { } name := getStringLiteralValue(t) literalProp := c.newSymbol(ast.SymbolFlagsProperty, name) - c.valueSymbolLinks.Get(literalProp).resolvedType = c.anyType + c.valueSymbolLinks.Get(literalProp).resolvedType.set(c, c.anyType) if t.symbol != nil { literalProp.SetDeclarations(t.symbol.Declarations()) literalProp.SetValueDeclaration(t.symbol.ValueDeclaration()) diff --git a/tsc/internal/checker/jsx.go b/tsc/internal/checker/jsx.go index 1054f4d46f8c5..e0d5892313d65 100644 --- a/tsc/internal/checker/jsx.go +++ b/tsc/internal/checker/jsx.go @@ -265,9 +265,10 @@ func (c *Checker) getContextualTypeForChildJsxExpression(node *ast.Node, child * func (c *Checker) discriminateContextualTypeByJSXAttributes(node *ast.Node, contextualType *Type) *Type { key := DiscriminatedContextualTypeKey{nodeId: ast.GetNodeId(node), typeId: contextualType.id} - if discriminated := c.discriminatedContextualTypes[key]; discriminated != nil { + if discriminated, _ := c.discriminatedContextualTypes.get(c, key); discriminated != nil { return discriminated } + c.discriminatedContextualTypes.begin(c, key) jsxChildrenPropertyName := c.getJsxElementChildrenPropertyName(c.getJsxNamespaceAt(node)) discriminantProperties := core.Filter(node.Properties(), func(p *ast.Node) bool { symbol := p.Symbol() @@ -289,7 +290,8 @@ func (c *Checker) discriminateContextualTypeByJSXAttributes(node *ast.Node, cont }) discriminator := &ObjectLiteralDiscriminator{c: c, props: discriminantProperties, members: discriminantMembers} discriminated := c.discriminateTypeByDiscriminableItems(contextualType, discriminator) - c.discriminatedContextualTypes[key] = discriminated + c.discriminatedContextualTypes.set(c, key, discriminated) + c.endMemo() return discriminated } @@ -748,7 +750,7 @@ func (c *Checker) createJsxAttributesTypeFromAttributesProperty(openingLikeEleme attributeSymbol.SetValueDeclaration(member.ValueDeclaration()) } links := c.valueSymbolLinks.Get(attributeSymbol) - links.resolvedType = exprType + links.resolvedType.set(c, exprType) links.target = member attributesTable.Set(attributeSymbol.Name(), attributeSymbol) if allAttributesTable != nil { @@ -836,11 +838,11 @@ func (c *Checker) createJsxAttributesTypeFromAttributesProperty(openingLikeEleme links := c.valueSymbolLinks.Get(childrenPropSymbol) switch { case len(childTypes) == 1: - links.resolvedType = childTypes[0] + links.resolvedType.set(c, childTypes[0]) case childrenContextualType != nil && someType(childrenContextualType, c.isTupleLikeType): - links.resolvedType = c.createTupleType(childTypes) + links.resolvedType.set(c, c.createTupleType(childTypes)) default: - links.resolvedType = c.createArrayType(c.getUnionType(childTypes)) + links.resolvedType.set(c, c.createArrayType(c.getUnionType(childTypes))) } // Fake up a property declaration for the children childrenPropSymbol.SetValueDeclaration(c.factory.NewPropertySignatureDeclaration(nil, c.factory.NewIdentifier(jsxChildrenPropertyName), nil /*postfixToken*/, nil /*type*/, nil /*initializer*/)) @@ -1178,7 +1180,7 @@ func (c *Checker) createSignatureForJSXIntrinsic(node *ast.Node, result *Type) * // returnNode := typeSymbol && c.nodeBuilder.symbolToEntityName(typeSymbol, ast.SymbolFlagsType, node) // declaration := factory.createFunctionTypeNode(nil, []ParameterDeclaration{factory.createParameterDeclaration(nil, nil /*dotDotDotToken*/, "props", nil /*questionToken*/, c.nodeBuilder.typeToTypeNode(result, node))}, ifElse(returnNode != nil, factory.createTypeReferenceNode(returnNode, nil /*typeArguments*/), factory.createKeywordTypeNode(ast.KindAnyKeyword))) parameterSymbol := c.newSymbol(ast.SymbolFlagsFunctionScopedVariable, "props") - c.valueSymbolLinks.Get(parameterSymbol).resolvedType = result + c.valueSymbolLinks.Get(parameterSymbol).resolvedType.set(c, result) return c.newSignature(SignatureFlagsNone, nil, nil, nil, []*ast.Symbol{parameterSymbol}, elementType, nil, 1) } @@ -1212,9 +1214,19 @@ func (c *Checker) getIntrinsicAttributesTypeFromJsxOpeningLikeElement(node *ast. // string index signature (in which case nodeLinks.jsxFlags will be IntrinsicIndexedElement). // May also return unknownSymbol if both of these lookups fail. func (c *Checker) getIntrinsicTagSymbol(node *ast.Node) *ast.Symbol { + if c.memoActive() { + c.symbolNodeLinks.Get(node).resolvedSymbol.begin(c) + result := c.getIntrinsicTagSymbolUncached(node) + c.endMemo() + return result + } + return c.getIntrinsicTagSymbolUncached(node) +} + +func (c *Checker) getIntrinsicTagSymbolUncached(node *ast.Node) *ast.Symbol { links := c.symbolNodeLinks.Get(node) - if links.resolvedSymbol != nil { - return links.resolvedSymbol + if links.resolvedSymbol.get(c) != nil { + return links.resolvedSymbol.get(c) } intrinsicElementsType := c.getJsxType(JsxNames.IntrinsicElements, node) if !c.isErrorType(intrinsicElementsType) { @@ -1227,31 +1239,31 @@ func (c *Checker) getIntrinsicTagSymbol(node *ast.Node) *ast.Symbol { intrinsicProp := c.getPropertyOfType(intrinsicElementsType, propName) if intrinsicProp != nil { c.jsxElementLinks.Get(node).jsxFlags |= JsxFlagsIntrinsicNamedElement - links.resolvedSymbol = intrinsicProp - return links.resolvedSymbol + links.resolvedSymbol.set(c, intrinsicProp) + return links.resolvedSymbol.get(c) } // Intrinsic string indexer case indexSymbol := c.getApplicableIndexSymbol(intrinsicElementsType, c.getStringLiteralType(propName)) if indexSymbol != nil { c.jsxElementLinks.Get(node).jsxFlags |= JsxFlagsIntrinsicIndexedElement - links.resolvedSymbol = indexSymbol - return links.resolvedSymbol + links.resolvedSymbol.set(c, indexSymbol) + return links.resolvedSymbol.get(c) } if c.getTypeOfPropertyOrIndexSignatureOfType(intrinsicElementsType, propName) != nil { c.jsxElementLinks.Get(node).jsxFlags |= JsxFlagsIntrinsicIndexedElement - links.resolvedSymbol = intrinsicElementsType.symbol - return links.resolvedSymbol + links.resolvedSymbol.set(c, intrinsicElementsType.symbol) + return links.resolvedSymbol.get(c) } // Wasn't found c.error(node, diagnostics.Property_0_does_not_exist_on_type_1, tagName.Text(), "JSX."+JsxNames.IntrinsicElements) - links.resolvedSymbol = c.unknownSymbol - return links.resolvedSymbol + links.resolvedSymbol.set(c, c.unknownSymbol) + return links.resolvedSymbol.get(c) } if c.noImplicitAny { c.error(node, diagnostics.JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists, JsxNames.IntrinsicElements) } - links.resolvedSymbol = c.unknownSymbol - return links.resolvedSymbol + links.resolvedSymbol.set(c, c.unknownSymbol) + return links.resolvedSymbol.get(c) } func (c *Checker) getJsxStatelessElementTypeAt(location *ast.Node) *Type { @@ -1449,6 +1461,13 @@ func markAsSynthetic(node *ast.Node) bool { func (c *Checker) getJsxNamespaceContainerForImplicitImport(location *ast.Node) *ast.Symbol { file := ast.GetSourceFileOfNode(location) links := c.jsxElementLinks.Get(file.AsNode()) + c.beginMemo(memoKeyOf(links, memoJsxImplicitImportContainer)) + result := c.getJsxNamespaceContainerForImplicitImportCached(file, links) + c.endMemo() + return result +} + +func (c *Checker) getJsxNamespaceContainerForImplicitImportCached(file *ast.SourceFile, links *JsxElementLinks) *ast.Symbol { if links.jsxImplicitImportContainer != nil { return core.IfElse(links.jsxImplicitImportContainer == c.unknownSymbol, nil, links.jsxImplicitImportContainer) } diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go new file mode 100644 index 0000000000000..03bba441bc29d --- /dev/null +++ b/tsc/internal/checker/memo.go @@ -0,0 +1,718 @@ +package checker + +import ( + "iter" + "maps" + "slices" + "unsafe" + + "github.com/microsoft/TypeScript/tsc/internal/ast" + + "github.com/microsoft/TypeScript/tsc/internal/core" + "github.com/microsoft/TypeScript/tsc/internal/debug" +) + +// Checker side effects and memoization +// +// Checking a file produces outputs other than types: diagnostics, reference +// marks used by unused-identifier checks, deferred nodes, and so on. Those +// outputs are produced while computing memoized results (the type of a symbol, +// the resolved symbol of an identifier, ...). If such a result is first computed +// for an API query rather than while checking, a later check reuses the cached +// result without recomputing it, so the outputs would historically either leak +// (reported for code that checking never visits) or be lost (never reported for +// code that checking does visit). Both make diagnostics depend on query history. +// +// To make checking independent of query history, a checker is either checking +// or answering queries. A query does not apply side effects. Instead it +// records them against the innermost memoized computation in progress, along +// with the memoized results that computation reused. When a check later +// reuses a memoized result, it replays the recorded effects of that result +// and everything it transitively reused, exactly as if it had computed the +// result itself. Effects produced outside any memoized computation belong +// solely to the query and are discarded. + +type memoField uint8 + +const ( + memoCell memoField = iota // A memo[T], keyed by its own address + memoWriteType + memoDeclaredType + memoTypeNodeType + memoBaseTypes + memoStructuredMembers + memoGlobal + memoTypeParameterConstraint + memoTypeParameterDefault + memoTypeAlias + memoEnumMemberValue + memoBaseConstraint + memoAccessorType + memoRegularExpression + memoContextualParameters + memoContextChecked + memoInitializerIsUndefined + memoFlowExpressionType + memoFlowLoopType + memoJsxImplicitImportContainer + memoModuleExports + memoInstantiationExpressionType + memoRelationOverflow + memoResolvedMembers // followed by one field per MembersOrExportsResolutionKind + memoSymbolExports = memoResolvedMembers + memoField(MembersOrExportsResolutionKindResolvedExports) + memoSymbolMembers = memoResolvedMembers + memoField(MembersOrExportsResolutionKindResolvedMembers) + memoFieldCount = memoResolvedMembers + 2 +) + +// memoKey identifies a memoized result: the address of the entity owning the +// cache slot (an *ast.Node, *ast.Symbol, *Type, or *Signature) shifted left by +// eight bits, plus the memoField of the slot. Packing into an integer keeps map +// operations on the fast path. Entities live as long as the program or the +// checker store, so an address cannot be reused while its keys exist. +type memoKey uint64 + +func memoKeyOf[T any](entity *T, field memoField) memoKey { + // SAFETY: Only the address is kept, as an identity; it is never turned back + // into a pointer except by symbol, whose entity outlives the key. + return memoKey(uint64(uintptr(unsafe.Pointer(entity)))<<8 | uint64(field)) +} + +type memoEffects struct { + effects []func(c *Checker) + marks []*ast.Symbol // Aliases marked referenced, also among effects; see withReferenceMarks + deps []*memoEffects + parent *memoEffects // Resolution d was most recently added to; avoids duplicate deps + entry *ast.Node // Current node when the computation started, if entered + entered bool // Whether this is the resolution of a computation, not just a set of deps + replayed bool +} + +func (f *memoEffects) addDep(d *memoEffects) { + if f == d || d.parent == f { + return + } + d.parent = f + f.deps = append(f.deps, d) +} + +// covers reports whether replaying f replays deps, checking only the direct +// dependencies of f, and only of a few, to stay cheap. +func (f *memoEffects) covers(deps []*memoEffects) bool { + if len(deps) > 16 || len(f.deps) > 64 { + return false + } + for _, d := range deps { + if d != f && !slices.Contains(f.deps, d) { + return false + } + } + return true +} + +// memoState is the memo state of one memoized result. +type memoState struct { + pending *memoEffects // Effects not yet replayed by a check +} + +// memo is a cached result. Cached checker state must live in a memo so that +// every read accounts for the effects of the computation that produced it; +// see the package comment above. The value is only accessible through +// methods. The memo state of a result is kept in the store's memo state map, +// keyed by the address of the memo, so a memo costs nothing beyond its value. +type memo[T any] struct { + memoHeader + memoValue T +} + +// memoHeader is the part of a memo independent of its type, which identifies +// it. +type memoHeader struct { + _ memoNoCopy +} + +// memoNoCopy makes go vet reject copies of a memo, which would bypass it. +type memoNoCopy struct{} + +func (*memoNoCopy) Lock() {} +func (*memoNoCopy) Unlock() {} + +func (h *memoHeader) key() memoKey { + return memoKeyOf(h, memoCell) +} + +// get returns the cached result, accounting for the effects of computing it. +func (m *memo[T]) get(c *Checker) T { + if c.memoActive() { + c.observeCell(&m.memoHeader) + } + return m.memoValue +} + +// set caches a result. When set outside the result's own computation (for +// example, the types of binding elements assigned while resolving the type of +// their declaration), the result depends on the computation setting it. +func (m *memo[T]) set(c *Checker, v T) { + m.memoValue = v + if !c.checking { + c.attachCell(&m.memoHeader) + } +} + +// setIfChanged is set for a result that every computation needing it sets +// again, such as the symbol a property access resolves to. Setting the value +// it already has comes from the same computation, whose effects are already +// retained, so it is only set when it changes. +func setIfChanged[T comparable](c *Checker, m *memo[T], v T) { + if m.memoValue != v { + m.set(c, v) + } +} + +// peek returns the cached result without accounting for effects. It is only +// for a result whose computation is in progress, where reading it does not +// observe it. +func (m *memo[T]) peek() T { + return m.memoValue +} + +// exchange replaces the cached result without accounting for effects. It is +// only for speculative computations that restore the previous result after. +func (m *memo[T]) swap(v T) T { + old := m.memoValue + m.memoValue = v + return old +} + +// init sets the result of a cell whose owner is being created. Nothing can +// observe the owner before its creator returns it, so the result needs no +// dependency of its own. +func (m *memo[T]) intern(v T) { + m.memoValue = v +} + +// enter starts the computation of the result; see beginMemo. +func (m *memo[T]) begin(c *Checker) { + c.beginMemo(m.key()) +} + +// memoMap is a map of cached results, each accounted for like a memo. The +// entries are only accessible through methods. Memo state is kept per entry +// in a side map allocated on first use by a query. +// +// An entry should be computed between enter and endMemo, so that reusing it +// replays the effects of computing that entry alone. An entry set outside its +// own computation depends on the whole enclosing computation instead. +type memoMap[K comparable, V any] struct { + _ memoNoCopy + memoEntries map[K]V + memoStates map[K]*memoState + resolvingKeys []K // Keys of computations in progress without a memo state yet +} + +// get returns the cached result for k, accounting for the effects of +// computing it. +func (m *memoMap[K, V]) get(c *Checker, k K) (V, bool) { + if m.memoStates != nil && c.memoActive() { + m.observe(c, k) + } + v, ok := m.memoEntries[k] + return v, ok +} + +// peek returns the cached result for k without observing it, for results +// that are interned and never change. +func (m *memoMap[K, V]) peek(k K) (V, bool) { + v, ok := m.memoEntries[k] + return v, ok +} + +// observe is the out of line part of get, keeping get cheap enough to inline. +// +//go:noinline +func (m *memoMap[K, V]) observe(c *Checker, k K) { + if c.observeState(m.memoStates[k]) { + c.memoCycle(m.resolvingIndex(c, k)) + } +} + +// has reports whether a result is cached for k; see get. +func (m *memoMap[K, V]) has(c *Checker, k K) bool { + _, ok := m.get(c, k) + return ok +} + +// values iterates the cached results without observing them, for +// inspection outside of checking. +func (m *memoMap[K, V]) values() iter.Seq[V] { + return maps.Values(m.memoEntries) +} + +// set caches the result for k; see memo.set. +// set caches the result for k; see memo.set. +func (m *memoMap[K, V]) set(c *Checker, k K, v V) { + if m.memoEntries == nil { + m.memoEntries = make(map[K]V) + } + m.memoEntries[k] = v + if c.memoTop != 0 { + c.attachState(m.state(k)) + } +} + +// intern caches a result constructed from the inputs in k alone, without +// consulting any cached result, so computing it has no effects to account for. +func (m *memoMap[K, V]) intern(k K, v V) { + if m.memoEntries == nil { + m.memoEntries = make(map[K]V) + } + m.memoEntries[k] = v +} + +// compute computes and caches the result for k in a computation of its own. +func (m *memoMap[K, V]) compute(c *Checker, k K, fn func() V) V { + m.begin(c, k) + v := fn() + m.set(c, k, v) + c.endMemo() + return v +} + +// enter starts the computation of the result for k; see beginMemo. +func (m *memoMap[K, V]) begin(c *Checker, k K) { + outer := m.resolvingIndex(c, k) + m.resolvingKeys = append(m.resolvingKeys, k) + c.beginResolution(0, m, len(m.resolvingKeys)-1) + if c.checking { + if c.memoPendingCount != 0 && m.memoStates != nil { + c.replayPending(m.memoStates[k]) + } + return + } + c.beginState(m.state(k), outer) +} + +// resolvingIndex returns 1 + the index in resolutions of the computation of +// the entry for k in progress, or 0. +func (m *memoMap[K, V]) resolvingIndex(c *Checker, k K) int { + i := slices.Index(m.resolvingKeys, k) + if i < 0 { + return 0 + } + for j := len(c.resolutions) - 1; j >= 0; j-- { + if f := &c.resolutions[j]; f.source == memoStateSource(m) && int(f.index) == i { + return j + 1 + } + } + panic("entry in progress without a resolution") +} + +func (m *memoMap[K, V]) popState(i int) { + clear(m.resolvingKeys[i:]) + m.resolvingKeys = m.resolvingKeys[:i] +} + +func (m *memoMap[K, V]) state(k K) *memoState { + state := m.memoStates[k] + if state == nil { + if m.memoStates == nil { + m.memoStates = make(map[K]*memoState) + } + state = &memoState{} + m.memoStates[k] = state + } + return state +} + +// memoActive reports whether reading a cached result must account for its +// effects: false in a check with nothing pending. +func (c *Checker) memoActive() bool { + return !c.checking || c.memoPendingCount != 0 +} + +// beginMemo is called on entry to a memoized function whose result for this +// input is cached in the memo state identified by key. It accounts for +// effects recorded by a previous computation of that result, and starts a +// resolution for this computation, which in a query records its effects. It +// must be matched by endMemo. +func (c *Checker) beginMemo(key memoKey) { + c.beginResolution(key, nil, 0) + if c.checking { + if c.memoPendingCount != 0 { + c.replayPending(c.memoStates[key]) + } + return + } + outer := c.resolvingIndex(key) + if outer == len(c.resolutions) { + outer = 0 + } + c.beginState(c.memoState(key), outer) +} + +// beginState is beginMemo for the memo state of a result, in a query. outer +// is 1 + the index in resolutions of the computation of the same result in +// progress, if this one re-enters it, or 0. +func (c *Checker) beginState(state *memoState, outer int) { + if state.pending != nil { + if parent := c.currentMemoEffects(); parent != nil { + parent.addDep(state.pending) + } + } + c.startEffects(state) + // Re-entering a computation in progress: the inner result is derived + // from whatever in-progress marker the outer computation left behind. + c.memoCycle(outer) +} + +// startEffects starts recording the effects of the current resolution, which +// computes the result in state. +func (c *Checker) startEffects(state *memoState) { + n := len(c.resolutions) - 1 + f := &c.resolutions[n] + f.memo = true + f.prevMemo = int32(c.memoTop) + f.result = state + f.entry = c.currentNode + c.memoTop = n + 1 +} + +// stopEffects stops recording the effects of the current resolution, +// returning it if it recorded them. +func (c *Checker) stopEffects() *resolution { + n := len(c.resolutions) - 1 + f := &c.resolutions[n] + if !f.memo { + return nil + } + c.memoTop = int(f.prevMemo) + return f +} + +func (c *Checker) memoState(key memoKey) *memoState { + state := c.memoStates[key] + if state == nil { + if c.memoStates == nil { + c.memoStates = make(map[memoKey]*memoState) + } + state = &memoState{} + c.memoStates[key] = state + } + return state +} + +// memoAttach makes the result identified by key depend on the innermost +// computation in progress, unless that computation is the result's own. +func (c *Checker) memoAttach(key memoKey) { + if c.memoTop == 0 { + return + } + c.attachState(c.memoState(key)) +} + +// attachState is memoAttach for the memo state of a result. +func (c *Checker) attachState(state *memoState) { + n := c.memoTop - 1 + if n < 0 { + return + } + if c.resolutions[n].result == state { + return + } + f := c.memoEffectsAt(n) + if state.pending == nil { + state.pending = &memoEffects{} + c.memoPendingCount++ + } + state.pending.addDep(f) +} + +// observeCell and attachCell are observeMemo and memoAttach for a memo at +// address p. They are kept out of line so that memo reads and writes are +// cheap enough to inline. +// +//go:noinline +func (c *Checker) observeCell(h *memoHeader) { + c.observeMemo(h.key()) +} + +//go:noinline +func (c *Checker) attachCell(h *memoHeader) { + c.memoAttach(h.key()) +} + +// observeMemo accounts for reading a memoized result without computing it. +func (c *Checker) observeMemo(key memoKey) { + if !c.memoActive() { + return + } + if c.observeState(c.memoStates[key]) { + c.memoCycle(c.resolvingIndex(key)) + } +} + +// observeState is observeMemo for the memo state of a result, if it has one. +// It reports whether the result is read in a query, in which case reading a +// computation in progress is left to the caller; see memoCycle. +func (c *Checker) observeState(state *memoState) bool { + if state == nil { + return false + } + if c.checking { + c.replayPending(state) + return false + } + if state.pending != nil { + if parent := c.currentMemoEffects(); parent != nil { + parent.addDep(state.pending) + } + } + return true +} + +func (c *Checker) replayPending(state *memoState) { + if state != nil && state.pending != nil { + f := state.pending + state.pending = nil + c.memoPendingCount-- + c.replayMemo(f) + } +} + +// endMemo finishes a computation started by beginMemo, retaining its effects +// for replay by later reuse of the result. The effects also become part of +// the enclosing computation, since it observed the result. +func (c *Checker) endMemo() { + if f := c.stopEffects(); f != nil && f.effects != nil { + c.retainEffects(f.result, f.effects) + } + c.endResolution() +} + +// endMemoUncached is endMemo for a computation that did not cache its result. +// Nothing can reuse the result, so its effects belong only to the enclosing +// computation, and retaining them for the result would grow them each time it +// is computed again. +func (c *Checker) endMemoUncached() { + defer c.endResolution() + res := c.stopEffects() + if res == nil || res.effects == nil { + return + } + f := res.effects + if parent := c.currentMemoEffects(); parent != nil { + if len(f.effects) == 0 && f.entry == parent.entry { + // Without effects of its own, and located like the enclosing + // computation, the computation adds nothing but what it observed. + for _, d := range f.deps { + parent.addDep(d) + } + } else { + parent.addDep(f) + } + } +} + +// retainEffects retains the effects of a computation that just finished for +// replay by later reuse of its result, and adds them to the enclosing +// computation. +func (c *Checker) retainEffects(state *memoState, f *memoEffects) { + if state.pending != nil && len(f.effects) == 0 && state.pending.covers(f.deps) { + // Computing the result again, typically to return it from a cache + // that the computation reads, observed only what computing it + // before did. Retaining that again would grow the effects of the + // result each time. + if parent := c.currentMemoEffects(); parent != nil { + parent.addDep(state.pending) + } + return + } + if state.pending != nil { + f.addDep(state.pending) + } else { + c.memoPendingCount++ + } + state.pending = f + if parent := c.currentMemoEffects(); parent != nil { + parent.addDep(f) + } +} + +func (c *Checker) replayMemo(f *memoEffects) { + c.replayEffects(f, nil, false) +} + +// replayEffects replays the effects of f and its dependencies. Effects +// located at the current node that a computation started with (see +// reportAtCurrentNode) are located at the node the reuse happens at instead, +// as they would be had the computation happened there, unless the computation +// started at a different node than the computation replaying it, which then +// fixes its location. +func (c *Checker) replayEffects(f *memoEffects, outerEntry *ast.Node, outerEntered bool) { + if f.replayed { + return + } + f.replayed = true + saveCurrentNode := c.currentNode + if f.entered { + // A computation that started at no node can be located anywhere, + // like one started at the node it is reused at. + if outerEntered && f.entry != outerEntry && f.entry != nil { + c.currentNode = f.entry + } + outerEntry, outerEntered = f.entry, true + } + for _, e := range f.effects { + e(c) + } + for _, d := range f.deps { + c.replayEffects(d, outerEntry, outerEntered) + } + c.currentNode = saveCurrentNode + f.effects = nil + f.deps = nil +} + +// atMemoStartNode reports whether the current node is the one the innermost +// computation in progress started with. +func (c *Checker) atMemoStartNode() bool { + n := c.memoTop - 1 + return n >= 0 && c.resolutions[n].entry == c.currentNode +} + +func (c *Checker) currentMemoEffects() *memoEffects { + if c.memoTop == 0 { + return nil + } + return c.memoEffectsAt(c.memoTop - 1) +} + +// recordEffect records a side effect produced by a query against the +// innermost memoized computation, if any. Callers must only call this when +// !c.checking, and must not apply the effect themselves. +func (c *Checker) recordEffect(effect func(c *Checker)) { + if f := c.currentMemoEffects(); f != nil { + f.effects = append(f.effects, effect) + } +} + +// recordReferenceMark records marking an alias referenced, an effect that +// emit applies itself (see withReferenceMarks). +func (c *Checker) recordReferenceMark(symbol *ast.Symbol) { + if f := c.currentMemoEffects(); f != nil { + f.effects = append(f.effects, func(c *Checker) { c.markAliasSymbolAsReferenced(symbol) }) + f.marks = append(f.marks, symbol) + } +} + +// withReferenceMarks runs fn as a query, then marks referenced the aliases +// that everything fn computed would mark, which emit relies on to elide +// imports. Unlike checking, it reports nothing, so diagnostics do not depend +// on whether a file was emitted before it was checked. Other effects stay +// pending for checking to replay. +func (c *Checker) withReferenceMarks(fn func()) { + debug.Assert(!c.checking && c.memoTop == 0, "withReferenceMarks inside a computation") + c.beginResolution(0, nil, 0) + c.startEffects(&memoState{}) + fn() + f := c.stopEffects().effects + c.endResolution() + if f == nil { + return + } + var marks []*ast.Symbol + visited := make(map[*memoEffects]struct{}) + var collect func(f *memoEffects) + collect = func(f *memoEffects) { + if _, ok := visited[f]; ok { + return + } + visited[f] = struct{}{} + marks = append(marks, f.marks...) + for _, d := range f.deps { + collect(d) + } + } + collect(f) + for _, symbol := range marks { + c.withReferenceMarks(func() { c.referenceAliasSymbol(symbol) }) + } +} + +// withChecking runs fn in a check. +func (c *Checker) withChecking(fn func()) { + // Checking starts only from top-level requests, so any resolution left at + // this point was never exited and would absorb unrelated effects. + debug.Assert(c.memoTop == 0, "memo resolution leaked") + saveChecking := c.checking + c.checking = true + fn() + c.checking = saveChecking +} + +// memoCycle is called when a computation observes another computation that is +// still in progress, whose resolution is at index depth-1. Every computation +// started since then produced its result from the incomplete state of that +// computation, so reusing any of them must also replay the effects of the +// whole cycle (for example, its circularity error). +func (c *Checker) memoCycle(depth int) { + if depth == 0 || !c.resolutions[depth-1].memo { + // The outer computation does not record effects. + return + } + outer := c.memoEffectsAt(depth - 1) + for i := depth; i < len(c.resolutions); i++ { + if !c.resolutions[i].memo { + continue + } + c.memoEffectsAt(i).addDep(outer) + } +} + +func (c *Checker) memoEffectsAt(i int) *memoEffects { + f := c.resolutions[i].effects + if f == nil { + f = &memoEffects{entry: c.resolutions[i].entry, entered: true} + c.resolutions[i].effects = f + } + return f +} + +// typeResolutionMemo returns the address of the memo caching the result of +// a type resolution, or nil if it is not cached in a memo. +func (c *Checker) typeResolutionMemo(r *TypeResolution) *memoHeader { + switch r.propertyName { + case TypeSystemPropertyNameType: + return &c.valueSymbolLinks.Get(r.target.(*ast.Symbol)).resolvedType.memoHeader + case TypeSystemPropertyNameDeclaredType: + return &c.typeAliasLinks.Get(r.target.(*ast.Symbol)).declaredType.memoHeader + case TypeSystemPropertyNameResolvedBaseTypes: + return &r.target.(*Type).AsInterfaceType().resolvedBaseTypes.memoHeader + case TypeSystemPropertyNameResolvedBaseConstructorType: + return &r.target.(*Type).AsInterfaceType().resolvedBaseConstructorType.memoHeader + case TypeSystemPropertyNameResolvedReturnType: + return &r.target.(*Signature).resolvedReturnType.memoHeader + case TypeSystemPropertyNameResolvedBaseConstraint: + return &r.target.(*Type).AsConstrainedType().resolvedBaseConstraint.memoHeader + case TypeSystemPropertyNameWriteType: + if extra := c.valueSymbolLinks.Get(r.target.(*ast.Symbol)).extra; extra != nil { + return &extra.writeType.memoHeader + } + case TypeSystemPropertyNameAliasTarget: + return &c.aliasSymbolLinks.Get(r.target.(*ast.Symbol)).aliasTarget.memoHeader + case TypeSystemPropertyNameComputedPropertyName: + return &c.typeNodeLinks.Get(r.target.(*ast.Node)).resolvedType.memoHeader + } + return nil +} + +// memoizeGlobal memoizes the resolution of a global, replaying effects of +// the resolution wherever the cached result is observed. +func memoizeGlobal[T any](c *Checker, fn func() T) func() T { + cell := &struct{ resolve func() T }{resolve: core.Memoize(fn)} + return func() T { + c.beginMemo(memoKeyOf(cell, memoGlobal)) + result := cell.resolve() + c.endMemo() + return result + } +} diff --git a/tsc/internal/checker/nodebuilderimpl.go b/tsc/internal/checker/nodebuilderimpl.go index 7c90f3f320fbc..183af5a452ee3 100644 --- a/tsc/internal/checker/nodebuilderimpl.go +++ b/tsc/internal/checker/nodebuilderimpl.go @@ -519,7 +519,7 @@ func (b *NodeBuilderImpl) tryGetResolvedSymbolFromTypeNode(node *ast.Node) *ast. if links == nil { return nil } - return links.resolvedSymbol + return links.resolvedSymbol.get(b.ch) } func (b *NodeBuilderImpl) existingTypeNodeIsNotReferenceOrIsReferenceWithCompatibleTypeArgumentCount(existing *ast.TypeNode, t *Type) bool { @@ -2063,9 +2063,9 @@ func (c *Checker) getExpandedParameters(sig *Signature, skipUnionExpanding bool) symbol := c.newSymbolEx(ast.SymbolFlagsFunctionScopedVariable, name, checkFlags) links := c.valueSymbolLinks.Get(symbol) if flags&ElementFlagsRest != 0 { - links.resolvedType = c.createArrayType(t) + links.resolvedType.set(c, c.createArrayType(t)) } else { - links.resolvedType = t + links.resolvedType.set(c, t) } return symbol }) @@ -2669,7 +2669,7 @@ func (b *NodeBuilderImpl) addPropertyToElementList(propertySymbol *ast.Symbol, t typeElements = append(typeElements, fakeGetterDeclaration) setterParam := b.ch.newSymbol(ast.SymbolFlagsFunctionScopedVariable, "arg") - b.ch.valueSymbolLinks.Get(setterParam).resolvedType = writeType + b.ch.valueSymbolLinks.Get(setterParam).resolvedType.set(b.ch, writeType) fakeSetterSignature := b.ch.newSignature(SignatureFlagsNone, nil, nil, nil, []*ast.Symbol{setterParam}, b.ch.voidType, nil, 0) fakeSetterDeclaration := b.signatureToSignatureDeclarationHelper(fakeSetterSignature, ast.KindSetAccessor, &SignatureToSignatureDeclarationOptions{ name: propertyName, diff --git a/tsc/internal/checker/relater.go b/tsc/internal/checker/relater.go index 81f50460d9875..0dd3995acb41a 100644 --- a/tsc/internal/checker/relater.go +++ b/tsc/internal/checker/relater.go @@ -98,7 +98,35 @@ func asRecursionId[T *ast.Node | *ast.Symbol | *Type](value T) RecursionId { } type Relation struct { - results map[CacheHashKey]RelationComparisonResult + results map[CacheHashKey]RelationComparisonResult + overflows map[CacheHashKey]*relationOverflow +} + +// relationOverflow identifies the computation that found a relation to be +// too complex, whose errors are replayed wherever the cached result is used. +type relationOverflow struct { + _ byte // ensure distinct addresses +} + +func (r *Relation) overflowCell(key CacheHashKey) *relationOverflow { + if r.overflows == nil { + r.overflows = make(map[CacheHashKey]*relationOverflow) + } + cell := r.overflows[key] + if cell == nil { + cell = &relationOverflow{} + r.overflows[key] = cell + } + return cell +} + +func (c *Checker) observeRelationOverflow(relation *Relation, key CacheHashKey) { + if c.memoActive() { + if cell := relation.overflows[key]; cell != nil { + c.beginMemo(memoKeyOf(cell, memoRelationOverflow)) + c.endMemo() + } + } } func (r *Relation) get(key CacheHashKey) RelationComparisonResult { @@ -192,9 +220,12 @@ func (c *Checker) isTypeRelatedTo(source *Type, target *Type, relation *Relation } } if source.flags&TypeFlagsObject != 0 && target.flags&TypeFlagsObject != 0 { - id, _ := getRelationKey(source, target, IntersectionStateNone, relation == c.identityRelation, false) + id, _ := c.getRelationKey(source, target, IntersectionStateNone, relation == c.identityRelation, false) related := relation.get(id) if related != RelationComparisonResultNone { + if related&RelationComparisonResultOverflow != 0 { + c.observeRelationOverflow(relation, id) + } return related&RelationComparisonResultSucceeded != 0 } } @@ -290,9 +321,22 @@ func (c *Checker) isEnumTypeRelatedTo(source *ast.Symbol, target *ast.Symbol, er return false } key := EnumRelationKey{sourceId: ast.GetSymbolId(sourceSymbol), targetId: ast.GetSymbolId(targetSymbol)} - if entry := c.enumRelation[key]; entry != RelationComparisonResultNone && !(entry&RelationComparisonResultFailed != 0 && errorReporter != nil) { - return entry&RelationComparisonResultSucceeded != 0 - } + entry, _ := c.enumRelation.get(c, key) + if entry != RelationComparisonResultNone { + if entry&RelationComparisonResultFailed == 0 || errorReporter == nil { + return entry&RelationComparisonResultSucceeded != 0 + } + // Recompute a cached failure only to elaborate it. + return c.isEnumTypeRelatedToUncached(sourceSymbol, targetSymbol, errorReporter) + } + c.enumRelation.begin(c, key) + related := c.isEnumTypeRelatedToUncached(sourceSymbol, targetSymbol, errorReporter) + c.enumRelation.set(c, key, core.IfElse(related, RelationComparisonResultSucceeded, RelationComparisonResultFailed)) + c.endMemo() + return related +} + +func (c *Checker) isEnumTypeRelatedToUncached(sourceSymbol *ast.Symbol, targetSymbol *ast.Symbol, errorReporter ErrorReporter) bool { targetEnumType := c.getTypeOfSymbol(targetSymbol) for _, sourceProperty := range c.getPropertiesOfType(c.getTypeOfSymbol(sourceSymbol)) { if sourceProperty.Flags()&ast.SymbolFlagsEnumMember != 0 { @@ -301,7 +345,6 @@ func (c *Checker) isEnumTypeRelatedTo(source *ast.Symbol, target *ast.Symbol, er if errorReporter != nil { errorReporter(diagnostics.Property_0_is_missing_in_type_1, c.symbolToString(sourceProperty), c.TypeToStringEx(c.getDeclaredTypeOfSymbol(targetSymbol), nil /*enclosingDeclaration*/, TypeFormatFlagsUseFullyQualifiedType, nil)) } - c.enumRelation[key] = RelationComparisonResultFailed return false } sourceValue := c.getEnumMemberValue(ast.GetDeclarationOfKind(sourceProperty, ast.KindEnumMember)).Value @@ -312,7 +355,6 @@ func (c *Checker) isEnumTypeRelatedTo(source *ast.Symbol, target *ast.Symbol, er if errorReporter != nil { errorReporter(diagnostics.Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given, c.symbolToString(targetSymbol), c.symbolToString(targetProperty), c.valueToString(targetValue), c.valueToString(sourceValue)) } - c.enumRelation[key] = RelationComparisonResultFailed return false } // At this point we know that at least one of the values is 'undefined'. @@ -328,13 +370,11 @@ func (c *Checker) isEnumTypeRelatedTo(source *ast.Symbol, target *ast.Symbol, er knownStringValue := core.OrElse(sourceValue, targetValue) errorReporter(diagnostics.One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value, c.symbolToString(targetSymbol), c.symbolToString(targetProperty), c.valueToString(knownStringValue)) } - c.enumRelation[key] = RelationComparisonResultFailed return false } } } } - c.enumRelation[key] = RelationComparisonResultSucceeded return true } @@ -372,15 +412,22 @@ func (c *Checker) checkTypeRelatedToEx( result := r.isRelatedToEx(source, target, RecursionFlagsBoth, errorNode != nil /*reportErrors*/, headMessage, IntersectionStateNone) if r.overflow { // Record this relation as having failed such that we don't attempt the overflowing operation again. - id, _ := getRelationKey(source, target, IntersectionStateNone, relation == c.identityRelation, false /*ignoreConstraints*/) + id, _ := c.getRelationKey(source, target, IntersectionStateNone, relation == c.identityRelation, false /*ignoreConstraints*/) relation.set(id, RelationComparisonResultFailed|RelationComparisonResultComplexityOverflow) + c.beginMemo(memoKeyOf(relation.overflowCell(id), memoRelationOverflow)) if tr := c.tracer; tr != nil { tr.Instant(tracing.PhaseCheckTypes, "checkTypeRelatedTo_DepthLimit", map[string]any{"sourceId": source.id, "targetId": target.id, "depth": len(r.sourceStack), "targetDepth": len(r.targetStack)}) } - if errorNode == nil { - errorNode = c.currentNode + message, sourceString, targetString := diagnostics.Excessive_complexity_comparing_types_0_and_1, c.TypeToString(source), c.TypeToString(target) + switch { + case errorNode != nil: + c.reportDiagnostic(NewDiagnosticForNode(errorNode, message, sourceString, targetString), diagnosticOutput) + case diagnosticOutput != nil: + c.reportDiagnostic(NewDiagnosticForNode(c.currentNode, message, sourceString, targetString), diagnosticOutput) + default: + c.errorAtCurrentNode(message, sourceString, targetString) } - c.reportDiagnostic(NewDiagnosticForNode(errorNode, diagnostics.Excessive_complexity_comparing_types_0_and_1, c.TypeToString(source), c.TypeToString(target)), diagnosticOutput) + c.endMemo() } else if r.errorChain != nil { // Check if we should issue an extra diagnostic to produce a quickfix for a slightly incorrect import statement if headMessage != nil && errorNode != nil && result == TernaryFalse && source.symbol != nil && c.exportTypeLinks.Has(source.symbol) { @@ -767,7 +814,7 @@ func isExcessPropertyCheckTarget(t *Type) bool { // structurally equal to at least maxDepth levels, but unequal at some level beyond that. func (c *Checker) isDeeplyNestedType(t *Type, stack []*Type, maxDepth int) bool { if len(stack) >= maxDepth { - target := getRecursionIdentityTarget(t) + target := c.getRecursionIdentityTarget(t) if target.flags&TypeFlagsIntersection != 0 { for _, t := range target.Types() { if c.isDeeplyNestedType(t, stack, maxDepth) { @@ -779,7 +826,7 @@ func (c *Checker) isDeeplyNestedType(t *Type, stack []*Type, maxDepth int) bool count := 0 lastGeneration := 0 for _, t := range stack { - if hasMatchingRecursionIdentity(t, identity) { + if c.hasMatchingRecursionIdentity(t, identity) { // We only count occurrences of a generation at least that of the previous occurrence, since // newer instantiations caused by recursion are built from the previous ones, whereas nested // type arguments are older than the types they are arguments of. @@ -828,7 +875,7 @@ func (c *Checker) typeGeneration(t *Type) int { if prop.Flags()&ast.SymbolFlagsTransient == 0 || prop.CheckFlags()&(ast.CheckFlagsInstantiated|ast.CheckFlagsMapped|ast.CheckFlagsReverseMapped|ast.CheckFlagsDeferredType) != 0 { continue } - if propType := c.valueSymbolLinks.Get(prop).resolvedType; propType != nil { + if propType := c.valueSymbolLinks.Get(prop).resolvedType.get(c); propType != nil { generation = max(generation, c.typeGeneration(propType)+1) } } @@ -896,11 +943,11 @@ func (c *Checker) deeplyNestedStart(t *Type, stack []*Type, maxDepth int) int { return 0 } -func hasMatchingRecursionIdentity(t *Type, identity RecursionId) bool { - target := getRecursionIdentityTarget(t) +func (c *Checker) hasMatchingRecursionIdentity(t *Type, identity RecursionId) bool { + target := c.getRecursionIdentityTarget(t) if target.flags&TypeFlagsIntersection != 0 { for _, t := range target.Types() { - if hasMatchingRecursionIdentity(t, identity) { + if c.hasMatchingRecursionIdentity(t, identity) { return true } } @@ -909,8 +956,8 @@ func hasMatchingRecursionIdentity(t *Type, identity RecursionId) bool { return getRecursionIdentityFromTarget(target) == identity } -func getRecursionIdentity(t *Type) RecursionId { - return getRecursionIdentityFromTarget(getRecursionIdentityTarget(t)) +func (c *Checker) getRecursionIdentity(t *Type) RecursionId { + return getRecursionIdentityFromTarget(c.getRecursionIdentityTarget(t)) } // Get the recursion identity target type from a type. Recursively (a) obtain the target object type of an @@ -919,15 +966,15 @@ func getRecursionIdentity(t *Type) RecursionId { // to explicitly written object literals. For example in `Mapped<{ x: Mapped<{ x: Mapped<{ x: string }>}>}>`, // each of the mapped type applications will have a unique recursion identity (that of their target object type // literal) and thus avoid appearing deeply nested. -func getRecursionIdentityTarget(t *Type) *Type { +func (c *Checker) getRecursionIdentityTarget(t *Type) *Type { if t.flags&TypeFlagsIndexedAccess != 0 { - return getRecursionIdentityTarget(t.AsIndexedAccessType().objectType) + return c.getRecursionIdentityTarget(t.AsIndexedAccessType().objectType) } if t.objectFlags&ObjectFlagsInstantiatedMapped == ObjectFlagsInstantiatedMapped { - target := t.checker.getModifiersTypeFromMappedType(t) + target := c.getModifiersTypeFromMappedType(t) if target != nil && (target.symbol != nil || target.flags&TypeFlagsIntersection != 0 && core.Some(target.Types(), func(t *Type) bool { return t.symbol != nil })) { - return getRecursionIdentityTarget(target) + return c.getRecursionIdentityTarget(target) } } return t @@ -1455,7 +1502,7 @@ func (c *Checker) getVariancesWorker(symbol *ast.Symbol, typeParameters []*Type) if stackIndex < 0 { saveResolutionStart := c.resolutionStart if len(c.varianceStack) == 0 { - c.resolutionStart = len(c.typeResolutions) + c.resolutionStart = len(c.resolutions) } c.varianceStack = append(c.varianceStack, VarianceStackEntry{symbol, typeParameters}) variances := make([]VarianceFlags, len(typeParameters)) @@ -2168,7 +2215,7 @@ func (c *Checker) getTypePredicateOfSignature(sig *Signature) *TypePredicate { if ast.IsTypePredicateNode(typeNode) { sig.setResolvedTypePredicate(c, c.createTypePredicateFromTypePredicateNode(typeNode, sig)) } - case ast.IsFunctionLikeDeclaration(sig.declaration) && (sig.resolvedReturnType == nil || sig.resolvedReturnType.flags&TypeFlagsBoolean != 0) && c.getParameterCount(sig) > 0: + case ast.IsFunctionLikeDeclaration(sig.declaration) && (sig.resolvedReturnType.get(c) == nil || sig.resolvedReturnType.get(c).flags&TypeFlagsBoolean != 0) && c.getParameterCount(sig) > 0: sig.setResolvedTypePredicate(c, c.noTypePredicate) // avoid infinite loop sig.setResolvedTypePredicate(c, c.getTypePredicateFromBody(sig.declaration)) } @@ -2251,7 +2298,7 @@ func (c *Checker) isResolvingReturnTypeOfSignature(signature *Signature) bool { if signature.getComposite() != nil && core.Some(signature.getComposite().signatures, c.isResolvingReturnTypeOfSignature) { return true } - return signature.resolvedReturnType == nil && c.findResolutionCycleStartIndex(signature, TypeSystemPropertyNameResolvedReturnType) >= 0 + return signature.resolvedReturnType.get(c) == nil && c.findResolutionCycleStartIndex(signature, TypeSystemPropertyNameResolvedReturnType) >= 0 } func (c *Checker) findMatchingSignatures(signatureLists [][]*Signature, signature *Signature, listIndex int) []*Signature { @@ -3249,13 +3296,16 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError // important to have well-defined behavior even in cases that shouldn't normally occur. return TernaryFalse } - id, constrained := getRelationKey(source, target, intersectionState, r.relation == r.c.identityRelation, false /*ignoreConstraints*/) + id, constrained := r.c.getRelationKey(source, target, intersectionState, r.relation == r.c.identityRelation, false /*ignoreConstraints*/) if entry := r.relation.get(id); entry != RelationComparisonResultNone { if reportErrors && entry&RelationComparisonResultFailed != 0 && entry&RelationComparisonResultOverflow == 0 { // We are elaborating errors and the cached result is a failure not due to a comparison overflow, // so we will do the comparison again to generate an error message. } else { r.c.reliabilityFlags |= entry & (RelationComparisonResultReportsUnmeasurable | RelationComparisonResultReportsUnreliable) + if entry&RelationComparisonResultOverflow != 0 { + r.c.observeRelationOverflow(r.relation, id) + } if reportErrors && entry&RelationComparisonResultOverflow != 0 { r.reportError(diagnostics.Excessive_complexity_comparing_types_0_and_1, r.c.TypeToString(source), r.c.TypeToString(target)) } @@ -3277,7 +3327,7 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError // type parameters. For such keys we also check against the key we would have gotten if all type parameters // were unconstrained. if constrained { - broadestEquivalentId, _ := getRelationKey(source, target, intersectionState, r.relation == r.c.identityRelation, true /*ignoreConstraints*/) + broadestEquivalentId, _ := r.c.getRelationKey(source, target, intersectionState, r.relation == r.c.identityRelation, true /*ignoreConstraints*/) if i, ok := r.maybeKeysSet[broadestEquivalentId]; ok { return r.assume(i) } @@ -3346,7 +3396,10 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError if tr := r.c.tracer; tr != nil { defer tr.Push(tracing.PhaseCheckTypes, "structuredTypeRelatedTo", map[string]any{"sourceId": source.id, "targetId": target.id}, false)() } + // A cached comparison is a computation of its own; see resolution. + r.c.beginResolution(0, nil, 0) result = r.structuredTypeRelatedTo(source, target, reportErrors, intersectionState) + r.c.endResolution() } propagatingVarianceFlags := r.c.reliabilityFlags r.c.reliabilityFlags |= saveReliabilityFlags @@ -3423,6 +3476,8 @@ func (r *Relater) truncate(depth int) { r.truncated = true } +// resetMaybeStack ends the comparisons since maybeStart, recording them as +// related if markAllAsSucceeded. func (r *Relater) resetMaybeStack(maybeStart int, propagatingVarianceFlags RelationComparisonResult, markAllAsSucceeded bool) { for i := maybeStart; i < len(r.maybeKeys); i++ { key := r.maybeKeys[i].key @@ -5000,7 +5055,7 @@ func (r *Relater) reportErrorResults(originalSource *Type, originalTarget *Type, r.reportRelationError(headMessage, source, target) if source.flags&TypeFlagsTypeParameter != 0 && source.symbol != nil && len(source.symbol.Declarations()) != 0 && r.c.getConstraintOfType(source) == nil { syntheticParam := r.c.cloneTypeParameter(source) - syntheticParam.AsTypeParameter().constraint = r.c.instantiateType(target, newSimpleTypeMapper(source, syntheticParam)) + syntheticParam.AsTypeParameter().constraint.intern(r.c.instantiateType(target, newSimpleTypeMapper(source, syntheticParam))) if r.c.hasNonCircularBaseConstraint(syntheticParam) { targetConstraintString := r.c.TypeToString(target) r.relatedInfo = append(r.relatedInfo, NewDiagnosticForNode(source.symbol.Declarations()[0], diagnostics.This_type_parameter_might_need_an_extends_0_constraint, targetConstraintString)) @@ -5028,7 +5083,7 @@ func (r *Relater) reportRelationError(message *diagnostics.Message, source *Type if targetFlags&TypeFlagsTypeParameter != 0 && target != r.c.markerSuperTypeForCheck && target != r.c.markerSubTypeForCheck { constraint := r.c.getBaseConstraintOfType(target) switch { - case IsDistributedTypeParameter(target) && r.c.isTypeAssignableTo(generalizedSource, target.AsTypeParameter().constraint): + case IsDistributedTypeParameter(target) && r.c.isTypeAssignableTo(generalizedSource, target.AsTypeParameter().constraint.get(r.c)): r.reportError(diagnostics.X_0_is_only_assignable_to_the_non_distributed_1_but_1_has_been_distributed_here, generalizedSourceType, targetType) case constraint != nil && r.c.isTypeAssignableTo(generalizedSource, constraint): r.reportError(diagnostics.X_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_constraint_2, generalizedSourceType, targetType, r.c.TypeToString(constraint)) diff --git a/tsc/internal/checker/resolutions.go b/tsc/internal/checker/resolutions.go new file mode 100644 index 0000000000000..ba147bc321e2c --- /dev/null +++ b/tsc/internal/checker/resolutions.go @@ -0,0 +1,101 @@ +package checker + +import ( + "github.com/microsoft/TypeScript/tsc/internal/ast" + "github.com/microsoft/TypeScript/tsc/internal/debug" +) + +// A resolution is a computation in progress: a memoized computation, a cached +// comparison, or a checked node. The innermost is the last in +// Checker.resolutions, above a root resolution for work outside any of them. +type resolution struct { + // The resolution computes the memo identified by key, or the entry + // source tracks at index, if either is given. + key memoKey + source memoStateSource + index int32 + + // A query records the effects of a memoized computation, for replay by + // reuse of its result; see memo.go. + memo bool + prevMemo int32 // Checker.memoTop on entry + result *memoState // Memo state of the result computed + effects *memoEffects // Allocated on first use + entry *ast.Node // Current node when the computation started + + // A type resolution is a computation that re-entering detects as a cycle; + // see beginTypeResolution. Its other fields are those of the resolution + // below it, whose work it shares. + isTypeResolution bool + prevTypeResolution int32 // Checker.typeResolutionTop on entry + typeResolution TypeResolution +} + +// A memoStateSource tracks the entries of a memo map whose computations are +// in progress. +type memoStateSource interface { + popState(i int) +} + +func (c *Checker) initResolutions() { + c.resolutions = []resolution{{}} +} + +func (c *Checker) currentResolution() *resolution { + return &c.resolutions[len(c.resolutions)-1] +} + +// beginResolution starts a resolution for a computation of key, or of the +// entry source tracks at index, or for neither, such as for checking a node. +func (c *Checker) beginResolution(key memoKey, source memoStateSource, index int) { + if key != 0 { + c.beginResolving(key) + } + c.resolutions = append(c.resolutions, resolution{ + key: key, + source: source, + index: int32(index), + }) +} + +// endResolution finishes the current resolution. +func (c *Checker) endResolution() { + n := len(c.resolutions) - 1 + f := &c.resolutions[n] + debug.Assert(!f.isTypeResolution, "resolution left on the stack") + c.endResolving(f, n) + if f.source != nil { + f.source.popState(int(f.index)) + } + c.resolutions[n] = resolution{} + c.resolutions = c.resolutions[:n] +} + +// resolvingIndex returns 1 + the index in resolutions of the outermost +// computation of key in progress, or 0. +func (c *Checker) resolvingIndex(key memoKey) int { + if i, ok := c.resolving[key]; ok { + return int(i) + 1 + } + return 0 +} + +// beginResolving records that the resolution about to be pushed computes key, +// unless a computation of key is already in progress. +func (c *Checker) beginResolving(key memoKey) { + if _, ok := c.resolving[key]; ok { + return + } + if c.resolving == nil { + c.resolving = make(map[memoKey]int32) + } + c.resolving[key] = int32(len(c.resolutions)) +} + +// endResolving records that the resolution at index n no longer computes its +// key. +func (c *Checker) endResolving(f *resolution, n int) { + if f.key != 0 && c.resolving[f.key] == int32(n) { + delete(c.resolving, f.key) + } +} diff --git a/tsc/internal/checker/services.go b/tsc/internal/checker/services.go index a40093e14a94c..8f3206adfddff 100644 --- a/tsc/internal/checker/services.go +++ b/tsc/internal/checker/services.go @@ -369,22 +369,19 @@ func (c *Checker) runWithoutResolvedSignatureCaching[T any](node *ast.Node, fn f cachedTypes := make(map[*ValueSymbolLinks]*Type) for ancestorNode != nil { signatureLinks := c.signatureLinks.Get(ancestorNode) - cachedResolvedSignatures[signatureLinks] = signatureLinks.resolvedSignature - signatureLinks.resolvedSignature = nil + cachedResolvedSignatures[signatureLinks] = signatureLinks.resolvedSignature.swap(nil) if ast.IsFunctionExpressionOrArrowFunction(ancestorNode) { symbolLinks := c.valueSymbolLinks.Get(c.getSymbolOfDeclaration(ancestorNode)) - resolvedType := symbolLinks.resolvedType - cachedTypes[symbolLinks] = resolvedType - symbolLinks.resolvedType = nil + cachedTypes[symbolLinks] = symbolLinks.resolvedType.swap(nil) } ancestorNode = ast.FindAncestor(ancestorNode.Parent, ast.IsCallLikeOrFunctionLikeExpression) } result := fn() for signatureLinks, resolvedSignature := range cachedResolvedSignatures { - signatureLinks.resolvedSignature = resolvedSignature + signatureLinks.resolvedSignature.swap(resolvedSignature) } for symbolLinks, resolvedType := range cachedTypes { - symbolLinks.resolvedType = resolvedType + symbolLinks.resolvedType.swap(resolvedType) } return result } @@ -870,10 +867,10 @@ func (c *Checker) GetConstantValue(node *ast.Node) any { return c.getEnumMemberValue(node).Value } - if c.symbolNodeLinks.Get(node).resolvedSymbol == nil { + if c.symbolNodeLinks.Get(node).resolvedSymbol.get(c) == nil { c.checkExpressionCached(node) // ensure cached resolved symbol is set } - symbol := c.symbolNodeLinks.Get(node).resolvedSymbol + symbol := c.symbolNodeLinks.Get(node).resolvedSymbol.get(c) if symbol == nil && ast.IsEntityNameExpression(node) { symbol = c.resolveEntityName( node, diff --git a/tsc/internal/checker/symbolaccessibility.go b/tsc/internal/checker/symbolaccessibility.go index 204062db49de0..35bf5b6d778e1 100644 --- a/tsc/internal/checker/symbolaccessibility.go +++ b/tsc/internal/checker/symbolaccessibility.go @@ -374,7 +374,7 @@ func (c *Checker) getContainersOfSymbol(symbol *ast.Symbol, enclosingDeclaration continue } c.checkExpressionCached(d.Parent.AsBinaryExpression().Left.Expression()) - sym := c.symbolNodeLinks.Get(d.Parent.AsBinaryExpression().Left.Expression()).resolvedSymbol + sym := c.symbolNodeLinks.Get(d.Parent.AsBinaryExpression().Left.Expression()).resolvedSymbol.get(c) if sym != nil && !slices.Contains(candidates, sym) { candidates = append(candidates, sym) } @@ -573,10 +573,8 @@ func (c *Checker) getSymbolTableAliases(symbols ast.SymbolTable, tableId symbolT // Cache globals and exports tables (which are large and revisited often). // Locals tables are small and per-scope, so they are filtered but not cached. if kind == stKindGlobals || kind == stKindExports || kind == stKindResolvedExports { - if c.symbolTableAliasCache != nil { - if aliases, ok := c.symbolTableAliasCache[tableId]; ok { - return aliases - } + if aliases, ok := c.symbolTableAliasCache.get(c, tableId); ok { + return aliases } } var aliases []*ast.Symbol @@ -586,10 +584,7 @@ func (c *Checker) getSymbolTableAliases(symbols ast.SymbolTable, tableId symbolT } } if kind == stKindGlobals || kind == stKindExports || kind == stKindResolvedExports { - if c.symbolTableAliasCache == nil { - c.symbolTableAliasCache = make(map[symbolTableID][]*ast.Symbol) - } - c.symbolTableAliasCache[tableId] = aliases + c.symbolTableAliasCache.intern(tableId, aliases) } return aliases } @@ -882,10 +877,8 @@ func (c *Checker) someSymbolTableInScope( // synthesized table lets someSymbolTableInScope expose them during accessibility checks. func (c *Checker) getClassExpressionNameTable(location *ast.Node) ast.SymbolTable { nodeId := ast.GetNodeId(location) - if c.classExpressionNameTables != nil { - if table, ok := c.classExpressionNameTables[nodeId]; ok { - return table - } + if table, ok := c.classExpressionNameTables.get(c, nodeId); ok { + return table } classSymbol := c.getSymbolOfDeclaration(location) nameText := location.AsClassExpression().Name().Text() @@ -893,10 +886,7 @@ func (c *Checker) getClassExpressionNameTable(location *ast.Node) ast.SymbolTabl return nil } table := ast.SymbolTableOf(nameText, classSymbol) - if c.classExpressionNameTables == nil { - c.classExpressionNameTables = make(map[ast.NodeId]ast.SymbolTable) - } - c.classExpressionNameTables[nodeId] = table + c.classExpressionNameTables.intern(nodeId, table) return table } diff --git a/tsc/internal/checker/tracer.go b/tsc/internal/checker/tracer.go index 0fea57f8d4d70..d6c79ecb8bf9e 100644 --- a/tsc/internal/checker/tracer.go +++ b/tsc/internal/checker/tracer.go @@ -319,11 +319,12 @@ func (a *tracedTypeAdapter) Pattern() *ast.Node { if a.checker == nil { return nil } - return a.checker.patternForType[a.t] + p, _ := a.checker.patternForType.get(a.checker, a.t) + return p } func (a *tracedTypeAdapter) RecursionIdentity() any { - return getRecursionIdentity(a.t).value + return a.checker.getRecursionIdentity(a.t).value } func (a *tracedTypeAdapter) Display() string { diff --git a/tsc/internal/checker/types.go b/tsc/internal/checker/types.go index 4d35cfad57a1e..67b6c0397fb32 100644 --- a/tsc/internal/checker/types.go +++ b/tsc/internal/checker/types.go @@ -181,23 +181,23 @@ type SymbolReferenceLinks struct { // Links for value symbols type ValueSymbolLinks struct { - resolvedType *Type // Type of value symbol + resolvedType memo[*Type] // Type of value symbol target *ast.Symbol mapper *TypeMapper extra *valueSymbolExtra } type valueSymbolExtra struct { - writeType *Type + writeType memo[*Type] nameType *Type containingType *Type // Mapped type for mapped type property, containing union or intersection type for synthetic property } -func (links *ValueSymbolLinks) getWriteType() *Type { +func (links *ValueSymbolLinks) getWriteType(c *Checker) *Type { if links.extra == nil { return nil } - return links.extra.writeType + return links.extra.writeType.get(c) } func (links *ValueSymbolLinks) getNameType() *Type { @@ -221,7 +221,7 @@ func (links *ValueSymbolLinks) setWriteType(c *Checker, typ *Type) { } links.extra = c.valueSymbolExtraArena.New() } - links.extra.writeType = typ + links.extra.writeType.set(c, typ) } func (links *ValueSymbolLinks) setNameType(c *Checker, typ *Type) { @@ -262,10 +262,11 @@ type DeferredSymbolLinks struct { // Links for alias symbols type AliasSymbolLinks struct { - immediateTarget *ast.Symbol // Immediate target of an alias. May be another alias. Do not access directly, use `checker.getImmediateAliasedSymbol` instead. - aliasTarget *ast.Symbol // Resolved (non-alias) target of an alias - referenced bool // True if alias symbol has been referenced as a value that can be emitted - typeOnlyDeclaration *ast.Node // First resolved alias declaration that makes the symbol only usable in type constructs + immediateTarget *ast.Symbol // Immediate target of an alias. May be another alias. Do not access directly, use `checker.getImmediateAliasedSymbol` instead. + aliasTarget memo[*ast.Symbol] // Resolved (non-alias) target of an alias + referenced bool // True if alias symbol has been referenced as a value that can be emitted + referenceChecked bool // True if checking has followed the reference; see referenceAliasSymbol + typeOnlyDeclaration *ast.Node // First resolved alias declaration that makes the symbol only usable in type constructs } // Links for module symbols @@ -298,7 +299,7 @@ type ExportTypeLinks struct { // Links for type aliases type TypeAliasLinks struct { - declaredType *Type + declaredType memo[*Type] typeParameters []*Type // Type parameters of type alias (undefined if non-generic) instantiations map[CacheHashKey]*Type // Instantiations of generic type alias (undefined if non-generic) } @@ -306,7 +307,7 @@ type TypeAliasLinks struct { // Links for declared types (type parameters, class types, interface types, enums) type DeclaredTypeLinks struct { - declaredType *Type + declaredType memo[*Type] interfaceChecked bool indexSignaturesChecked bool typeParametersChecked bool @@ -434,12 +435,12 @@ type NodeLinks struct { } type SymbolNodeLinks struct { - resolvedSymbol *ast.Symbol // Resolved symbol associated with node + resolvedSymbol memo[*ast.Symbol] // Resolved symbol associated with node } type TypeNodeLinks struct { - resolvedType *Type // Resolved type associated with node - outerTypeParameters *[]*Type // Outer type parameters of anonymous object type + resolvedType memo[*Type] // Resolved type associated with node + outerTypeParameters *[]*Type // Outer type parameters of anonymous object type } func (links *TypeNodeLinks) getOuterTypeParameters() []*Type { @@ -490,9 +491,9 @@ type SourceFileLinks struct { // Signature specific links type SignatureLinks struct { - resolvedSignature *Signature // Cached signature of signature node or call expression - effectsSignature *Signature // Signature with possible control flow effects - decoratorSignature *Signature // Signature for decorator as if invoked by the runtime + resolvedSignature memo[*Signature] // Cached signature of signature node or call expression + effectsSignature *Signature // Signature with possible control flow effects + decoratorSignature *Signature // Signature for decorator as if invoked by the runtime } type TypeFlags uint32 @@ -706,9 +707,8 @@ const ( ObjectFlagsSingleSignatureType = 1 << 25 // A single signature type extracted from a potentially broader type ObjectFlagsIsClassInstanceClone = 1 << 26 // Type is a clone of a class instance type // Flags that require TypeFlags.Object and ObjectFlags.Reference - ObjectFlagsIdenticalBaseTypeCalculated = 1 << 27 // has had `getSingleBaseForNonAugmentingSubtype` invoked on it already - ObjectFlagsIdenticalBaseTypeExists = 1 << 28 // has a defined cachedEquivalentBaseType member - ObjectFlagsFromTypeNode = 1 << 29 // Originates in resolution of AST type node + ObjectFlagsIdenticalBaseTypeExists = 1 << 28 // has a defined cachedEquivalentBaseType member + ObjectFlagsFromTypeNode = 1 << 29 // Originates in resolution of AST type node // Flags that require TypeFlags.UnionOrIntersection or TypeFlags.Substitution ObjectFlagsIsGenericTypeComputed = 1 << 22 // IsGenericObjectType flag has been computed ObjectFlagsIsGenericObjectType = 1 << 23 // Union or intersection contains generic object type @@ -1108,7 +1108,7 @@ type UniqueESSymbolType struct { type ConstrainedType struct { TypeBase - resolvedBaseConstraint *Type + resolvedBaseConstraint memo[*Type] } func (t *ConstrainedType) AsConstrainedType() *ConstrainedType { return t } @@ -1329,8 +1329,8 @@ type InterfaceType struct { thisType *Type // The "this" type (nil if none) baseTypesResolved bool declaredMembersResolved bool - resolvedBaseConstructorType *Type - resolvedBaseTypes []*Type + resolvedBaseConstructorType memo[*Type] + resolvedBaseTypes memo[[]*Type] declaredMembers ast.SymbolTable // Declared members declaredCallSignatures []*Signature // Declared call signatures declaredConstructSignatures []*Signature // Declared construct signatures @@ -1496,13 +1496,13 @@ type IntersectionType struct { type TypeParameter struct { ConstrainedType - constraint *Type + constraint memo[*Type] target *Type mapper *TypeMapper isThisType bool isDistributed bool - resolvedDefaultType *Type - distributedType *Type + resolvedDefaultType memo[*Type] + distributedType *Type // The distributed counterpart, or for a distributed type parameter, its original origin *Type // The type parameter a restrictive type parameter was made from, or the tuple target of a tuple element type parameter } @@ -1628,7 +1628,7 @@ type Signature struct { resolvedMinArgumentCount int32 declaration *ast.Node parameters []*ast.Symbol - resolvedReturnType *Type + resolvedReturnType memo[*Type] target *Signature mapper *TypeMapper extra *signatureExtra diff --git a/tsc/internal/checker/types_test.go b/tsc/internal/checker/types_test.go index 5c9723b3a5e81..bbad7530239f5 100644 --- a/tsc/internal/checker/types_test.go +++ b/tsc/internal/checker/types_test.go @@ -29,18 +29,18 @@ func TestCheckerNodeLinkStores(t *testing.T) { nodes[i] = node assert.Assert(t, !first.typeNodeLinks.Has(node)) assert.Assert(t, !first.signatureLinks.Has(node)) - first.typeNodeLinks.Get(node).resolvedType = &Type{id: TypeId(i + 1)} - first.signatureLinks.Get(node).resolvedSignature = &Signature{id: SignatureId(i + 1)} - second.typeNodeLinks.Get(node).resolvedType = &Type{id: TypeId(i + 2)} - second.signatureLinks.Get(node).resolvedSignature = &Signature{id: SignatureId(i + 2)} + first.typeNodeLinks.Get(node).resolvedType.intern(&Type{id: TypeId(i + 1)}) + first.signatureLinks.Get(node).resolvedSignature.intern(&Signature{id: SignatureId(i + 1)}) + second.typeNodeLinks.Get(node).resolvedType.intern(&Type{id: TypeId(i + 2)}) + second.signatureLinks.Get(node).resolvedSignature.intern(&Signature{id: SignatureId(i + 2)}) } f.ReleaseArenas() runtime.GC() for i, node := range nodes { - assert.Equal(t, first.typeNodeLinks.Get(node).resolvedType.id, TypeId(i+1)) - assert.Equal(t, first.signatureLinks.Get(node).resolvedSignature.id, SignatureId(i+1)) - assert.Equal(t, second.typeNodeLinks.Get(node).resolvedType.id, TypeId(i+2)) - assert.Equal(t, second.signatureLinks.Get(node).resolvedSignature.id, SignatureId(i+2)) + assert.Equal(t, first.typeNodeLinks.Get(node).resolvedType.get(first).id, TypeId(i+1)) + assert.Equal(t, first.signatureLinks.Get(node).resolvedSignature.get(first).id, SignatureId(i+1)) + assert.Equal(t, second.typeNodeLinks.Get(node).resolvedType.get(second).id, TypeId(i+2)) + assert.Equal(t, second.signatureLinks.Get(node).resolvedSignature.get(second).id, SignatureId(i+2)) } clone := nodes[0].Clone(f) assert.Assert(t, !first.typeNodeLinks.Has(clone)) @@ -178,6 +178,7 @@ func BenchmarkTypeListKey(b *testing.B) { // newBareTestChecker returns an uninitialized checker with an empty store. func newBareTestChecker() *Checker { c := &Checker{memoStore: &memoStore{}} + c.initResolutions() c.root = c return c } @@ -185,10 +186,6 @@ func newBareTestChecker() *Checker { func newCompositeTestChecker() (*Checker, []*Type) { c := newBareTestChecker() c.strictNullChecks = true - c.unionTypes = make(map[CacheHashKey]*Type) - c.unionOfUnionTypes = make(map[UnionOfUnionKey]*Type) - c.intersectionTypes = make(map[CacheHashKey]*Type) - c.subtypeReductionCache = make(map[CacheHashKey][]*Type) c.compareSymbols = c.compareSymbolsWorker c.neverType = c.newIntrinsicType(TypeFlagsNever, "never") c.unknownType = c.newIntrinsicType(TypeFlagsUnknown, "unknown") @@ -494,7 +491,7 @@ func TestCompactValueSymbolLinksLayout(t *testing.T) { assert.Equal(t, unsafe.Sizeof(valueSymbolExtra{}), 3*unsafe.Sizeof(uintptr(0))) c, types := newCompositeTestChecker() var links ValueSymbolLinks - assert.Assert(t, links.getWriteType() == nil) + assert.Assert(t, links.getWriteType(c) == nil) assert.Assert(t, links.getNameType() == nil) assert.Assert(t, links.getContainingType() == nil) links.setWriteType(c, nil) @@ -511,12 +508,12 @@ func TestCompactValueSymbolLinksLayout(t *testing.T) { other.setNameType(c, types[2]) } runtime.GC() - assert.Equal(t, links.getWriteType(), types[0]) + assert.Equal(t, links.getWriteType(c), types[0]) assert.Equal(t, links.getNameType(), types[1]) assert.Equal(t, links.getContainingType(), types[2]) links.setNameType(c, nil) assert.Assert(t, links.getNameType() == nil) - assert.Equal(t, links.getWriteType(), types[0]) + assert.Equal(t, links.getWriteType(c), types[0]) assert.Equal(t, links.getContainingType(), types[2]) } @@ -655,7 +652,7 @@ func TestCompactTypeNodeLinksLayout(t *testing.T) { assert.Equal(t, unsafe.Sizeof(TypeNodeLinks{}), 2*unsafe.Sizeof(uintptr(0))) c, types := newCompositeTestChecker() var links TypeNodeLinks - links.resolvedType = types[0] + links.resolvedType.intern(types[0]) assert.Assert(t, links.getOuterTypeParameters() == nil) links.setOuterTypeParameters(c, nil) assert.Assert(t, links.outerTypeParameters == nil) @@ -675,10 +672,10 @@ func TestCompactTypeNodeLinksLayout(t *testing.T) { } runtime.GC() assert.Equal(t, links.getOuterTypeParameters()[0], types[1]) - assert.Equal(t, links.resolvedType, types[0]) + assert.Equal(t, links.resolvedType.get(c), types[0]) links.setOuterTypeParameters(c, nil) assert.Assert(t, links.getOuterTypeParameters() == nil) - assert.Equal(t, links.resolvedType, types[0]) + assert.Equal(t, links.resolvedType.get(c), types[0]) runtime.KeepAlive(c) } @@ -754,7 +751,7 @@ func TestSignatureExtra(t *testing.T) { sig.setComposite(c, nil) assert.Equal(t, sig.extra, entry) assert.Assert(t, sig.TypeParameters() == nil) - assert.Equal(t, sig.resolvedReturnType, types[0]) + assert.Equal(t, sig.resolvedReturnType.get(c), types[0]) assert.Equal(t, sig.minArgumentCount, int32(1)) assert.Equal(t, sig.getResolvedTypePredicate(c), predicate) runtime.KeepAlive(c) diff --git a/tsc/internal/checker/utilities.go b/tsc/internal/checker/utilities.go index 89800889a2732..0455ee60b3bee 100644 --- a/tsc/internal/checker/utilities.go +++ b/tsc/internal/checker/utilities.go @@ -666,8 +666,8 @@ func CompareTypes(t1, t2 *Type) int { } // Types implied by binding patterns are ordered by their patterns. if t1.flags&TypeFlagsObject != 0 { - p1 := t1.checker.patternForType[t1] - p2 := t2.checker.patternForType[t2] + p1, _ := t1.checker.patternForType.peek(t1) + p2, _ := t2.checker.patternForType.peek(t2) if c := t1.checker.compareNodes(p1, p2); c != 0 { return c } @@ -840,7 +840,7 @@ func compareObjectLiteralMembers(t1, t2 *Type) int { // created. func (c *Checker) peekTypeOfObjectLiteralMember(s *ast.Symbol) *Type { if links := c.valueSymbolLinks.TryGet(s); links != nil { - return links.resolvedType + return links.resolvedType.peek() } return nil } @@ -887,7 +887,7 @@ func compareTypeParameterOrigins(t1, t2 *Type) int { // Tuple this types have no symbol; their constraint is the tuple target, // initialized at creation. if t1.symbol == nil { - return CompareTypes(p1.constraint, p2.constraint) + return CompareTypes(p1.constraint.peek(), p2.constraint.peek()) } case typeParameterOriginDistributed: return CompareTypes(p1.distributedType, p2.distributedType) diff --git a/tsc/internal/execute/tsctests/tsc_test.go b/tsc/internal/execute/tsctests/tsc_test.go index ee429a826f94a..befb7578e9184 100644 --- a/tsc/internal/execute/tsctests/tsc_test.go +++ b/tsc/internal/execute/tsctests/tsc_test.go @@ -2406,12 +2406,10 @@ func TestTscIncremental(t *testing.T) { edit: func(sys *TestSys) { sys.appendFile("/home/src/workspaces/project/repro.ts", "\n// comment-only edit\n") }, - expectedDiff: "Like Strada, signature generation produces the missing-global diagnostic before semantic checking, so it is excluded from the file's semantic diagnostics.", }, { - caption: "no change", - edit: noChange.edit, - expectedDiff: "Like Strada, the cached semantic diagnostics do not include the missing-global diagnostic produced during signature generation.", + caption: "no change", + edit: noChange.edit, }, { caption: "delete build info to restore the semantic diagnostic", diff --git a/tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=typesfirst).errors.txt index e70af53237c1f..5a959d4e04b62 100644 --- a/tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=typesfirst).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/bigintArbirtraryIdentifier(checkorder=typesfirst).errors.txt @@ -6,7 +6,6 @@ badExport2.ts(1,16): error TS2304: Cannot find name 'foo'. badExport2.ts(1,20): error TS1128: Declaration or statement expected. badImport.ts(1,10): error TS1003: Identifier expected. badImport.ts(1,10): error TS1141: String literal expected. -badImport.ts(1,16): error TS2304: Cannot find name 'foo'. badImport.ts(1,20): error TS1128: Declaration or statement expected. badImport.ts(1,22): error TS1434: Unexpected keyword or identifier. badImport.ts(1,22): error TS2304: Cannot find name 'from'. @@ -25,14 +24,12 @@ badImport2.ts(1,22): error TS2304: Cannot find name 'from'. import { "0n" as foo } from "./foo"; export { foo as "0n" }; -==== badImport.ts (6 errors) ==== +==== badImport.ts (5 errors) ==== import { 0n as foo } from "./foo"; ~~ !!! error TS1003: Identifier expected. ~~~~~~~~~ !!! error TS1141: String literal expected. - ~~~ -!!! error TS2304: Cannot find name 'foo'. ~ !!! error TS1128: Declaration or statement expected. ~~~~ diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=default).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=default).errors.txt index 0570bff3e21f0..c220c7e1092af 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=default).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=default).errors.txt @@ -1,5 +1,5 @@ checkOrderEmitBeforeCheck.ts(9,5): error TS2502: '"each"' is referenced directly or indirectly in its own type annotation. -checkOrderEmitBeforeCheck.ts(15,1): error TS2615: Type of property '"each"' circularly references itself in mapped type '{ [P in keyof ListWidget]: undefined extends ListWidget[P] ? never : P; }'. +checkOrderEmitBeforeCheck.ts(9,13): error TS2615: Type of property '"each"' circularly references itself in mapped type '{ [P in keyof ListWidget]: undefined extends ListWidget[P] ? never : P; }'. ==== checkOrderEmitBeforeCheck.ts (2 errors) ==== @@ -14,12 +14,12 @@ checkOrderEmitBeforeCheck.ts(15,1): error TS2615: Type of property '"each"' circ "each": Child; ~~~~~~ !!! error TS2502: '"each"' is referenced directly or indirectly in its own type annotation. + ~~~~~~~~~~~~~~~~~ +!!! error TS2615: Type of property '"each"' circularly references itself in mapped type '{ [P in keyof ListWidget]: undefined extends ListWidget[P] ? never : P; }'. } type ListChild = Child declare let x: ListChild; x.type; - ~ -!!! error TS2615: Type of property '"each"' circularly references itself in mapped type '{ [P in keyof ListWidget]: undefined extends ListWidget[P] ? never : P; }'. \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).errors.txt index 9b99a0b62969b..6e370b78d30f9 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).errors.txt @@ -1,7 +1,6 @@ -error TS2589: Type instantiation is excessively deep and possibly infinite. +b.ts(2,15): error TS2589: Type instantiation is excessively deep and possibly infinite. -!!! error TS2589: Type instantiation is excessively deep and possibly infinite. ==== lib.ts (0 errors) ==== export type Dec = N extends 5 ? 4 : N extends 4 ? 3 : N extends 3 ? 2 : @@ -14,9 +13,11 @@ error TS2589: Type instantiation is excessively deep and possibly infinite. import { Recur } from "./lib"; export let a: Recur<5, "a">; -==== b.ts (0 errors) ==== +==== b.ts (1 errors) ==== import { Recur } from "./lib"; export let b: Recur<5, "a">; + ~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. ==== c.ts (0 errors) ==== class T { diff --git a/tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..6ec6fc6629d8a --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread(checkorder=typesfirst).errors.txt @@ -0,0 +1,51 @@ +excessivelyLargeTupleSpread.ts(6,10): error TS2799: Type produces a tuple type that is too large to represent. +excessivelyLargeTupleSpread.ts(22,12): error TS2799: Type produces a tuple type that is too large to represent. +excessivelyLargeTupleSpread.ts(38,13): error TS2800: Expression produces a tuple type that is too large to represent. + + +==== excessivelyLargeTupleSpread.ts (3 errors) ==== + // #41771 + + type BuildTuple = + T['length'] extends L ? T : BuildTuple; + + type A = BuildTuple<3> + ~~~~~~~~~~~~~ +!!! error TS2799: Type produces a tuple type that is too large to represent. + + type T0 = [any]; + type T1 = [...T0, ...T0]; + type T2 = [...T1, ...T1]; + type T3 = [...T2, ...T2]; + type T4 = [...T3, ...T3]; + type T5 = [...T4, ...T4]; + type T6 = [...T5, ...T5]; + type T7 = [...T6, ...T6]; + type T8 = [...T7, ...T7]; + type T9 = [...T8, ...T8]; + type T10 = [...T9, ...T9]; + type T11 = [...T10, ...T10]; + type T12 = [...T11, ...T11]; + type T13 = [...T12, ...T12]; + type T14 = [...T13, ...T13]; // 2^14 > 10,000 + ~~~~~~~~~~~~~~~~ +!!! error TS2799: Type produces a tuple type that is too large to represent. + + const a0 = [0] as const; + const a1 = [...a0, ...a0] as const; + const a2 = [...a1, ...a1] as const; + const a3 = [...a2, ...a2] as const; + const a4 = [...a3, ...a3] as const; + const a5 = [...a4, ...a4] as const; + const a6 = [...a5, ...a5] as const; + const a7 = [...a6, ...a6] as const; + const a8 = [...a7, ...a7] as const; + const a9 = [...a8, ...a8] as const; + const a10 = [...a9, ...a9] as const; + const a11 = [...a10, ...a10] as const; + const a12 = [...a11, ...a11] as const; + const a13 = [...a12, ...a12] as const; + const a14 = [...a13, ...a13] as const; // 2^14 > 10,000 + ~~~~~~~~~~~~~~~~ +!!! error TS2800: Expression produces a tuple type that is too large to represent. + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread(checkorder=typesfirst).js b/tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread(checkorder=typesfirst).js new file mode 100644 index 0000000000000..bbb96dcc93129 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread(checkorder=typesfirst).js @@ -0,0 +1,61 @@ +//// [tests/cases/compiler/excessivelyLargeTupleSpread.ts] //// + +//// [excessivelyLargeTupleSpread.ts] +// #41771 + +type BuildTuple = + T['length'] extends L ? T : BuildTuple; + +type A = BuildTuple<3> + +type T0 = [any]; +type T1 = [...T0, ...T0]; +type T2 = [...T1, ...T1]; +type T3 = [...T2, ...T2]; +type T4 = [...T3, ...T3]; +type T5 = [...T4, ...T4]; +type T6 = [...T5, ...T5]; +type T7 = [...T6, ...T6]; +type T8 = [...T7, ...T7]; +type T9 = [...T8, ...T8]; +type T10 = [...T9, ...T9]; +type T11 = [...T10, ...T10]; +type T12 = [...T11, ...T11]; +type T13 = [...T12, ...T12]; +type T14 = [...T13, ...T13]; // 2^14 > 10,000 + +const a0 = [0] as const; +const a1 = [...a0, ...a0] as const; +const a2 = [...a1, ...a1] as const; +const a3 = [...a2, ...a2] as const; +const a4 = [...a3, ...a3] as const; +const a5 = [...a4, ...a4] as const; +const a6 = [...a5, ...a5] as const; +const a7 = [...a6, ...a6] as const; +const a8 = [...a7, ...a7] as const; +const a9 = [...a8, ...a8] as const; +const a10 = [...a9, ...a9] as const; +const a11 = [...a10, ...a10] as const; +const a12 = [...a11, ...a11] as const; +const a13 = [...a12, ...a12] as const; +const a14 = [...a13, ...a13] as const; // 2^14 > 10,000 + + +//// [excessivelyLargeTupleSpread.js] +"use strict"; +// #41771 +const a0 = [0]; +const a1 = [...a0, ...a0]; +const a2 = [...a1, ...a1]; +const a3 = [...a2, ...a2]; +const a4 = [...a3, ...a3]; +const a5 = [...a4, ...a4]; +const a6 = [...a5, ...a5]; +const a7 = [...a6, ...a6]; +const a8 = [...a7, ...a7]; +const a9 = [...a8, ...a8]; +const a10 = [...a9, ...a9]; +const a11 = [...a10, ...a10]; +const a12 = [...a11, ...a11]; +const a13 = [...a12, ...a12]; +const a14 = [...a13, ...a13]; // 2^14 > 10,000 diff --git a/tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..629d43f9085cf --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread(checkorder=typesfirst).symbols @@ -0,0 +1,184 @@ +//// [tests/cases/compiler/excessivelyLargeTupleSpread.ts] //// + +=== excessivelyLargeTupleSpread.ts === +// #41771 + +type BuildTuple = +>BuildTuple : Symbol(BuildTuple, Decl(excessivelyLargeTupleSpread.ts, 0, 0)) +>L : Symbol(L, Decl(excessivelyLargeTupleSpread.ts, 2, 16)) +>T : Symbol(T, Decl(excessivelyLargeTupleSpread.ts, 2, 33)) + + T['length'] extends L ? T : BuildTuple; +>T : Symbol(T, Decl(excessivelyLargeTupleSpread.ts, 2, 33)) +>L : Symbol(L, Decl(excessivelyLargeTupleSpread.ts, 2, 16)) +>T : Symbol(T, Decl(excessivelyLargeTupleSpread.ts, 2, 33)) +>BuildTuple : Symbol(BuildTuple, Decl(excessivelyLargeTupleSpread.ts, 0, 0)) +>L : Symbol(L, Decl(excessivelyLargeTupleSpread.ts, 2, 16)) +>T : Symbol(T, Decl(excessivelyLargeTupleSpread.ts, 2, 33)) +>T : Symbol(T, Decl(excessivelyLargeTupleSpread.ts, 2, 33)) + +type A = BuildTuple<3> +>A : Symbol(A, Decl(excessivelyLargeTupleSpread.ts, 3, 60)) +>BuildTuple : Symbol(BuildTuple, Decl(excessivelyLargeTupleSpread.ts, 0, 0)) + +type T0 = [any]; +>T0 : Symbol(T0, Decl(excessivelyLargeTupleSpread.ts, 5, 22)) + +type T1 = [...T0, ...T0]; +>T1 : Symbol(T1, Decl(excessivelyLargeTupleSpread.ts, 7, 16)) +>T0 : Symbol(T0, Decl(excessivelyLargeTupleSpread.ts, 5, 22)) +>T0 : Symbol(T0, Decl(excessivelyLargeTupleSpread.ts, 5, 22)) + +type T2 = [...T1, ...T1]; +>T2 : Symbol(T2, Decl(excessivelyLargeTupleSpread.ts, 8, 25)) +>T1 : Symbol(T1, Decl(excessivelyLargeTupleSpread.ts, 7, 16)) +>T1 : Symbol(T1, Decl(excessivelyLargeTupleSpread.ts, 7, 16)) + +type T3 = [...T2, ...T2]; +>T3 : Symbol(T3, Decl(excessivelyLargeTupleSpread.ts, 9, 25)) +>T2 : Symbol(T2, Decl(excessivelyLargeTupleSpread.ts, 8, 25)) +>T2 : Symbol(T2, Decl(excessivelyLargeTupleSpread.ts, 8, 25)) + +type T4 = [...T3, ...T3]; +>T4 : Symbol(T4, Decl(excessivelyLargeTupleSpread.ts, 10, 25)) +>T3 : Symbol(T3, Decl(excessivelyLargeTupleSpread.ts, 9, 25)) +>T3 : Symbol(T3, Decl(excessivelyLargeTupleSpread.ts, 9, 25)) + +type T5 = [...T4, ...T4]; +>T5 : Symbol(T5, Decl(excessivelyLargeTupleSpread.ts, 11, 25)) +>T4 : Symbol(T4, Decl(excessivelyLargeTupleSpread.ts, 10, 25)) +>T4 : Symbol(T4, Decl(excessivelyLargeTupleSpread.ts, 10, 25)) + +type T6 = [...T5, ...T5]; +>T6 : Symbol(T6, Decl(excessivelyLargeTupleSpread.ts, 12, 25)) +>T5 : Symbol(T5, Decl(excessivelyLargeTupleSpread.ts, 11, 25)) +>T5 : Symbol(T5, Decl(excessivelyLargeTupleSpread.ts, 11, 25)) + +type T7 = [...T6, ...T6]; +>T7 : Symbol(T7, Decl(excessivelyLargeTupleSpread.ts, 13, 25)) +>T6 : Symbol(T6, Decl(excessivelyLargeTupleSpread.ts, 12, 25)) +>T6 : Symbol(T6, Decl(excessivelyLargeTupleSpread.ts, 12, 25)) + +type T8 = [...T7, ...T7]; +>T8 : Symbol(T8, Decl(excessivelyLargeTupleSpread.ts, 14, 25)) +>T7 : Symbol(T7, Decl(excessivelyLargeTupleSpread.ts, 13, 25)) +>T7 : Symbol(T7, Decl(excessivelyLargeTupleSpread.ts, 13, 25)) + +type T9 = [...T8, ...T8]; +>T9 : Symbol(T9, Decl(excessivelyLargeTupleSpread.ts, 15, 25)) +>T8 : Symbol(T8, Decl(excessivelyLargeTupleSpread.ts, 14, 25)) +>T8 : Symbol(T8, Decl(excessivelyLargeTupleSpread.ts, 14, 25)) + +type T10 = [...T9, ...T9]; +>T10 : Symbol(T10, Decl(excessivelyLargeTupleSpread.ts, 16, 25)) +>T9 : Symbol(T9, Decl(excessivelyLargeTupleSpread.ts, 15, 25)) +>T9 : Symbol(T9, Decl(excessivelyLargeTupleSpread.ts, 15, 25)) + +type T11 = [...T10, ...T10]; +>T11 : Symbol(T11, Decl(excessivelyLargeTupleSpread.ts, 17, 26)) +>T10 : Symbol(T10, Decl(excessivelyLargeTupleSpread.ts, 16, 25)) +>T10 : Symbol(T10, Decl(excessivelyLargeTupleSpread.ts, 16, 25)) + +type T12 = [...T11, ...T11]; +>T12 : Symbol(T12, Decl(excessivelyLargeTupleSpread.ts, 18, 28)) +>T11 : Symbol(T11, Decl(excessivelyLargeTupleSpread.ts, 17, 26)) +>T11 : Symbol(T11, Decl(excessivelyLargeTupleSpread.ts, 17, 26)) + +type T13 = [...T12, ...T12]; +>T13 : Symbol(T13, Decl(excessivelyLargeTupleSpread.ts, 19, 28)) +>T12 : Symbol(T12, Decl(excessivelyLargeTupleSpread.ts, 18, 28)) +>T12 : Symbol(T12, Decl(excessivelyLargeTupleSpread.ts, 18, 28)) + +type T14 = [...T13, ...T13]; // 2^14 > 10,000 +>T14 : Symbol(T14, Decl(excessivelyLargeTupleSpread.ts, 20, 28)) +>T13 : Symbol(T13, Decl(excessivelyLargeTupleSpread.ts, 19, 28)) +>T13 : Symbol(T13, Decl(excessivelyLargeTupleSpread.ts, 19, 28)) + +const a0 = [0] as const; +>a0 : Symbol(a0, Decl(excessivelyLargeTupleSpread.ts, 23, 5)) +>const : Symbol(const) + +const a1 = [...a0, ...a0] as const; +>a1 : Symbol(a1, Decl(excessivelyLargeTupleSpread.ts, 24, 5)) +>a0 : Symbol(a0, Decl(excessivelyLargeTupleSpread.ts, 23, 5)) +>a0 : Symbol(a0, Decl(excessivelyLargeTupleSpread.ts, 23, 5)) +>const : Symbol(const) + +const a2 = [...a1, ...a1] as const; +>a2 : Symbol(a2, Decl(excessivelyLargeTupleSpread.ts, 25, 5)) +>a1 : Symbol(a1, Decl(excessivelyLargeTupleSpread.ts, 24, 5)) +>a1 : Symbol(a1, Decl(excessivelyLargeTupleSpread.ts, 24, 5)) +>const : Symbol(const) + +const a3 = [...a2, ...a2] as const; +>a3 : Symbol(a3, Decl(excessivelyLargeTupleSpread.ts, 26, 5)) +>a2 : Symbol(a2, Decl(excessivelyLargeTupleSpread.ts, 25, 5)) +>a2 : Symbol(a2, Decl(excessivelyLargeTupleSpread.ts, 25, 5)) +>const : Symbol(const) + +const a4 = [...a3, ...a3] as const; +>a4 : Symbol(a4, Decl(excessivelyLargeTupleSpread.ts, 27, 5)) +>a3 : Symbol(a3, Decl(excessivelyLargeTupleSpread.ts, 26, 5)) +>a3 : Symbol(a3, Decl(excessivelyLargeTupleSpread.ts, 26, 5)) +>const : Symbol(const) + +const a5 = [...a4, ...a4] as const; +>a5 : Symbol(a5, Decl(excessivelyLargeTupleSpread.ts, 28, 5)) +>a4 : Symbol(a4, Decl(excessivelyLargeTupleSpread.ts, 27, 5)) +>a4 : Symbol(a4, Decl(excessivelyLargeTupleSpread.ts, 27, 5)) +>const : Symbol(const) + +const a6 = [...a5, ...a5] as const; +>a6 : Symbol(a6, Decl(excessivelyLargeTupleSpread.ts, 29, 5)) +>a5 : Symbol(a5, Decl(excessivelyLargeTupleSpread.ts, 28, 5)) +>a5 : Symbol(a5, Decl(excessivelyLargeTupleSpread.ts, 28, 5)) +>const : Symbol(const) + +const a7 = [...a6, ...a6] as const; +>a7 : Symbol(a7, Decl(excessivelyLargeTupleSpread.ts, 30, 5)) +>a6 : Symbol(a6, Decl(excessivelyLargeTupleSpread.ts, 29, 5)) +>a6 : Symbol(a6, Decl(excessivelyLargeTupleSpread.ts, 29, 5)) +>const : Symbol(const) + +const a8 = [...a7, ...a7] as const; +>a8 : Symbol(a8, Decl(excessivelyLargeTupleSpread.ts, 31, 5)) +>a7 : Symbol(a7, Decl(excessivelyLargeTupleSpread.ts, 30, 5)) +>a7 : Symbol(a7, Decl(excessivelyLargeTupleSpread.ts, 30, 5)) +>const : Symbol(const) + +const a9 = [...a8, ...a8] as const; +>a9 : Symbol(a9, Decl(excessivelyLargeTupleSpread.ts, 32, 5)) +>a8 : Symbol(a8, Decl(excessivelyLargeTupleSpread.ts, 31, 5)) +>a8 : Symbol(a8, Decl(excessivelyLargeTupleSpread.ts, 31, 5)) +>const : Symbol(const) + +const a10 = [...a9, ...a9] as const; +>a10 : Symbol(a10, Decl(excessivelyLargeTupleSpread.ts, 33, 5)) +>a9 : Symbol(a9, Decl(excessivelyLargeTupleSpread.ts, 32, 5)) +>a9 : Symbol(a9, Decl(excessivelyLargeTupleSpread.ts, 32, 5)) +>const : Symbol(const) + +const a11 = [...a10, ...a10] as const; +>a11 : Symbol(a11, Decl(excessivelyLargeTupleSpread.ts, 34, 5)) +>a10 : Symbol(a10, Decl(excessivelyLargeTupleSpread.ts, 33, 5)) +>a10 : Symbol(a10, Decl(excessivelyLargeTupleSpread.ts, 33, 5)) +>const : Symbol(const) + +const a12 = [...a11, ...a11] as const; +>a12 : Symbol(a12, Decl(excessivelyLargeTupleSpread.ts, 35, 5)) +>a11 : Symbol(a11, Decl(excessivelyLargeTupleSpread.ts, 34, 5)) +>a11 : Symbol(a11, Decl(excessivelyLargeTupleSpread.ts, 34, 5)) +>const : Symbol(const) + +const a13 = [...a12, ...a12] as const; +>a13 : Symbol(a13, Decl(excessivelyLargeTupleSpread.ts, 36, 5)) +>a12 : Symbol(a12, Decl(excessivelyLargeTupleSpread.ts, 35, 5)) +>a12 : Symbol(a12, Decl(excessivelyLargeTupleSpread.ts, 35, 5)) +>const : Symbol(const) + +const a14 = [...a13, ...a13] as const; // 2^14 > 10,000 +>a14 : Symbol(a14, Decl(excessivelyLargeTupleSpread.ts, 37, 5)) +>a13 : Symbol(a13, Decl(excessivelyLargeTupleSpread.ts, 36, 5)) +>a13 : Symbol(a13, Decl(excessivelyLargeTupleSpread.ts, 36, 5)) +>const : Symbol(const) + diff --git a/tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread(checkorder=typesfirst).types new file mode 100644 index 0000000000000..beb6075368e3f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/excessivelyLargeTupleSpread(checkorder=typesfirst).types @@ -0,0 +1,190 @@ +//// [tests/cases/compiler/excessivelyLargeTupleSpread.ts] //// + +=== excessivelyLargeTupleSpread.ts === +// #41771 + +type BuildTuple = +>BuildTuple : BuildTuple + + T['length'] extends L ? T : BuildTuple; + +type A = BuildTuple<3> +>A : any + +type T0 = [any]; +>T0 : T0 + +type T1 = [...T0, ...T0]; +>T1 : [any, any] + +type T2 = [...T1, ...T1]; +>T2 : [any, any, any, any] + +type T3 = [...T2, ...T2]; +>T3 : [any, any, any, any, any, any, any, any] + +type T4 = [...T3, ...T3]; +>T4 : [any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any] + +type T5 = [...T4, ...T4]; +>T5 : [any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any] + +type T6 = [...T5, ...T5]; +>T6 : [any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any] + +type T7 = [...T6, ...T6]; +>T7 : [any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any] + +type T8 = [...T7, ...T7]; +>T8 : [any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any] + +type T9 = [...T8, ...T8]; +>T9 : [any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any] + +type T10 = [...T9, ...T9]; +>T10 : [any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any] + +type T11 = [...T10, ...T10]; +>T11 : [any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any] + +type T12 = [...T11, ...T11]; +>T12 : [any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any] + +type T13 = [...T12, ...T12]; +>T13 : [any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any] + +type T14 = [...T13, ...T13]; // 2^14 > 10,000 +>T14 : any + +const a0 = [0] as const; +>a0 : readonly [0] +>[0] as const : readonly [0] +>[0] : readonly [0] +>0 : 0 + +const a1 = [...a0, ...a0] as const; +>a1 : readonly [0, 0] +>[...a0, ...a0] as const : readonly [0, 0] +>[...a0, ...a0] : readonly [0, 0] +>...a0 : 0 +>a0 : readonly [0] +>...a0 : 0 +>a0 : readonly [0] + +const a2 = [...a1, ...a1] as const; +>a2 : readonly [0, 0, 0, 0] +>[...a1, ...a1] as const : readonly [0, 0, 0, 0] +>[...a1, ...a1] : readonly [0, 0, 0, 0] +>...a1 : 0 +>a1 : readonly [0, 0] +>...a1 : 0 +>a1 : readonly [0, 0] + +const a3 = [...a2, ...a2] as const; +>a3 : readonly [0, 0, 0, 0, 0, 0, 0, 0] +>[...a2, ...a2] as const : readonly [0, 0, 0, 0, 0, 0, 0, 0] +>[...a2, ...a2] : readonly [0, 0, 0, 0, 0, 0, 0, 0] +>...a2 : 0 +>a2 : readonly [0, 0, 0, 0] +>...a2 : 0 +>a2 : readonly [0, 0, 0, 0] + +const a4 = [...a3, ...a3] as const; +>a4 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>[...a3, ...a3] as const : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>[...a3, ...a3] : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>...a3 : 0 +>a3 : readonly [0, 0, 0, 0, 0, 0, 0, 0] +>...a3 : 0 +>a3 : readonly [0, 0, 0, 0, 0, 0, 0, 0] + +const a5 = [...a4, ...a4] as const; +>a5 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>[...a4, ...a4] as const : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>[...a4, ...a4] : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>...a4 : 0 +>a4 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>...a4 : 0 +>a4 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + +const a6 = [...a5, ...a5] as const; +>a6 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>[...a5, ...a5] as const : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>[...a5, ...a5] : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>...a5 : 0 +>a5 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>...a5 : 0 +>a5 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + +const a7 = [...a6, ...a6] as const; +>a7 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>[...a6, ...a6] as const : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>[...a6, ...a6] : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>...a6 : 0 +>a6 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>...a6 : 0 +>a6 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + +const a8 = [...a7, ...a7] as const; +>a8 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>[...a7, ...a7] as const : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>[...a7, ...a7] : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>...a7 : 0 +>a7 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>...a7 : 0 +>a7 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + +const a9 = [...a8, ...a8] as const; +>a9 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>[...a8, ...a8] as const : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>[...a8, ...a8] : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>...a8 : 0 +>a8 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>...a8 : 0 +>a8 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + +const a10 = [...a9, ...a9] as const; +>a10 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>[...a9, ...a9] as const : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>[...a9, ...a9] : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>...a9 : 0 +>a9 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>...a9 : 0 +>a9 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + +const a11 = [...a10, ...a10] as const; +>a11 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>[...a10, ...a10] as const : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>[...a10, ...a10] : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>...a10 : 0 +>a10 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>...a10 : 0 +>a10 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + +const a12 = [...a11, ...a11] as const; +>a12 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>[...a11, ...a11] as const : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>[...a11, ...a11] : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>...a11 : 0 +>a11 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>...a11 : 0 +>a11 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + +const a13 = [...a12, ...a12] as const; +>a13 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>[...a12, ...a12] as const : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>[...a12, ...a12] : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>...a12 : 0 +>a12 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>...a12 : 0 +>a12 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + +const a14 = [...a13, ...a13] as const; // 2^14 > 10,000 +>a14 : any +>[...a13, ...a13] as const : any +>[...a13, ...a13] : any +>...a13 : 0 +>a13 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +>...a13 : 0 +>a13 : readonly [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + diff --git a/tsc/testdata/baselines/reference/compiler/incorrectRecursiveMappedTypeConstraint.errors.txt b/tsc/testdata/baselines/reference/compiler/incorrectRecursiveMappedTypeConstraint.errors.txt index 41f682e455f8d..4fc215b0dd52d 100644 --- a/tsc/testdata/baselines/reference/compiler/incorrectRecursiveMappedTypeConstraint.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/incorrectRecursiveMappedTypeConstraint.errors.txt @@ -8,10 +8,8 @@ incorrectRecursiveMappedTypeConstraint.ts(3,5): error TS2365: Operator '+=' cann function sum(n: number, v: T, k: K) { ~~~~~~~~~~~~~~~~~~~~ !!! error TS2313: Type parameter 'T' has a circular constraint. -!!! related TS2751 incorrectRecursiveMappedTypeConstraint.ts:3:10: Circularity originates in type at this location. ~ !!! error TS2313: Type parameter 'P' has a circular constraint. -!!! related TS2751 incorrectRecursiveMappedTypeConstraint.ts:3:10: Circularity originates in type at this location. n += v[k]; ~~~~~~~~~ !!! error TS2365: Operator '+=' cannot be applied to types 'number' and 'T[K]'. diff --git a/tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.errors.txt b/tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.errors.txt index 34493080afba5..e8f245821e6fa 100644 --- a/tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.errors.txt @@ -1,11 +1,7 @@ -error TS-1: Pre-emit (2) and post-emit (3) diagnostic counts do not match! This can indicate that a semantic _error_ was added by the emit resolver - such an error may not be reflected on the command line or in the editor, but may be captured in a baseline here! file.js(4,11): error TS7022: 'pixel' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. file.js(4,19): error TS7053: Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{ skip: any; }'. -!!! error TS-1: Pre-emit (2) and post-emit (3) diagnostic counts do not match! This can indicate that a semantic _error_ was added by the emit resolver - such an error may not be reflected on the command line or in the editor, but may be captured in a baseline here! -!!! related TS-1: The excess diagnostics are: -!!! related TS7053 file.js:5:24: Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{ skip: any; }'. ==== file.js (2 errors) ==== /** @param {any} axis @param {any} value */ function updateElements(axis, value) { diff --git a/tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=typesfirst).errors.txt index b45ab387a625b..191dc50e4166c 100644 --- a/tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=typesfirst).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/jsxImportSourceNonPragmaComment(checkorder=typesfirst).errors.txt @@ -1,10 +1,9 @@ jsxImportSourceNonPragmaComment.tsx(3,21): error TS2307: Cannot find module '@emotion/react' or its corresponding type declarations. jsxImportSourceNonPragmaComment.tsx(7,5): error TS2875: This JSX tag requires the module path '@emotion/react/jsx-runtime' to exist, but none could be found. Make sure you have types for the appropriate package installed. jsxImportSourceNonPragmaComment.tsx(7,5): error TS7026: JSX element implicitly has type 'any' because no interface 'JSX.IntrinsicElements' exists. -jsxImportSourceNonPragmaComment.tsx(7,6): error TS2552: Cannot find name 'input'. Did you mean 'oninput'? -==== jsxImportSourceNonPragmaComment.tsx (4 errors) ==== +==== jsxImportSourceNonPragmaComment.tsx (3 errors) ==== /* eslint-disable react/react-in-jsx-scope -- Unaware of @jsxImportSource */ /** @jsxImportSource @emotion/react */ import { css } from "@emotion/react"; @@ -16,9 +15,6 @@ jsxImportSourceNonPragmaComment.tsx(7,6): error TS2552: Cannot find name 'input' {} - } - - ; - ~ -!!! error TS2304: Cannot find name 'a'. - \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord(checkorder=typesfirst).types index a2a76b6e77eed..30632f23d7dc4 100644 --- a/tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord(checkorder=typesfirst).types +++ b/tsc/testdata/baselines/reference/compiler/jsxIntrinsicElementsExtendsRecord(checkorder=typesfirst).types @@ -6,6 +6,6 @@ declare namespace JSX { } ; -> : any +> : error >a : any diff --git a/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=typesfirst).errors.txt index 2998e94608985..a1b033edf54ba 100644 --- a/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=typesfirst).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=typesfirst).errors.txt @@ -1,13 +1,14 @@ -error TS5114: Instantiations of type 'Foo' appear infinitely circular. +limitDeepInstantiations.ts(4,9): error TS5114: Instantiations of type 'Foo' appear infinitely circular. limitDeepInstantiations.ts(5,13): error TS2344: Type '"false"' does not satisfy the constraint '"true"'. -!!! error TS5114: Instantiations of type 'Foo' appear infinitely circular. -==== limitDeepInstantiations.ts (1 errors) ==== +==== limitDeepInstantiations.ts (2 errors) ==== // Repro from #14837 type Foo = { "true": Foo> }[T]; let f1: Foo<"true", {}>; + ~~~~~~~~~~~~~~~ +!!! error TS5114: Instantiations of type 'Foo' appear infinitely circular. let f2: Foo<"false", {}>; ~~~~~~~ !!! error TS2344: Type '"false"' does not satisfy the constraint '"true"'. diff --git a/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).errors.txt index a7a577d5080f1..2c10283c820ef 100644 --- a/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).errors.txt @@ -1,8 +1,9 @@ -error TS2589: Type instantiation is excessively deep and possibly infinite. +templateLiteralTypeExcessiveLength.ts(15,11): error TS2589: Type instantiation is excessively deep and possibly infinite. +templateLiteralTypeExcessiveLength.ts(20,11): error TS2589: Type instantiation is excessively deep and possibly infinite. +templateLiteralTypeExcessiveLength.ts(34,11): error TS2589: Type instantiation is excessively deep and possibly infinite. -!!! error TS2589: Type instantiation is excessively deep and possibly infinite. -==== templateLiteralTypeExcessiveLength.ts (0 errors) ==== +==== templateLiteralTypeExcessiveLength.ts (3 errors) ==== // Regression test for #63271: `Dec<2>` is `any`, so `Recur` produces both conditional branches and // keeps tail-recursing forever. The checker must report an error instead of building an unbounded // template literal type. @@ -18,11 +19,15 @@ error TS2589: Type instantiation is excessively deep and possibly infinite. // The string literal doubles on every iteration. type Explode = { [P in Recur<5, "a"> as `${P}_key`]: any; + ~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. }; // The number of placeholders doubles on every iteration. type ExplodeSpans = { [P in Recur<5, string> as `${P}_key`]: any; + ~~~~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. }; // Every text segment stays small, but the number of segments doubles on every iteration, @@ -37,5 +42,7 @@ error TS2589: Type instantiation is excessively deep and possibly infinite. type ExplodeSegments = { [P in RecurSegments<5, A1024> as `${P}_key`]: any; + ~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. }; \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=typesfirst).errors.txt index 83997ce99f298..b7a0b982aceb6 100644 --- a/tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=typesfirst).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/typeParameterHasSelfAsConstraint(checkorder=typesfirst).errors.txt @@ -6,7 +6,6 @@ typeParameterHasSelfAsConstraint.ts(2,5): error TS2322: Type 'T' is not assignab function foo(x: T): number { ~ !!! error TS2313: Type parameter 'T' has a circular constraint. -!!! related TS2751 typeParameterHasSelfAsConstraint.ts:2:12: Circularity originates in type at this location. return x; ~~~~~~ !!! error TS2322: Type 'T' is not assignable to type 'number'. diff --git a/tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=typesfirst).errors.txt index 387fe2f14d0be..f2bff262ffc44 100644 --- a/tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=typesfirst).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1(checkorder=typesfirst).errors.txt @@ -1,14 +1,17 @@ unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts(1,18): error TS6133: 'person' is declared but its value is never read. +unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts(1,34): error TS6133: 'person2' is declared but its value is never read. unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts(2,9): error TS6133: 'unused' is declared but its value is never read. unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts(3,14): error TS6133: 'maker' is declared but its value is never read. unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts(3,20): error TS6133: 'child' is declared but its value is never read. unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts(4,13): error TS6133: 'unused2' is declared but its value is never read. -==== unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts (5 errors) ==== +==== unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts (6 errors) ==== function greeter(person: string, person2: string) { ~~~~~~ !!! error TS6133: 'person' is declared but its value is never read. + ~~~~~~~ +!!! error TS6133: 'person2' is declared but its value is never read. var unused = 20; ~~~~~~ !!! error TS6133: 'unused' is declared but its value is never read. diff --git a/tsc/testdata/baselines/reference/conformance/importTag13(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/conformance/importTag13(checkorder=typesfirst).errors.txt index de660063858df..3427c0e358148 100644 --- a/tsc/testdata/baselines/reference/conformance/importTag13(checkorder=typesfirst).errors.txt +++ b/tsc/testdata/baselines/reference/conformance/importTag13(checkorder=typesfirst).errors.txt @@ -1,16 +1,13 @@ /foo.js(1,15): error TS1005: 'from' expected. /foo.js(1,15): error TS1141: String literal expected. -/foo.js(1,25): error TS2307: Cannot find module 'types' or its corresponding type declarations. -==== /foo.js (3 errors) ==== +==== /foo.js (2 errors) ==== /** @import x = require("types") */ ~ !!! error TS1005: 'from' expected. ~~~~~~~~~~~~~~~~~~ !!! error TS1141: String literal expected. - ~~~~~~~ -!!! error TS2307: Cannot find module 'types' or its corresponding type declarations. ==== /types.ts (0 errors) ==== export interface Foo { diff --git a/tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=typesfirst).errors.txt index d4d3aede55faf..634c2349e1ecb 100644 --- a/tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=typesfirst).errors.txt +++ b/tsc/testdata/baselines/reference/conformance/privateNameNestedClassFieldShadowing(checkorder=typesfirst).errors.txt @@ -11,8 +11,8 @@ privateNameNestedClassFieldShadowing.ts(7,31): error TS18014: The property '#x' console.log(x.#x); ~~ !!! error TS18014: The property '#x' cannot be accessed on type 'Base' within this class because it is shadowed by another private identifier with the same spelling. -!!! related TS18018 privateNameNestedClassFieldShadowing.ts:2:5: The declaration of '#x' that you probably intended to use is defined here !!! related TS18017 privateNameNestedClassFieldShadowing.ts:5:13: The shadowing declaration of '#x' is defined here +!!! related TS18018 privateNameNestedClassFieldShadowing.ts:2:5: The declaration of '#x' that you probably intended to use is defined here } testDerived(x: Derived) { console.log(x.#x); diff --git a/tsc/testdata/baselines/reference/conformance/recursiveMappedTypes.errors.txt b/tsc/testdata/baselines/reference/conformance/recursiveMappedTypes.errors.txt index 5d6e45f1ffa2e..7e28028029921 100644 --- a/tsc/testdata/baselines/reference/conformance/recursiveMappedTypes.errors.txt +++ b/tsc/testdata/baselines/reference/conformance/recursiveMappedTypes.errors.txt @@ -6,7 +6,7 @@ recursiveMappedTypes.ts(11,6): error TS2456: Type alias 'Recurse2' circularly re recursiveMappedTypes.ts(12,11): error TS2313: Type parameter 'K' has a circular constraint. recursiveMappedTypes.ts(20,19): error TS5114: Instantiations of type 'Circular' appear infinitely circular. recursiveMappedTypes.ts(73,5): error TS2502: '"each"' is referenced directly or indirectly in its own type annotation. -recursiveMappedTypes.ts(79,1): error TS2615: Type of property '"each"' circularly references itself in mapped type '{ [P in keyof ListWidget]: undefined extends ListWidget[P] ? never : P; }'. +recursiveMappedTypes.ts(73,13): error TS2615: Type of property '"each"' circularly references itself in mapped type '{ [P in keyof ListWidget]: undefined extends ListWidget[P] ? never : P; }'. ==== recursiveMappedTypes.ts (9 errors) ==== @@ -100,14 +100,14 @@ recursiveMappedTypes.ts(79,1): error TS2615: Type of property '"each"' circularl "each": Child; ~~~~~~ !!! error TS2502: '"each"' is referenced directly or indirectly in its own type annotation. + ~~~~~~~~~~~~~~~~~ +!!! error TS2615: Type of property '"each"' circularly references itself in mapped type '{ [P in keyof ListWidget]: undefined extends ListWidget[P] ? never : P; }'. } type ListChild = Child declare let x: ListChild; x.type; - ~ -!!! error TS2615: Type of property '"each"' circularly references itself in mapped type '{ [P in keyof ListWidget]: undefined extends ListWidget[P] ? never : P; }'. // Repros from #41790 diff --git a/tsc/testdata/baselines/reference/tsc/generateTrace/generateTrace-with-multiple-files-and-complex-types.js b/tsc/testdata/baselines/reference/tsc/generateTrace/generateTrace-with-multiple-files-and-complex-types.js index cebed8022620f..1cdf348a9d041 100644 --- a/tsc/testdata/baselines/reference/tsc/generateTrace/generateTrace-with-multiple-files-and-complex-types.js +++ b/tsc/testdata/baselines/reference/tsc/generateTrace/generateTrace-with-multiple-files-and-complex-types.js @@ -212,12 +212,12 @@ declare const console: { log(msg: any): void; }; {"id":102,"symbolName":"map","recursionId":92,"firstDeclaration":{"path":"/home/src/workspaces/project/types.ts","start":{"line":3,"character":5},"end":{"line":3,"character":43}},"flags":["Object"],"display":"(fn: (x: T) => U) => Container"}, {"id":103,"symbolName":"map","recursionId":92,"firstDeclaration":{"path":"/home/src/workspaces/project/types.ts","start":{"line":3,"character":5},"end":{"line":3,"character":43}},"flags":["Object"],"display":"(fn: (x: number) => U) => Container"}, {"id":104,"symbolName":"U","recursionId":84,"firstDeclaration":{"path":"/home/src/workspaces/project/types.ts","start":{"line":3,"character":9},"end":{"line":3,"character":10}},"flags":["TypeParameter"]}, -{"id":105,"symbolName":"__function","recursionId":93,"firstDeclaration":{"path":"/home/src/workspaces/project/main.ts","start":{"line":2,"character":48},"end":{"line":2,"character":87}},"flags":["Object"],"display":"(fn: (x: number) => U) => { value: U; map: (fn: (x: number) => U) => Container; }"}, -{"id":106,"symbolName":"__type","recursionId":85,"firstDeclaration":{"path":"/home/src/workspaces/project/types.ts","start":{"line":3,"character":16},"end":{"line":3,"character":27}},"flags":["Object"],"display":"(x: number) => U"}, -{"id":107,"symbolName":"Container","recursionId":83,"instantiatedType":91,"typeArguments":[104],"firstDeclaration":{"path":"/home/src/workspaces/project/types.ts","start":{"line":1,"character":1},"end":{"line":4,"character":2}},"flags":["Object"]}, -{"id":108,"symbolName":"map","recursionId":92,"firstDeclaration":{"path":"/home/src/workspaces/project/types.ts","start":{"line":3,"character":5},"end":{"line":3,"character":43}},"flags":["Object"],"display":"(fn: (x: U) => U) => Container"}, +{"id":105,"symbolName":"__type","recursionId":85,"firstDeclaration":{"path":"/home/src/workspaces/project/types.ts","start":{"line":3,"character":16},"end":{"line":3,"character":27}},"flags":["Object"],"display":"(x: number) => U"}, +{"id":106,"symbolName":"Container","recursionId":83,"instantiatedType":91,"typeArguments":[104],"firstDeclaration":{"path":"/home/src/workspaces/project/types.ts","start":{"line":1,"character":1},"end":{"line":4,"character":2}},"flags":["Object"]}, +{"id":107,"symbolName":"map","recursionId":92,"firstDeclaration":{"path":"/home/src/workspaces/project/types.ts","start":{"line":3,"character":5},"end":{"line":3,"character":43}},"flags":["Object"],"display":"(fn: (x: U) => U) => Container"}, +{"id":108,"symbolName":"__object","recursionId":93,"firstDeclaration":{"path":"/home/src/workspaces/project/main.ts","start":{"line":2,"character":57},"end":{"line":2,"character":86}},"flags":["Object"],"display":"{ value: U; map: (fn: (x: number) => U) => Container; }"}, {"id":109,"symbolName":"__object","recursionId":94,"firstDeclaration":{"path":"/home/src/workspaces/project/main.ts","start":{"line":2,"character":57},"end":{"line":2,"character":86}},"flags":["Object"],"display":"{ value: U; map: (fn: (x: number) => U) => Container; }"}, -{"id":110,"symbolName":"__object","recursionId":95,"firstDeclaration":{"path":"/home/src/workspaces/project/main.ts","start":{"line":2,"character":57},"end":{"line":2,"character":86}},"flags":["Object"],"display":"{ value: U; map: (fn: (x: number) => U) => Container; }"}, +{"id":110,"symbolName":"__function","recursionId":95,"firstDeclaration":{"path":"/home/src/workspaces/project/main.ts","start":{"line":2,"character":48},"end":{"line":2,"character":87}},"flags":["Object"],"display":"(fn: (x: number) => U) => { value: U; map: (fn: (x: number) => U) => Container; }"}, {"id":111,"symbolName":"__object","recursionId":96,"firstDeclaration":{"path":"/home/src/workspaces/project/main.ts","start":{"line":2,"character":30},"end":{"line":2,"character":89}},"flags":["Object"],"display":"{ value: number; map: (fn: (x: number) => U) => { value: U; map: (fn: (x: number) => U) => Container; }; }"}, {"id":112,"symbolName":"U","recursionId":84,"firstDeclaration":{"path":"/home/src/workspaces/project/types.ts","start":{"line":3,"character":9},"end":{"line":3,"character":10}},"flags":["TypeParameter"]}, {"id":113,"symbolName":"__type","recursionId":85,"firstDeclaration":{"path":"/home/src/workspaces/project/types.ts","start":{"line":3,"character":16},"end":{"line":3,"character":27}},"flags":["Object"],"display":"(x: number) => any"}, diff --git a/tsc/testdata/baselines/reference/tsc/incremental/global-diagnostics-produced-during-semantic-checking.js b/tsc/testdata/baselines/reference/tsc/incremental/global-diagnostics-produced-during-semantic-checking.js index 3c629aeec7fcb..98bd4a0d2e0e1 100644 --- a/tsc/testdata/baselines/reference/tsc/incremental/global-diagnostics-produced-during-semantic-checking.js +++ b/tsc/testdata/baselines/reference/tsc/incremental/global-diagnostics-produced-during-semantic-checking.js @@ -191,10 +191,14 @@ export function* values() { yield 1; } tsgo -ExitStatus:: Success +ExitStatus:: DiagnosticsPresent_OutputsGenerated Output:: +error TS2318: Cannot find global type 'IterableIterator'. + +Found 1 error. + //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","errors":true,"root":[2],"fileNames":["lib.es2026.full.d.ts","./repro.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"303d5119b8941b887ef975780b83caec-export function* values() { yield 1; }\n// comment-only edit\n","signature":"b9f7a0d32d9887fdd864bf1c0dcd3591-export declare function values(): {};\n","impliedNodeFormat":1}],"affectedFilesPendingEmit":[2]} +{"version":"FakeTSVersion","errors":true,"root":[2],"fileNames":["lib.es2026.full.d.ts","./repro.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"303d5119b8941b887ef975780b83caec-export function* values() { yield 1; }\n// comment-only edit\n","signature":"b9f7a0d32d9887fdd864bf1c0dcd3591-export declare function values(): {};\n","impliedNodeFormat":1}],"semanticDiagnosticsPerFile":[[2,[{"noFile":true,"code":2318,"category":1,"messageKey":"Cannot_find_global_type_0_2318","messageArgs":["IterableIterator"]}]]],"affectedFilesPendingEmit":[2]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -236,6 +240,22 @@ Output:: } } ], + "semanticDiagnosticsPerFile": [ + [ + "./repro.ts", + [ + { + "noFile": true, + "code": 2318, + "category": 1, + "messageKey": "Cannot_find_global_type_0_2318", + "messageArgs": [ + "IterableIterator" + ] + } + ] + ] + ], "affectedFilesPendingEmit": [ [ "./repro.ts", @@ -243,7 +263,7 @@ Output:: 2 ] ], - "size": 1136 + "size": 1295 } tsconfig.json:: @@ -253,22 +273,17 @@ Signatures:: (computed .d.ts) /home/src/workspaces/project/repro.ts -Diff:: Like Strada, signature generation produces the missing-global diagnostic before semantic checking, so it is excluded from the file's semantic diagnostics. ---- nonIncremental.output.txt -+++ incremental.output.txt -@@ -1,4 +0,0 @@ --error TS2318: Cannot find global type 'IterableIterator'. -- --Found 1 error. -- - Edit [2]:: no change tsgo -ExitStatus:: Success +ExitStatus:: DiagnosticsPresent_OutputsGenerated Output:: +error TS2318: Cannot find global type 'IterableIterator'. + +Found 1 error. + //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2026.full.d.ts","./repro.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"303d5119b8941b887ef975780b83caec-export function* values() { yield 1; }\n// comment-only edit\n","signature":"b9f7a0d32d9887fdd864bf1c0dcd3591-export declare function values(): {};\n","impliedNodeFormat":1}],"affectedFilesPendingEmit":[2]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2026.full.d.ts","./repro.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"303d5119b8941b887ef975780b83caec-export function* values() { yield 1; }\n// comment-only edit\n","signature":"b9f7a0d32d9887fdd864bf1c0dcd3591-export declare function values(): {};\n","impliedNodeFormat":1}],"semanticDiagnosticsPerFile":[[2,[{"noFile":true,"code":2318,"category":1,"messageKey":"Cannot_find_global_type_0_2318","messageArgs":["IterableIterator"]}]]],"affectedFilesPendingEmit":[2]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -309,6 +324,22 @@ Output:: } } ], + "semanticDiagnosticsPerFile": [ + [ + "./repro.ts", + [ + { + "noFile": true, + "code": 2318, + "category": 1, + "messageKey": "Cannot_find_global_type_0_2318", + "messageArgs": [ + "IterableIterator" + ] + } + ] + ] + ], "affectedFilesPendingEmit": [ [ "./repro.ts", @@ -316,7 +347,7 @@ Output:: 2 ] ], - "size": 1122 + "size": 1281 } tsconfig.json:: @@ -324,15 +355,6 @@ SemanticDiagnostics:: Signatures:: -Diff:: Like Strada, the cached semantic diagnostics do not include the missing-global diagnostic produced during signature generation. ---- nonIncremental.output.txt -+++ incremental.output.txt -@@ -1,4 +0,0 @@ --error TS2318: Cannot find global type 'IterableIterator'. -- --Found 1 error. -- - Edit [3]:: delete build info to restore the semantic diagnostic //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *deleted* diff --git a/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-type-after-comment-only-edit.js b/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-type-after-comment-only-edit.js index 7e3f0da04d4e6..610f7fa7e72b5 100644 --- a/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-type-after-comment-only-edit.js +++ b/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-type-after-comment-only-edit.js @@ -105,11 +105,10 @@ tsgo ExitStatus:: Success Output:: //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","errors":true,"root":[2],"fileNames":["lib.es2026.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"05e6c83fc809e0d08962e5b3425da798-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\n// comment-only edit\n","signature":"93e92d0786a923286e91eb7834b5ae1a-type Json = string | Json[];\nexport declare const value: {\n items: Json[];\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"strict":true},"affectedFilesPendingEmit":[2]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2026.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"05e6c83fc809e0d08962e5b3425da798-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\n// comment-only edit\n","signature":"93e92d0786a923286e91eb7834b5ae1a-type Json = string | Json[];\nexport declare const value: {\n items: Json[];\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"strict":true},"affectedFilesPendingEmit":[2]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", - "errors": true, "root": [ { "files": [ @@ -157,7 +156,7 @@ Output:: 2 ] ], - "size": 1437 + "size": 1423 } tsconfig.json:: @@ -172,60 +171,6 @@ Edit [1]:: no change tsgo ExitStatus:: Success Output:: -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2026.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"05e6c83fc809e0d08962e5b3425da798-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\n// comment-only edit\n","signature":"93e92d0786a923286e91eb7834b5ae1a-type Json = string | Json[];\nexport declare const value: {\n items: Json[];\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"strict":true},"affectedFilesPendingEmit":[2]} -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* -{ - "version": "FakeTSVersion", - "root": [ - { - "files": [ - "./repro.ts" - ], - "original": 2 - } - ], - "fileNames": [ - "lib.es2026.full.d.ts", - "./repro.ts" - ], - "fileInfos": [ - { - "fileName": "lib.es2026.full.d.ts", - "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": "CommonJS", - "original": { - "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./repro.ts", - "version": "05e6c83fc809e0d08962e5b3425da798-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\n// comment-only edit\n", - "signature": "93e92d0786a923286e91eb7834b5ae1a-type Json = string | Json[];\nexport declare const value: {\n items: Json[];\n};\nexport {};\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "05e6c83fc809e0d08962e5b3425da798-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\n// comment-only edit\n", - "signature": "93e92d0786a923286e91eb7834b5ae1a-type Json = string | Json[];\nexport declare const value: {\n items: Json[];\n};\nexport {};\n", - "impliedNodeFormat": 1 - } - } - ], - "options": { - "strict": true - }, - "affectedFilesPendingEmit": [ - [ - "./repro.ts", - "Js", - 2 - ] - ], - "size": 1423 -} tsconfig.json:: SemanticDiagnostics:: @@ -247,11 +192,10 @@ tsgo ExitStatus:: Success Output:: //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","errors":true,"root":[2],"fileNames":["lib.es2026.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"989f15878b40fd4e572d65e47a8cc845-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\n// comment-only edit\n\n// another comment\n","signature":"93e92d0786a923286e91eb7834b5ae1a-type Json = string | Json[];\nexport declare const value: {\n items: Json[];\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"strict":true},"affectedFilesPendingEmit":[2]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2026.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"989f15878b40fd4e572d65e47a8cc845-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\n// comment-only edit\n\n// another comment\n","signature":"93e92d0786a923286e91eb7834b5ae1a-type Json = string | Json[];\nexport declare const value: {\n items: Json[];\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"strict":true},"affectedFilesPendingEmit":[2]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", - "errors": true, "root": [ { "files": [ @@ -299,7 +243,7 @@ Output:: 2 ] ], - "size": 1459 + "size": 1445 } tsconfig.json:: @@ -314,60 +258,6 @@ Edit [3]:: no change tsgo ExitStatus:: Success Output:: -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2026.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"989f15878b40fd4e572d65e47a8cc845-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\n// comment-only edit\n\n// another comment\n","signature":"93e92d0786a923286e91eb7834b5ae1a-type Json = string | Json[];\nexport declare const value: {\n items: Json[];\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"strict":true},"affectedFilesPendingEmit":[2]} -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* -{ - "version": "FakeTSVersion", - "root": [ - { - "files": [ - "./repro.ts" - ], - "original": 2 - } - ], - "fileNames": [ - "lib.es2026.full.d.ts", - "./repro.ts" - ], - "fileInfos": [ - { - "fileName": "lib.es2026.full.d.ts", - "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": "CommonJS", - "original": { - "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./repro.ts", - "version": "989f15878b40fd4e572d65e47a8cc845-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\n// comment-only edit\n\n// another comment\n", - "signature": "93e92d0786a923286e91eb7834b5ae1a-type Json = string | Json[];\nexport declare const value: {\n items: Json[];\n};\nexport {};\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "989f15878b40fd4e572d65e47a8cc845-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\n// comment-only edit\n\n// another comment\n", - "signature": "93e92d0786a923286e91eb7834b5ae1a-type Json = string | Json[];\nexport declare const value: {\n items: Json[];\n};\nexport {};\n", - "impliedNodeFormat": 1 - } - } - ], - "options": { - "strict": true - }, - "affectedFilesPendingEmit": [ - [ - "./repro.ts", - "Js", - 2 - ] - ], - "size": 1445 -} tsconfig.json:: SemanticDiagnostics:: diff --git a/tsc/testdata/baselines/reference/tsc/incremental/recursive-readonly-mapped-type-after-comment-only-edit.js b/tsc/testdata/baselines/reference/tsc/incremental/recursive-readonly-mapped-type-after-comment-only-edit.js index 009ea164deed4..211fd77b970ec 100644 --- a/tsc/testdata/baselines/reference/tsc/incremental/recursive-readonly-mapped-type-after-comment-only-edit.js +++ b/tsc/testdata/baselines/reference/tsc/incremental/recursive-readonly-mapped-type-after-comment-only-edit.js @@ -105,11 +105,10 @@ tsgo ExitStatus:: Success Output:: //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","errors":true,"root":[2],"fileNames":["lib.es2026.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"44adeee334483dab0e3927db949cf78a-type Json = string | readonly Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as readonly Json[] });\n// comment-only edit\n","signature":"ac9ba36fbad04eb70b8f2b14cdf772ef-type Json = string | readonly Json[];\nexport declare const value: {\n items: readonly Json[];\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"strict":true},"affectedFilesPendingEmit":[2]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2026.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"44adeee334483dab0e3927db949cf78a-type Json = string | readonly Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as readonly Json[] });\n// comment-only edit\n","signature":"ac9ba36fbad04eb70b8f2b14cdf772ef-type Json = string | readonly Json[];\nexport declare const value: {\n items: readonly Json[];\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"strict":true},"affectedFilesPendingEmit":[2]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", - "errors": true, "root": [ { "files": [ @@ -157,7 +156,7 @@ Output:: 2 ] ], - "size": 1473 + "size": 1459 } tsconfig.json:: @@ -172,60 +171,6 @@ Edit [1]:: no change tsgo ExitStatus:: Success Output:: -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2026.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"44adeee334483dab0e3927db949cf78a-type Json = string | readonly Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as readonly Json[] });\n// comment-only edit\n","signature":"ac9ba36fbad04eb70b8f2b14cdf772ef-type Json = string | readonly Json[];\nexport declare const value: {\n items: readonly Json[];\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"strict":true},"affectedFilesPendingEmit":[2]} -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* -{ - "version": "FakeTSVersion", - "root": [ - { - "files": [ - "./repro.ts" - ], - "original": 2 - } - ], - "fileNames": [ - "lib.es2026.full.d.ts", - "./repro.ts" - ], - "fileInfos": [ - { - "fileName": "lib.es2026.full.d.ts", - "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": "CommonJS", - "original": { - "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./repro.ts", - "version": "44adeee334483dab0e3927db949cf78a-type Json = string | readonly Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as readonly Json[] });\n// comment-only edit\n", - "signature": "ac9ba36fbad04eb70b8f2b14cdf772ef-type Json = string | readonly Json[];\nexport declare const value: {\n items: readonly Json[];\n};\nexport {};\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "44adeee334483dab0e3927db949cf78a-type Json = string | readonly Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as readonly Json[] });\n// comment-only edit\n", - "signature": "ac9ba36fbad04eb70b8f2b14cdf772ef-type Json = string | readonly Json[];\nexport declare const value: {\n items: readonly Json[];\n};\nexport {};\n", - "impliedNodeFormat": 1 - } - } - ], - "options": { - "strict": true - }, - "affectedFilesPendingEmit": [ - [ - "./repro.ts", - "Js", - 2 - ] - ], - "size": 1459 -} tsconfig.json:: SemanticDiagnostics:: @@ -247,11 +192,10 @@ tsgo ExitStatus:: Success Output:: //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","errors":true,"root":[2],"fileNames":["lib.es2026.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"123beaefc70ba63a9447b94fb12d09b5-type Json = string | readonly Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as readonly Json[] });\n// comment-only edit\n\n// another comment\n","signature":"ac9ba36fbad04eb70b8f2b14cdf772ef-type Json = string | readonly Json[];\nexport declare const value: {\n items: readonly Json[];\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"strict":true},"affectedFilesPendingEmit":[2]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2026.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"123beaefc70ba63a9447b94fb12d09b5-type Json = string | readonly Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as readonly Json[] });\n// comment-only edit\n\n// another comment\n","signature":"ac9ba36fbad04eb70b8f2b14cdf772ef-type Json = string | readonly Json[];\nexport declare const value: {\n items: readonly Json[];\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"strict":true},"affectedFilesPendingEmit":[2]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", - "errors": true, "root": [ { "files": [ @@ -299,7 +243,7 @@ Output:: 2 ] ], - "size": 1495 + "size": 1481 } tsconfig.json:: @@ -314,60 +258,6 @@ Edit [3]:: no change tsgo ExitStatus:: Success Output:: -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2026.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"123beaefc70ba63a9447b94fb12d09b5-type Json = string | readonly Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as readonly Json[] });\n// comment-only edit\n\n// another comment\n","signature":"ac9ba36fbad04eb70b8f2b14cdf772ef-type Json = string | readonly Json[];\nexport declare const value: {\n items: readonly Json[];\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"strict":true},"affectedFilesPendingEmit":[2]} -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* -{ - "version": "FakeTSVersion", - "root": [ - { - "files": [ - "./repro.ts" - ], - "original": 2 - } - ], - "fileNames": [ - "lib.es2026.full.d.ts", - "./repro.ts" - ], - "fileInfos": [ - { - "fileName": "lib.es2026.full.d.ts", - "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": "CommonJS", - "original": { - "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./repro.ts", - "version": "123beaefc70ba63a9447b94fb12d09b5-type Json = string | readonly Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as readonly Json[] });\n// comment-only edit\n\n// another comment\n", - "signature": "ac9ba36fbad04eb70b8f2b14cdf772ef-type Json = string | readonly Json[];\nexport declare const value: {\n items: readonly Json[];\n};\nexport {};\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "123beaefc70ba63a9447b94fb12d09b5-type Json = string | readonly Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as readonly Json[] });\n// comment-only edit\n\n// another comment\n", - "signature": "ac9ba36fbad04eb70b8f2b14cdf772ef-type Json = string | readonly Json[];\nexport declare const value: {\n items: readonly Json[];\n};\nexport {};\n", - "impliedNodeFormat": 1 - } - } - ], - "options": { - "strict": true - }, - "affectedFilesPendingEmit": [ - [ - "./repro.ts", - "Js", - 2 - ] - ], - "size": 1481 -} tsconfig.json:: SemanticDiagnostics:: From 61cc188a0da23d3ebe49250931c89311ffe808e4 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 25 Oct 2026 21:45:54 -0700 Subject: [PATCH 060/194] Memoize the remaining checker state MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The caches and guards still held in plain fields reused results without accounting for what computing them had depended on, so results and diagnostics could differ with the order in which they were first requested. Each is now a memo, or moves to the checker if it describes a computation in progress rather than a result. - The merged-symbol table was written while resolving class members, when a late-bound member collided with an early one, so whether getMergedSymbol saw that merge depended on whether something had already resolved the parent's members. The global table is now fixed after initialization; later merges go into a memo map, and getMergedSymbol resolves the parent's members first whenever syntax says late binding could happen. - Check-once guards for functions, merged exports, unreachable code, per-symbol checks, ambient statements and marked assignments also ran while answering queries, which dropped their diagnostics, so a later check skipped them. As memos, skipping a check replays its diagnostics. Unreachable code is now always reported over the whole run, rather than from whichever statement was checked first. - Marker types were remembered in a set when created, so the same interned instantiation nested elsewhere was a marker or not depending on whether its variances had been measured before. A type is now a marker only while the computation creating it is running. - Relation results are a memo map, and each top-level comparison is a resolution of its own. The complexity budget of a comparison was the room left in the cache, so overflowing depended on how much had been compared before; it is now a constant. - Global types and symbols were resolved through once-closures per checker, so each clone resolved every global again outside the store. They are now store memo maps shared by all checkers. - Instantiation caches, variances, the import.meta type, lazily computed links, JSX attribute types and namespaces, symbol accessibility caches, the external module container index, and the lazily resolved caches of mapped, conditional, union, intersection and type reference types are memos. Two places that peeked at a mapped type's cached name type now ask for it. - Results kept where a memo would cost space, such as bits of object flags, a signature's type predicate, an interface's declared members, parameter initializer and enum flags, and whether a synthetic property is a discriminant, are accounted for under keyed cells and flag memos, leaving the storage as it is. - Lazily resolved class and interface types fill each property slot on first use. They did so through the checker that created the type, so another checker sharing the store ran that computation on the creator's stacks. Slots are now filled by the checker reading them, and member layouts are cached in a memo map so that reusing one accounts for the base members it was computed from. - Flow-dependent expression types outside loop analysis are pure, so they move to the store; within loop analysis the checker cache stays. The explicit-type resolution set and binding element parents in progress describe computations in progress, so they live in the checker, where checkers sharing a store cannot see each other's progress. A new raw cache would silently reintroduce order dependence, so a test fails on any field of the store, of links, or of the types and signatures declared beside them that is not a memo, unless it is listed with the reason it need not be one. Known gaps are listed as TODOs. │ before.txt │ after.txt │ │ sec/op │ sec/op vs base │ Compiler 2.410 ± 1% 2.445 ± 1% +1.45% (p=0.002 n=10) │ before.txt │ after.txt │ │ peak-RSS-bytes │ peak-RSS-bytes vs base │ Compiler 358.7Mi ± 5% 358.8Mi ± 6% ~ (p=0.631 n=10) --- tsc/internal/checker/checker.go | 1055 +++++++++-------- tsc/internal/checker/checker_test.go | 413 +++++++ tsc/internal/checker/flow.go | 45 +- tsc/internal/checker/grammarchecks.go | 18 +- tsc/internal/checker/jsx.go | 101 +- tsc/internal/checker/memo.go | 124 +- tsc/internal/checker/nodebuilder_hover.go | 2 +- tsc/internal/checker/nodebuilderimpl.go | 12 +- tsc/internal/checker/relater.go | 208 +++- tsc/internal/checker/services.go | 2 +- tsc/internal/checker/symbolaccessibility.go | 88 +- tsc/internal/checker/tracer.go | 8 +- tsc/internal/checker/types.go | 163 ++- tsc/internal/checker/types_test.go | 40 +- tsc/internal/checker/utilities.go | 2 +- ...onErrors(checkorder=typesfirst).errors.txt | 10 +- 16 files changed, 1535 insertions(+), 756 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 33a4db15734a5..cc26fcd30be7c 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -616,6 +616,7 @@ type Checker struct { varianceTypeParameter *Type isInferencePartiallyBlocked bool wasCanceled bool + buildingExternalModuleContainers bool evaluate evaluator.Evaluator resolveName func(location *ast.Node, name string, meaning ast.SymbolFlags, nameNotFoundMessage *diagnostics.Message, isUse bool, excludeGlobals bool) *ast.Symbol resolveNameForSymbolSuggestion func(location *ast.Node, name string, meaning ast.SymbolFlags, nameNotFoundMessage *diagnostics.Message, isUse bool, excludeGlobals bool) *ast.Symbol @@ -657,7 +658,11 @@ type Checker struct { typeResolutionTop int // 1-based index in resolutions of the innermost resolution, or 0 resolutionStart int // Index in resolutions below which resolutions are not searched for cycles varianceStack []VarianceStackEntry + varianceMeasuring map[*ast.Symbol]int // Symbols whose variances are being measured, including by suspended computations callResolutionStack []*ast.Node + resolvingExplicitTypeOfSymbol collections.Set[*ast.Symbol] + resolvingAssertionOperands collections.Set[*ast.Node] + resolvingBindingElementParents collections.Set[*ast.Node] // Binding element parents whose types are being resolved to narrow a reference apparentArgumentCount *int lastGetCombinedNodeFlagsNode *ast.Node lastGetCombinedNodeFlagsResult ast.NodeFlags @@ -670,7 +675,7 @@ type Checker struct { flowLoopFrameCount uint64 antecedentTypes []*Type flowInvocationCount int - flowTypeCache map[*ast.Node]*Type + flowTypeCache map[*ast.Node]*Type // Types of expressions within the innermost loop analysis lastFlowNode *ast.FlowNode lastFlowNodeReachable bool renamedBindingElementsInTypes []*ast.Node @@ -757,88 +762,98 @@ type Checker struct { // relation caches, and collected diagnostics. Every checker sharing a store // observes the same results. type memoStore struct { - root *Checker // The checker that created this store; owns type back-pointers. - id uint32 - program Program - compilerOptions *core.CompilerOptions - files []*ast.SourceFile - fileIndexMap map[*ast.SourceFile]int - TypeCount uint32 - memberLayoutCount uint32 - SymbolCount uint32 - SignatureCount uint32 - TotalInstantiationCount uint32 - languageVersion core.ScriptTarget - moduleKind core.ModuleKind - moduleResolutionKind core.ModuleResolutionKind - legacyDecorators bool - emitStandardClassFields bool - strictNullChecks bool - strictFunctionTypes bool - strictBindCallApply bool - strictPropertyInitialization bool - strictBuiltinIteratorReturn bool - noImplicitAny bool - noImplicitThis bool - useUnknownInCatchVariables bool - exactOptionalPropertyTypes bool - canCollectSymbolAliasAccessibilityData bool - arrayVariances []VarianceFlags - globals ast.SymbolTable - stringLiteralTypes memoMap[string, *Type] - numberLiteralTypes memoMap[jsnum.Number, *Type] - nanType *Type - bigintLiteralTypes memoMap[jsnum.PseudoBigInt, *Type] - enumLiteralTypes memoMap[EnumLiteralKey, *Type] - enumNaNLiteralTypes memoMap[*ast.Symbol, *Type] - indexedAccessTypes memoMap[CacheHashKey, *Type] - templateLiteralTypes memoMap[CacheHashKey, *Type] - stringMappingTypes memoMap[StringMappingKey, *Type] - uniqueESSymbolTypes memoMap[*ast.Symbol, *Type] - thisExpandos memoMap[*ast.Symbol, thisExpando] - subtypeReductionCache memoMap[CacheHashKey, []*Type] - cachedTypes memoMap[CachedTypeKey, *Type] - cachedSignatures memoMap[CachedSignatureKey, *Signature] - undefinedProperties memoMap[*ast.Symbol, *ast.Symbol] - narrowedTypes memoMap[NarrowedTypeKey, *Type] - assignmentReducedTypes memoMap[AssignmentReducedKey, *Type] - discriminatedContextualTypes memoMap[DiscriminatedContextualTypeKey, *Type] - instantiationExpressionTypes memoMap[InstantiationExpressionKey, *instantiationExpressionEntry] - substitutionTypes memoMap[SubstitutionTypeKey, *Type] - reverseMappedCache memoMap[ReverseMappedTypeKey, *Type] - reverseHomomorphicMappedCache memoMap[ReverseMappedTypeKey, *Type] - iterationTypesCache memoMap[IterationTypesKey, IterationTypes] - memberLayoutCache map[CacheHashKey]*MemberLayout - markerTypes collections.Set[*Type] - resolvingExplicitTypeOfSymbol collections.Set[*ast.Symbol] - resolvingAssertionOperands collections.Set[*ast.Node] - constructorOrFunctionChecked collections.Set[*ast.Symbol] - undefinedSymbol *ast.Symbol - argumentsSymbol *ast.Symbol - requireSymbol *ast.Symbol - unknownSymbol *ast.Symbol - unresolvedSymbols memoMap[string, *ast.Symbol] - errorTypes memoMap[CacheHashKey, *Type] - globalThisSymbol *ast.Symbol - symbolTableAliasCache memoMap[symbolTableID, []*ast.Symbol] - classExpressionNameTables memoMap[ast.NodeId, ast.SymbolTable] - tupleTypes memoMap[CacheHashKey, *Type] - unionTypes memoMap[CacheHashKey, *Type] - unionOfUnionTypes memoMap[UnionOfUnionKey, *Type] - intersectionTypes memoMap[CacheHashKey, *Type] - objectLiteralTypes memoMap[CacheHashKey, *Type] - spreadTypes memoMap[CacheHashKey, *Type] - objectContentTypes memoMap[CacheHashKey, *Type] - spreadSymbols memoMap[spreadSymbolKey, *ast.Symbol] - symbolsWithType memoMap[symbolWithTypeKey, *ast.Symbol] - paddedProperties memoMap[symbolWithTypeKey, *ast.Symbol] - bindingPatternTypes memoMap[CacheHashKey, *Type] - intersectionContentTypes memoMap[CacheHashKey, *Type] - propertiesTypes memoMap[PropertiesTypesKey, *Type] - diagnostics ast.DiagnosticsCollection - suggestionDiagnostics ast.DiagnosticsCollection - mergedSymbols symbolLinkStore[*ast.Symbol] - mergedExportsChecked collections.Set[*ast.Symbol] + root *Checker // The checker that created this store; owns type back-pointers. + id uint32 + program Program + compilerOptions *core.CompilerOptions + files []*ast.SourceFile + fileIndexMap map[*ast.SourceFile]int + TypeCount uint32 + memberLayoutCount uint32 + SymbolCount uint32 + SignatureCount uint32 + TotalInstantiationCount uint32 + languageVersion core.ScriptTarget + moduleKind core.ModuleKind + moduleResolutionKind core.ModuleResolutionKind + legacyDecorators bool + emitStandardClassFields bool + strictNullChecks bool + strictFunctionTypes bool + strictBindCallApply bool + strictPropertyInitialization bool + strictBuiltinIteratorReturn bool + noImplicitAny bool + noImplicitThis bool + useUnknownInCatchVariables bool + exactOptionalPropertyTypes bool + canCollectSymbolAliasAccessibilityData bool + arrayVariances []VarianceFlags + globals ast.SymbolTable + globalTypes memoMap[globalKey, *Type] + globalSymbols memoMap[globalKey, *ast.Symbol] + stringLiteralTypes memoMap[string, *Type] + numberLiteralTypes memoMap[jsnum.Number, *Type] + nanType *Type + bigintLiteralTypes memoMap[jsnum.PseudoBigInt, *Type] + enumLiteralTypes memoMap[EnumLiteralKey, *Type] + enumNaNLiteralTypes memoMap[*ast.Symbol, *Type] + indexedAccessTypes memoMap[CacheHashKey, *Type] + templateLiteralTypes memoMap[CacheHashKey, *Type] + stringMappingTypes memoMap[StringMappingKey, *Type] + uniqueESSymbolTypes memoMap[*ast.Symbol, *Type] + thisExpandos memoMap[*ast.Symbol, thisExpando] + subtypeReductionCache memoMap[CacheHashKey, []*Type] + cachedTypes memoMap[CachedTypeKey, *Type] + cachedSignatures memoMap[CachedSignatureKey, *Signature] + undefinedProperties memoMap[*ast.Symbol, *ast.Symbol] + narrowedTypes memoMap[NarrowedTypeKey, *Type] + assignmentReducedTypes memoMap[AssignmentReducedKey, *Type] + discriminatedContextualTypes memoMap[DiscriminatedContextualTypeKey, *Type] + instantiationExpressionTypes memoMap[InstantiationExpressionKey, *instantiationExpressionEntry] + substitutionTypes memoMap[SubstitutionTypeKey, *Type] + reverseMappedCache memoMap[ReverseMappedTypeKey, *Type] + reverseHomomorphicMappedCache memoMap[ReverseMappedTypeKey, *Type] + iterationTypesCache memoMap[IterationTypesKey, IterationTypes] + memberLayoutCache memoMap[CacheHashKey, *MemberLayout] + constructorOrFunctionChecked memoSet[*ast.Symbol] + typeParametersChecked memoSet[*ast.Symbol] + indexSignaturesChecked memoSet[*ast.Symbol] + interfaceChecked memoSet[*ast.Symbol] + enumChecked memoSet[*ast.Symbol] + moduleExportsChecked memoSet[*ast.Symbol] + assignmentsMarked memoSet[*ast.Node] // Functions and source files whose assignments have been marked + undefinedSymbol *ast.Symbol + argumentsSymbol *ast.Symbol + requireSymbol *ast.Symbol + unknownSymbol *ast.Symbol + unresolvedSymbols memoMap[string, *ast.Symbol] + errorTypes memoMap[CacheHashKey, *Type] + globalThisSymbol *ast.Symbol + symbolTableAliasCache memoMap[symbolTableID, []*ast.Symbol] + classExpressionNameTables memoMap[ast.NodeId, ast.SymbolTable] + tupleTypes memoMap[CacheHashKey, *Type] + unionTypes memoMap[CacheHashKey, *Type] + unionOfUnionTypes memoMap[UnionOfUnionKey, *Type] + intersectionTypes memoMap[CacheHashKey, *Type] + objectLiteralTypes memoMap[CacheHashKey, *Type] + spreadTypes memoMap[CacheHashKey, *Type] + objectContentTypes memoMap[CacheHashKey, *Type] + spreadSymbols memoMap[spreadSymbolKey, *ast.Symbol] + symbolsWithType memoMap[symbolWithTypeKey, *ast.Symbol] + paddedProperties memoMap[symbolWithTypeKey, *ast.Symbol] + bindingPatternTypes memoMap[CacheHashKey, *Type] + intersectionContentTypes memoMap[CacheHashKey, *Type] + propertiesTypes memoMap[PropertiesTypesKey, *Type] + diagnostics ast.DiagnosticsCollection + suggestionDiagnostics ast.DiagnosticsCollection + mergedSymbols symbolLinkStore[*ast.Symbol] + lateMergedSymbols memoMap[*ast.Symbol, *ast.Symbol] + lateBindableKinds memoMap[*ast.Symbol, uint8] + // mergesFrozen is set once global merging is done; mergedSymbols is + // immutable from then on. + mergesFrozen bool + mergedExportsChecked memoSet[*ast.Symbol] nodeLinks core.LinkStore[*ast.Node, NodeLinks] signatureLinks nodeLinkStore[SignatureLinks] symbolNodeLinks nodeLinkStore[SymbolNodeLinks] @@ -863,8 +878,10 @@ type memoStore struct { varianceLinks core.LinkStore[*ast.Symbol, VarianceLinks] ReverseMappedSymbolLinks core.LinkStore[*ast.Symbol, ReverseMappedSymbolLinks] markedAssignmentSymbolLinks core.LinkStore[*ast.Symbol, MarkedAssignmentSymbolLinks] - symbolContainerLinks core.LinkStore[*ast.Symbol, ContainingSymbolLinks] - externalModuleContainers *externalModuleContainerIndex + importedContainingModules memoMap[symbolFileKey, []*ast.Symbol] // Modules imported by a file that export a symbol + extendedContainers memoMap[*ast.Symbol, []*ast.Symbol] // Containers (other than the parent) which a symbol is aliased in + accessibleChains memoMap[accessibleChainCacheKey, []*ast.Symbol] // Accessible symbol chains by location + externalModuleContainers memo[*externalModuleContainerIndex] sourceFileLinks core.LinkStore[*ast.SourceFile, SourceFileLinks] patternForType memoMap[*Type, *ast.Node] contextFreeTypes memoMap[*ast.Node, *Type] @@ -947,11 +964,12 @@ type memoStore struct { anyArrayType *Type autoArrayType *Type anyReadonlyArrayType *Type - deferredGlobalImportMetaExpressionType *Type + deferredGlobalImportMetaExpressionType memo[*Type] emptyStringType *Type zeroType *Type zeroBigIntType *Type typeofType *Type + flowExpressionTypes memoMap[*ast.Node, *Type] flowLoopCache memoMap[FlowLoopKey, *flowLoopCacheEntry] flowNodeReachable memoMap[*ast.FlowNode, bool] flowNodePostSuper memoMap[*ast.FlowNode, bool] @@ -967,7 +985,7 @@ type memoStore struct { packagesMap map[string]bool ambientModulesOnce sync.Once ambientModules []*ast.Symbol - reportedUnreachableNodes collections.Set[*ast.Node] + reportedUnreachableNodes memoSet[*ast.Node] nonExistentProperties collections.Set[NonExistentPropertyKey] deferredDiagnosticCallbacks []func(c *Checker) memoStates map[memoKey]*memoState // Memo state of results computed by queries; see memo.go @@ -1061,7 +1079,6 @@ func NewChecker(program Program, tracer *Tracer) (*Checker, *sync.Mutex) { c.unknownEmptyObjectType = c.newAnonymousType(nil /*symbol*/, nil, nil, nil, nil) c.unknownUnionType = c.createUnknownUnionType() c.emptyGenericType = c.newAnonymousType(nil /*symbol*/, nil, nil, nil, nil) - c.emptyGenericType.AsObjectType().instantiations = make(map[CacheHashKey]*Type) c.anyFunctionType = c.newAnonymousType(nil /*symbol*/, nil, nil, nil, nil) c.anyFunctionType.objectFlags |= ObjectFlagsNonInferrableType c.noConstraintType = c.newAnonymousType(nil /*symbol*/, nil, nil, nil, nil) @@ -1091,6 +1108,7 @@ func NewChecker(program Program, tracer *Tracer) (*Checker, *sync.Mutex) { c.comparableRelation = &Relation{} c.identityRelation = &Relation{} c.initializeChecker() + c.mergesFrozen = true c.checking = false return c, &c.mu } @@ -1206,39 +1224,73 @@ func (c *Checker) reportUnmeasurableWorker(t *Type) *Type { return t } +// globalKey identifies the resolution of a global by name. Resolutions are +// cached in the store, so all checkers share them. +type globalKey struct { + kind globalKind + name string + arity int + reportErrors bool +} + +type globalKind uint8 + +const ( + globalKindType globalKind = iota + globalKindTypeAlias + globalKindValueSymbol + globalKindTypeSymbol +) + // Resolve to the global class or interface by the given name and arity, or emptyObjectType/emptyGenericType otherwise func (c *Checker) getGlobalTypeResolver(name string, arity int, reportErrors bool) func() *Type { - return memoizeGlobal(c, func() *Type { - return c.getGlobalType(name, arity, reportErrors) - }) + key := globalKey{globalKindType, name, arity, reportErrors} + return func() *Type { + if t, ok := c.globalTypes.get(c, key); ok { + return t + } + return c.globalTypes.compute(c, key, func() *Type { + return c.getGlobalType(name, arity, reportErrors) + }) + } } // Resolve to the global type alias symbol by the given name and arity, or nil otherwise func (c *Checker) getGlobalTypeAliasResolver(name string, arity int, reportErrors bool) func() *ast.Symbol { - return memoizeGlobal(c, func() *ast.Symbol { + return c.getGlobalSymbolResolver(globalKey{globalKindTypeAlias, name, arity, reportErrors}, func() *ast.Symbol { return c.getGlobalTypeAliasSymbol(name, arity, reportErrors) }) } // Resolve to the global value symbol by the given name, or nil otherwise func (c *Checker) getGlobalValueSymbolResolver(name string, reportErrors bool) func() *ast.Symbol { - return memoizeGlobal(c, func() *ast.Symbol { + return c.getGlobalSymbolResolver(globalKey{globalKindValueSymbol, name, 0, reportErrors}, func() *ast.Symbol { return c.getGlobalSymbol(name, ast.SymbolFlagsValue, core.IfElse(reportErrors, diagnostics.Cannot_find_global_value_0, nil)) }) } func (c *Checker) getGlobalTypeSymbolResolver(name string, reportErrors bool) func() *ast.Symbol { - return memoizeGlobal(c, func() *ast.Symbol { + return c.getGlobalSymbolResolver(globalKey{globalKindTypeSymbol, name, 0, reportErrors}, func() *ast.Symbol { return c.getGlobalSymbol(name, ast.SymbolFlagsType, core.IfElse(reportErrors, diagnostics.Cannot_find_global_type_0, nil)) }) } +func (c *Checker) getGlobalSymbolResolver(key globalKey, resolve func() *ast.Symbol) func() *ast.Symbol { + return func() *ast.Symbol { + if symbol, ok := c.globalSymbols.get(c, key); ok { + return symbol + } + return c.globalSymbols.compute(c, key, resolve) + } +} + func (c *Checker) getGlobalTypesResolver(names []string, arity int, reportErrors bool) func() []*Type { - return memoizeGlobal(c, func() []*Type { - return core.Map(names, func(name string) *Type { - return c.getGlobalType(name, arity, reportErrors) - }) + resolvers := core.Map(names, func(name string) func() *Type { + return c.getGlobalTypeResolver(name, arity, reportErrors) }) + return func() []*Type { + return core.Map(resolvers, func(resolve func() *Type) *Type { return resolve() }) + } } func (c *Checker) getGlobalTypeAliasSymbol(name string, arity int, reportErrors bool) *ast.Symbol { @@ -2266,14 +2318,16 @@ func (c *Checker) getTypeOnlyAliasDeclarationEx(symbol *ast.Symbol, meaning ast. func (c *Checker) getImmediateAliasedSymbol(symbol *ast.Symbol) *ast.Symbol { debug.Assert(symbol.Flags()&ast.SymbolFlagsAlias != 0, "Should only get Alias here.") links := c.aliasSymbolLinks.Get(symbol) - if links.immediateTarget == nil { + if links.immediateTarget.get(c) == nil { node := c.getDeclarationOfAliasSymbol(symbol) if node == nil { panic("Unexpected nil in getImmediateAliasedSymbol") } - links.immediateTarget = c.getTargetOfAliasDeclaration(node, true /*dontRecursivelyResolve*/) + links.immediateTarget.begin(c) + links.immediateTarget.set(c, c.getTargetOfAliasDeclaration(node, true /*dontRecursivelyResolve*/)) + c.endMemo() } - return links.immediateTarget + return links.immediateTarget.get(c) } func (c *Checker) addTypeOnlyDeclarationRelatedInfo(diagnostic *ast.Diagnostic, typeOnlyDeclaration *ast.Node, name string) *ast.Diagnostic { @@ -2342,7 +2396,6 @@ func (c *Checker) checkSourceFileWorker(ctx context.Context, sourceFile *ast.Sou c.checkUnusedRenamedBindingElements() } c.produceDeferredDiagnostics() - c.reportedUnreachableNodes.Clear() links.typeChecked = true } if checkUnused && !links.unusedChecked { @@ -2521,63 +2574,38 @@ func (c *Checker) checkSourceElementWorker(node *ast.Node) { } func (c *Checker) checkSourceElementUnreachable(node *ast.Node) bool { - if !ast.IsPotentiallyExecutableNode(node) { + if !ast.IsPotentiallyExecutableNode(node) || !c.isSourceElementUnreachable(node) { return false } - - if c.reportedUnreachableNodes.Has(node) { - return true - } - - if !c.isSourceElementUnreachable(node) { - return false - } - - c.reportedUnreachableNodes.Add(node) - - sourceFile := ast.GetSourceFileOfNode(node) - + // Report the whole run of unreachable statements containing node once, at + // the same range whichever statement of the run is checked first. startNode := node endNode := node - parent := node.Parent if parent.CanHaveStatements() { statements := parent.Statements() if offset := slices.Index(statements, node); offset >= 0 { - // Scan backwards to find the first unreachable unreported node; - // this may happen when producing region diagnostics where not all nodes - // will have been visited. - // TODO: enable this code once we support region diagnostics again. + isUnreachable := func(n *ast.Node) bool { + return ast.IsPotentiallyExecutableNode(n) && c.isSourceElementUnreachable(n) + } first := offset - // for i := offset - 1; i >= 0; i-- { - // prevNode := statements[i] - // if !ast.IsPotentiallyExecutableNode(prevNode) || c.reportedUnreachableNodes.Has(prevNode) || !c.isSourceElementUnreachable(prevNode) { - // break - // } - // firstUnreachableIndex = i - // c.reportedUnreachableNodes.Add(prevNode) - // } - + for first > 0 && isUnreachable(statements[first-1]) { + first-- + } last := offset - for i := offset + 1; i < len(statements); i++ { - nextNode := statements[i] - if !ast.IsPotentiallyExecutableNode(nextNode) || !c.isSourceElementUnreachable(nextNode) { - break - } - last = i - c.reportedUnreachableNodes.Add(nextNode) + for last < len(statements)-1 && isUnreachable(statements[last+1]) { + last++ } - startNode = statements[first] endNode = statements[last] } } - - start := scanner.GetTokenPosOfNode(startNode, sourceFile, false /*includeJSDoc*/) - - diagnostic := ast.NewDiagnostic(sourceFile, core.NewTextRange(start, endNode.End()), diagnostics.Unreachable_code_detected) - c.addErrorOrSuggestion(c.compilerOptions.AllowUnreachableCode == core.TSFalse, diagnostic) - + c.reportedUnreachableNodes.once(c, startNode, func() { + sourceFile := ast.GetSourceFileOfNode(node) + start := scanner.GetTokenPosOfNode(startNode, sourceFile, false /*includeJSDoc*/) + diagnostic := ast.NewDiagnostic(sourceFile, core.NewTextRange(start, endNode.End()), diagnostics.Unreachable_code_detected) + c.addErrorOrSuggestion(c.compilerOptions.AllowUnreachableCode == core.TSFalse, diagnostic) + }) return true } @@ -3438,9 +3466,7 @@ func (c *Checker) checkInferType(node *ast.Node) { c.checkSourceElement(typeParameterDeclarationNode) symbol := c.getSymbolOfDeclaration(typeParameterDeclarationNode) if len(symbol.Declarations()) > 1 { - links := c.declaredTypeLinks.Get(symbol) - if !links.typeParametersChecked { - links.typeParametersChecked = true + c.typeParametersChecked.once(c, symbol, func() { typeParameter := c.getDeclaredTypeOfTypeParameter(symbol) declarations := getDeclarationsOfKind(symbol, ast.KindTypeParameter) if !c.areTypeParametersIdentical(declarations, []*Type{typeParameter}, func(decl *ast.Node) []*ast.Node { return []*ast.Node{decl} }) { @@ -3450,7 +3476,7 @@ func (c *Checker) checkInferType(node *ast.Node) { c.error(declaration.Name(), diagnostics.All_declarations_of_0_must_have_identical_constraints, name) } } - } + }) } c.registerForUnusedIdentifiersCheck(node) } @@ -3582,10 +3608,7 @@ func (c *Checker) checkFunctionOrMethodDeclaration(node *ast.Node) { } func (c *Checker) checkFunctionOrConstructorSymbol(symbol *ast.Symbol) { - // Only check the symbol once - if c.constructorOrFunctionChecked.AddIfAbsent(symbol) { - c.checkFunctionOrConstructorSymbolWorker(symbol) - } + c.constructorOrFunctionChecked.once(c, symbol, func() { c.checkFunctionOrConstructorSymbolWorker(symbol) }) } func (c *Checker) checkFunctionOrConstructorSymbolWorker(symbol *ast.Symbol) { @@ -4552,9 +4575,7 @@ func (c *Checker) checkTypeParameterListsIdentical(symbol *ast.Symbol) { if len(symbol.Declarations()) == 1 { return } - links := c.declaredTypeLinks.Get(symbol) - if !links.typeParametersChecked { - links.typeParametersChecked = true + c.typeParametersChecked.once(c, symbol, func() { declarations := c.getClassOrInterfaceDeclarationsOfSymbol(symbol) if len(declarations) <= 1 { return @@ -4567,7 +4588,7 @@ func (c *Checker) checkTypeParameterListsIdentical(symbol *ast.Symbol) { c.error(declaration.Name(), diagnostics.All_declarations_of_0_must_have_identical_type_parameters, name) } } - } + }) } func (c *Checker) getClassOrInterfaceDeclarationsOfSymbol(symbol *ast.Symbol) []*ast.Node { @@ -4653,8 +4674,8 @@ func (c *Checker) getTypeWithoutSignatures(t *Type) *Type { if len(resolved.getSignatures()) != 0 { result := c.newObjectType(ObjectFlagsAnonymous, t.symbol) result.objectFlags |= ObjectFlagsMembersResolved - result.AsObjectType().members = resolved.getMembers() - result.AsObjectType().properties = resolved.getProperties() + result.AsObjectType().members = resolved.getMembers(c) + result.AsObjectType().properties = resolved.getProperties(c) return result } case t.flags&TypeFlagsIntersection != 0: @@ -5064,10 +5085,9 @@ func (c *Checker) checkIndexConstraintForIndexSignature(t *Type, checkInfo *Inde func (c *Checker) checkClassOrInterfaceForDuplicateIndexSignatures(node *ast.Node) { // Only check the type once - if links := c.declaredTypeLinks.Get(c.getSymbolOfDeclaration(node)); !links.indexSignaturesChecked { - links.indexSignaturesChecked = true + c.indexSignaturesChecked.once(c, c.getSymbolOfDeclaration(node), func() { c.checkTypeForDuplicateIndexSignatures(node) - } + }) } func (c *Checker) checkTypeForDuplicateIndexSignatures(node *ast.Node) { @@ -5171,8 +5191,7 @@ func (c *Checker) checkInterfaceDeclaration(node *ast.Node) { c.checkTypeParameterListsIdentical(symbol) // Check once per checker, but report on the first interface declaration, // independently of which declaration is checked first. - if links := c.declaredTypeLinks.Get(symbol); !links.interfaceChecked { - links.interfaceChecked = true + c.interfaceChecked.once(c, symbol, func() { firstInterfaceDeclaration := ast.GetDeclarationOfKind(symbol, ast.KindInterfaceDeclaration) t := c.getDeclaredTypeOfSymbol(symbol) typeWithThis := c.getTypeWithThisArgument(t, nil, false) @@ -5183,7 +5202,8 @@ func (c *Checker) checkInterfaceDeclaration(node *ast.Node) { } c.checkIndexConstraints(t, symbol /*isStaticIndex*/, false) } - } + }) + c.checkObjectTypeForDuplicateDeclarations(node, false /*checkPrivateNames*/) for _, heritageElement := range ast.GetExtendsHeritageClauseElements(node) { if ast.IsExpressionWithTypeArguments(heritageElement) { @@ -5258,8 +5278,7 @@ func (c *Checker) checkEnumDeclaration(node *ast.Node) { // // Only perform this check once per symbol enumSymbol := c.getSymbolOfDeclaration(node) - if links := c.declaredTypeLinks.Get(enumSymbol); !links.enumChecked { - links.enumChecked = true + c.enumChecked.once(c, enumSymbol, func() { if len(enumSymbol.Declarations()) > 1 { firstEnumDeclaration := ast.GetDeclarationOfKind(enumSymbol, ast.KindEnumDeclaration) enumIsConst := ast.IsEnumConst(firstEnumDeclaration) @@ -5289,7 +5308,7 @@ func (c *Checker) checkEnumDeclaration(node *ast.Node) { } } } - } + }) } func (c *Checker) checkEnumMember(node *ast.Node) { @@ -5946,8 +5965,7 @@ func getVerbatimModuleSyntaxErrorMessage(node *ast.Node) *diagnostics.Message { func (c *Checker) checkExternalModuleExports(node *ast.Node) { moduleSymbol := c.getSymbolOfDeclaration(node) - links := c.moduleSymbolLinks.Get(moduleSymbol) - if !links.exportsChecked { + c.moduleExportsChecked.once(c, moduleSymbol, func() { exportEqualsSymbol := moduleSymbol.Exports().Get(ast.InternalSymbolNameExportEquals) // An export assignment is in error if (a) the module exports value members or (b) if the module exports type or // namespace members and the exported entity also exports type or namespace members. @@ -5985,8 +6003,7 @@ func (c *Checker) checkExternalModuleExports(node *ast.Node) { } } } - links.exportsChecked = true - } + }) } func (c *Checker) hasExportedMembersOfKind(moduleSymbol *ast.Symbol, kind ast.SymbolFlags) bool { @@ -7206,9 +7223,13 @@ func (c *Checker) checkExportsOnMergedDeclarations(node *ast.Node) { return } } - if len(symbol.Declarations()) < 2 || !c.mergedExportsChecked.AddIfAbsent(symbol) { + if len(symbol.Declarations()) < 2 { return } + c.mergedExportsChecked.once(c, symbol, func() { c.checkExportsOnMergedDeclarationsWorker(symbol) }) +} + +func (c *Checker) checkExportsOnMergedDeclarationsWorker(symbol *ast.Symbol) { exportedDeclarationSpaces := DeclarationSpacesNone nonExportedDeclarationSpaces := DeclarationSpacesNone defaultExportedDeclarationSpaces := DeclarationSpacesNone @@ -7630,37 +7651,46 @@ func (c *Checker) getTypeOfExpression(node *ast.Node) *Type { if quickType != nil { return quickType } - if c.memoActive() { - c.beginMemo(memoKeyOf(node, memoFlowExpressionType)) - result, cached := c.getTypeOfExpressionCached(node) - if cached { + if len(c.flowLoopStack) == 0 { + // Outside loop analysis, the type is independent of the flow state in + // progress, so it is cached in the store. + if t, ok := c.flowExpressionTypes.get(c, node); ok { + return t + } + c.flowExpressionTypes.begin(c, node) + startInvocationCount := c.flowInvocationCount + t := c.checkExpressionEx(node, CheckModeTypeOnly) + // If control flow analysis was required to determine the type, it is worth caching. + if c.flowInvocationCount != startInvocationCount { + c.flowExpressionTypes.set(c, node, t) c.endMemo() } else { c.endMemoUncached() } - return result + return t } - result, _ := c.getTypeOfExpressionCached(node) - return result -} - -// getTypeOfExpressionCached returns the type of node, and whether it is cached. -func (c *Checker) getTypeOfExpressionCached(node *ast.Node) (*Type, bool) { - // If a type has been cached for the node, return it. + // Within loop analysis, the type may depend on the transient types of the + // loop, so it is only cached until the analysis of the loop is restarted. + key := memoKeyOf(node, memoFlowExpressionType) if cachedType := c.flowTypeCache[node]; cachedType != nil { - return cachedType, true + if c.memoActive() { + c.observeMemo(key) + } + return cachedType } + c.beginMemo(key) startInvocationCount := c.flowInvocationCount t := c.checkExpressionEx(node, CheckModeTypeOnly) - // If control flow analysis was required to determine the type, it is worth caching. if c.flowInvocationCount != startInvocationCount { if c.flowTypeCache == nil { c.flowTypeCache = make(map[*ast.Node]*Type) } c.flowTypeCache[node] = t - return t, true + c.endMemo() + } else { + c.endMemoUncached() } - return t, false + return t } // Returns the type of an expression. Unlike checkExpression, this function is simply concerned @@ -8362,7 +8392,7 @@ func (c *Checker) checkArrayLiteral(node *ast.Node, checkMode CheckMode) *Type { inConstContext := c.isConstContext(node) contextualType := c.getApparentTypeOfContextualType(node, ContextFlagsNone) inTupleContext := isSpreadIntoCallOrNew(node) || contextualType != nil && someType(contextualType, func(t *Type) bool { - return c.isTupleLikeType(t) || c.isGenericMappedType(t) && t.AsMappedType().nameType == nil && c.getHomomorphicTypeVariable(core.OrElse(t.AsMappedType().target, t)) != nil + return c.isTupleLikeType(t) || c.isGenericMappedType(t) && c.getNameTypeFromMappedType(t) == nil && c.getHomomorphicTypeVariable(core.OrElse(t.AsMappedType().target, t)) != nil }) hasOmittedExpression := false for i, e := range elements { @@ -10604,7 +10634,7 @@ func (c *Checker) contextuallyCheckFunctionExpressionOrObjectLiteralMethodUncach if links.flags&NodeCheckFlagsContextChecked == 0 || links.flags&NodeCheckFlagsSignatureContextChecked != 0 { return } - links.flags |= NodeCheckFlagsSignatureContextChecked + setFlagMemoBits(c, memoKeyOf(node, memoContextChecked), &links.flags, NodeCheckFlagsSignatureContextChecked, NodeCheckFlagsSignatureContextChecked) signature := c.getSignatureFromDeclarationUncontextual(node) contextualSignature := c.getContextualSignature(node) if contextualSignature != nil && c.getReturnTypeFromAnnotation(node) == nil && signature.resolvedReturnType.get(c) == nil { @@ -10637,7 +10667,7 @@ func (c *Checker) assignContextualParameterTypesOfFunctionUncached(node *ast.Nod // contextual type may recursively get back to here during overload resolution of the call. If so, we will have // already assigned contextual types. if links.flags&NodeCheckFlagsContextChecked == 0 { - links.flags |= NodeCheckFlagsContextChecked + setFlagMemoBits(c, memoKeyOf(node, memoContextualParameters), &links.flags, NodeCheckFlagsContextChecked, NodeCheckFlagsContextChecked) signature := c.getSignatureFromDeclarationUncontextual(node) if c.isContextSensitive(node) { if contextualSignature != nil { @@ -11185,7 +11215,7 @@ func (c *Checker) getInstantiationExpressionTypeCached(exprType *Type, node *ast debug.Assert(t.symbol != nil, "Instantiation expression source type must have a symbol") symbol.SetDeclarations(t.symbol.Declarations()) result := c.newObjectType(ObjectFlagsAnonymous|ObjectFlagsInstantiationExpressionType, symbol) - c.setStructuredTypeMembers(result, resolved.getMembers(), callSignatures, constructSignatures, resolved.getIndexInfos()) + c.setStructuredTypeMembers(result, resolved.getMembers(c), callSignatures, constructSignatures, resolved.getIndexInfos()) result.AsInstantiationExpressionType().node = node return result } @@ -11729,7 +11759,7 @@ func (c *Checker) parameterInitializerContainsUndefinedUncached(declaration *ast return true } if links.flags&NodeCheckFlagsInitializerIsUndefinedComputed == 0 { - links.flags |= NodeCheckFlagsInitializerIsUndefinedComputed | core.IfElse(containsUndefined, NodeCheckFlagsInitializerIsUndefined, 0) + setFlagMemoBits(c, memoKeyOf(declaration, memoInitializerIsUndefined), &links.flags, NodeCheckFlagsInitializerIsUndefinedComputed|NodeCheckFlagsInitializerIsUndefined, NodeCheckFlagsInitializerIsUndefinedComputed|core.IfElse(containsUndefined, NodeCheckFlagsInitializerIsUndefined, 0)) } } return links.flags&NodeCheckFlagsInitializerIsUndefined != 0 @@ -14413,16 +14443,15 @@ func (c *Checker) getNarrowedTypeOfSymbol(symbol *ast.Symbol, location *ast.Node } parent := declaration.Parent.Parent if ast.IsVariableDeclaration(rootDeclaration) && c.getCombinedNodeFlagsCached(rootDeclaration)&ast.NodeFlagsConstant != 0 || ast.IsParameterDeclaration(rootDeclaration) { - links := c.nodeLinks.Get(parent) - if links.flags&NodeCheckFlagsInCheckIdentifier == 0 { - links.flags |= NodeCheckFlagsInCheckIdentifier + if !c.resolvingBindingElementParents.Has(parent) { + c.resolvingBindingElementParents.Add(parent) parentType := c.getTypeForBindingElementParent(parent, CheckModeNormal) var parentTypeConstraint *Type if parentType != nil { parentTypeConstraint = c.mapType(parentType, c.getBaseConstraintOrType) } // Guard parent-type resolution only; flow analysis should allow re-entrant narrowing - links.flags &^= NodeCheckFlagsInCheckIdentifier + c.resolvingBindingElementParents.Delete(parent) if parentTypeConstraint != nil && parentTypeConstraint.flags&TypeFlagsUnion != 0 && !(ast.IsParameterDeclaration(rootDeclaration) && c.isSomeSymbolAssigned(rootDeclaration)) { pattern := declaration.Parent narrowedType := c.getFlowTypeOfReferenceEx(pattern, parentTypeConstraint, parentTypeConstraint, nil /*flowContainer*/, getFlowNodeOfNode(location)) @@ -15059,14 +15088,88 @@ func (c *Checker) cloneSymbol(symbol *ast.Symbol) *ast.Symbol { } func (c *Checker) getMergedSymbol(symbol *ast.Symbol) *ast.Symbol { - if symbol != nil { - if merged := c.mergedSymbols.TryGet(symbol); merged != nil && *merged != nil { - return *merged + if symbol == nil { + return nil + } + if merged := c.mergedSymbols.TryGet(symbol); merged != nil && *merged != nil { + symbol = *merged + } + if symbol.Flags()&(ast.SymbolFlagsClassMember|ast.SymbolFlagsSignature) != 0 { + return c.getLateMergedSymbol(symbol) + } + return symbol +} + +// getLateMergedSymbol returns the symbol a member is merged into when its +// parent's late-bound members are resolved, resolving them if they could +// merge with the member. The answer is thus the same whether or not anything +// has resolved the parent's members yet. +func (c *Checker) getLateMergedSymbol(symbol *ast.Symbol) *ast.Symbol { + if !c.mergesFrozen || symbol.Parent() == nil { + return symbol + } + parent := c.getMergedSymbol(symbol.Parent()) + late := symbol.CheckFlags()&ast.CheckFlagsLate != 0 + lateBindable := c.getLateBindableKinds(parent) + if !late && lateBindable == 0 { + return symbol + } + var kind MembersOrExportsResolutionKind + switch symbol { + case parent.Members().Get(symbol.Name()): + kind = MembersOrExportsResolutionKindResolvedMembers + case parent.Exports().Get(symbol.Name()): + kind = MembersOrExportsResolutionKindResolvedExports + default: + if !late { + return symbol + } + // Late-bound symbols are created by resolving their parent's members. + } + if !late { + if lateBindable&(1<= 3 && types[0].flags&TypeFlagsUndefined != 0 && types[1].flags&TypeFlagsNull != 0 && core.Some(types, c.IsEmptyAnonymousObjectType) { - t.objectFlags |= ObjectFlagsIsUnknownLikeUnion + return ObjectFlagsIsUnknownLikeUnion } - } - return t.objectFlags&ObjectFlagsIsUnknownLikeUnion != 0 + return 0 + }) != 0 } return false } @@ -29883,30 +30005,27 @@ func (c *Checker) getSingleBaseForNonAugmentingSubtypeUncached(t *Type) *Type { func (c *Checker) getModifiersTypeFromMappedType(t *Type) *Type { m := t.AsMappedType() - if m.modifiersType == nil { + return c.memoCompute(&m.modifiersType, func() *Type { if c.isMappedTypeWithKeyofConstraintDeclaration(t) { // If the constraint declaration is a 'keyof T' node, the modifiers type is T. We check // AST nodes here because, when T is a non-generic type, the logic below eagerly resolves // 'keyof T' to a literal union type and we can't recover T from that type. - m.modifiersType = c.instantiateType(c.getTypeFromTypeNode(c.getConstraintDeclarationForMappedType(t).Type()), m.mapper) - } else { - // Otherwise, get the declared constraint type, and if the constraint type is a type parameter, - // get the constraint of that type parameter. If the resulting type is an indexed type 'keyof T', - // the modifiers type is T. Otherwise, the modifiers type is unknown. - declaredType := memoTypeNode(c, m.declaration.AsNode(), (*Checker).getTypeFromMappedTypeNode) - constraint := c.getConstraintTypeFromMappedType(declaredType) - extendedConstraint := constraint - if constraint != nil && constraint.flags&TypeFlagsTypeParameter != 0 { - extendedConstraint = c.getConstraintOfTypeParameter(getNonDistributedTypeParameter(constraint)) - } - if extendedConstraint != nil && extendedConstraint.flags&TypeFlagsIndex != 0 { - m.modifiersType = c.instantiateType(extendedConstraint.AsIndexType().target, m.mapper) - } else { - m.modifiersType = c.unknownType - } + return c.instantiateType(c.getTypeFromTypeNode(c.getConstraintDeclarationForMappedType(t).Type()), m.mapper) } - } - return m.modifiersType + // Otherwise, get the declared constraint type, and if the constraint type is a type parameter, + // get the constraint of that type parameter. If the resulting type is an indexed type 'keyof T', + // the modifiers type is T. Otherwise, the modifiers type is unknown. + declaredType := memoTypeNode(c, m.declaration.AsNode(), (*Checker).getTypeFromMappedTypeNode) + constraint := c.getConstraintTypeFromMappedType(declaredType) + extendedConstraint := constraint + if constraint != nil && constraint.flags&TypeFlagsTypeParameter != 0 { + extendedConstraint = c.getConstraintOfTypeParameter(getNonDistributedTypeParameter(constraint)) + } + if extendedConstraint != nil && extendedConstraint.flags&TypeFlagsIndex != 0 { + return c.instantiateType(extendedConstraint.AsIndexType().target, m.mapper) + } + return c.unknownType + }) } func (c *Checker) extractTypesOfKind(t *Type, kind TypeFlags) *Type { @@ -31971,15 +32090,16 @@ func (c *Checker) getDecoratorCallSignature(decorator *ast.Node) *Signature { func (c *Checker) getLegacyDecoratorCallSignature(decorator *ast.Node) *Signature { node := decorator.Parent links := c.signatureLinks.Get(node) - if links.decoratorSignature == nil { - links.decoratorSignature = c.anySignature + if links.decoratorSignature.get(c) == nil { + links.decoratorSignature.begin(c) + links.decoratorSignature.set(c, c.anySignature) switch node.Kind { case ast.KindClassDeclaration, ast.KindClassExpression: // For a class decorator, the `target` is the type of the class (e.g. the // "static" or "constructor" side of the class). targetType := c.getTypeOfSymbol(c.getSymbolOfDeclaration(node)) targetParam := c.newParameter("target", targetType) - links.decoratorSignature = c.newCallSignature(nil, nil, []*ast.Symbol{targetParam}, c.getUnionType([]*Type{targetType, c.voidType})) + links.decoratorSignature.set(c, c.newCallSignature(nil, nil, []*ast.Symbol{targetParam}, c.getUnionType([]*Type{targetType, c.voidType}))) case ast.KindParameter: if !ast.IsConstructorDeclaration(node.Parent) && !(ast.IsMethodDeclaration(node.Parent) || ast.IsSetAccessorDeclaration(node.Parent) && ast.IsClassLike(node.Parent.Parent)) { break @@ -32004,7 +32124,7 @@ func (c *Checker) getLegacyDecoratorCallSignature(decorator *ast.Node) *Signatur targetParam := c.newParameter("target", targetType) keyParam := c.newParameter("propertyKey", keyType) indexParam := c.newParameter("parameterIndex", indexType) - links.decoratorSignature = c.newCallSignature(nil, nil, []*ast.Symbol{targetParam, keyParam, indexParam}, c.voidType) + links.decoratorSignature.set(c, c.newCallSignature(nil, nil, []*ast.Symbol{targetParam, keyParam, indexParam}, c.voidType)) case ast.KindMethodDeclaration, ast.KindGetAccessor, ast.KindSetAccessor, ast.KindPropertyDeclaration: if !ast.IsClassLike(node.Parent) { break @@ -32023,16 +32143,17 @@ func (c *Checker) getLegacyDecoratorCallSignature(decorator *ast.Node) *Signatur if hasPropDesc { descriptorType := c.newTypedPropertyDescriptorType(c.getTypeOfNode(node)) descriptorParam := c.newParameter("descriptor", descriptorType) - links.decoratorSignature = c.newCallSignature(nil, nil, []*ast.Symbol{targetParam, keyParam, descriptorParam}, c.getUnionType([]*Type{returnType, c.voidType})) + links.decoratorSignature.set(c, c.newCallSignature(nil, nil, []*ast.Symbol{targetParam, keyParam, descriptorParam}, c.getUnionType([]*Type{returnType, c.voidType}))) } else { - links.decoratorSignature = c.newCallSignature(nil, nil, []*ast.Symbol{targetParam, keyParam}, c.getUnionType([]*Type{returnType, c.voidType})) + links.decoratorSignature.set(c, c.newCallSignature(nil, nil, []*ast.Symbol{targetParam, keyParam}, c.getUnionType([]*Type{returnType, c.voidType}))) } } + c.endMemo() } - if links.decoratorSignature == c.anySignature { + if links.decoratorSignature.get(c) == c.anySignature { return nil } - return links.decoratorSignature + return links.decoratorSignature.get(c) } func (c *Checker) getESDecoratorCallSignature(decorator *ast.Node) *Signature { @@ -32118,15 +32239,16 @@ func (c *Checker) getESDecoratorCallSignature(decorator *ast.Node) *Signature { // `undefined` then the "output type" is the "input type"). node := decorator.Parent links := c.signatureLinks.Get(node) - if links.decoratorSignature == nil { - links.decoratorSignature = c.anySignature + if links.decoratorSignature.get(c) == nil { + links.decoratorSignature.begin(c) + links.decoratorSignature.set(c, c.anySignature) switch node.Kind { case ast.KindClassDeclaration, ast.KindClassExpression: // Class decorators have a `context` of `ClassDecoratorContext`, where the `Class` type // argument will be the "final type" of the class after all decorators are applied. targetType := c.getTypeOfSymbol(c.getSymbolOfDeclaration(node)) contextType := c.newClassDecoratorContextType(targetType) - links.decoratorSignature = c.newESDecoratorCallSignature(targetType, contextType, targetType) + links.decoratorSignature.set(c, c.newESDecoratorCallSignature(targetType, contextType, targetType)) case ast.KindMethodDeclaration, ast.KindGetAccessor, ast.KindSetAccessor: if !ast.IsClassLike(node.Parent) { break @@ -32167,7 +32289,7 @@ func (c *Checker) getESDecoratorCallSignature(decorator *ast.Node) *Signature { targetType = valueType } contextType := c.newClassMemberDecoratorContextTypeForNode(node, thisType, valueType) - links.decoratorSignature = c.newESDecoratorCallSignature(targetType, contextType, targetType) + links.decoratorSignature.set(c, c.newESDecoratorCallSignature(targetType, contextType, targetType)) case ast.KindPropertyDeclaration: if !ast.IsClassLike(node.Parent) { break @@ -32204,13 +32326,14 @@ func (c *Checker) getESDecoratorCallSignature(decorator *ast.Node) *Signature { returnType = c.newClassFieldDecoratorInitializerMutatorType(thisType, valueType) } contextType := c.newClassMemberDecoratorContextTypeForNode(node, thisType, valueType) - links.decoratorSignature = c.newESDecoratorCallSignature(targetType, contextType, returnType) + links.decoratorSignature.set(c, c.newESDecoratorCallSignature(targetType, contextType, returnType)) } + c.endMemo() } - if links.decoratorSignature == c.anySignature { + if links.decoratorSignature.get(c) == c.anySignature { return nil } - return links.decoratorSignature + return links.decoratorSignature.get(c) } func (c *Checker) newClassDecoratorContextType(classType *Type) *Type { @@ -32420,7 +32543,7 @@ func (c *Checker) getIndexedMappedTypeSubstitutedTypeOfContextualType(t *Type, n } constraint := c.getConstraintTypeFromMappedType(t) // special case for conditional types pretending to be negated types - if t.AsMappedType().nameType != nil && c.isExcludedMappedPropertyName(t.AsMappedType().nameType, propertyNameType) || c.isExcludedMappedPropertyName(constraint, propertyNameType) { + if mappedNameType := c.getNameTypeFromMappedType(t); mappedNameType != nil && c.isExcludedMappedPropertyName(mappedNameType, propertyNameType) || c.isExcludedMappedPropertyName(constraint, propertyNameType) { return nil } constraintOfConstraint := c.getBaseConstraintOrType(constraint) @@ -32955,7 +33078,7 @@ func (c *Checker) isFunctionObjectType(t *Type) bool { // We do a quick check for a "bind" property before performing the more expensive subtype // check. This gives us a quicker out in the common case where an object type is not a function. resolved := c.resolveStructuredTypeMembers(t) - return len(resolved.getSignatures()) != 0 || resolved.getMember("bind") != nil && c.isTypeSubtypeOf(t, c.globalFunctionType) + return len(resolved.getSignatures()) != 0 || resolved.getMember(c, "bind") != nil && c.isTypeSubtypeOf(t, c.globalFunctionType) } func (c *Checker) getTypeWithFacts(t *Type, include TypeFacts) *Type { @@ -33453,7 +33576,7 @@ func (c *Checker) getSymbolAtLocation(node *ast.Node, ignoreErrors bool) *ast.Sy // member should more exactly be the kind of (declarationless) symbol we want. // (See #44364 and #45031 for relevant implementation PRs) if metaProp.KeywordToken == ast.KindImportKeyword && node.Text() == "meta" { - return c.getGlobalImportMetaExpressionType().AsObjectType().getMember("meta") + return c.getGlobalImportMetaExpressionType().AsObjectType().getMember(c, "meta") } // no other meta properties are valid syntax, thus no others should have symbols return nil diff --git a/tsc/internal/checker/checker_test.go b/tsc/internal/checker/checker_test.go index fcc3acee0c09a..999194133b1fe 100644 --- a/tsc/internal/checker/checker_test.go +++ b/tsc/internal/checker/checker_test.go @@ -6,6 +6,7 @@ import ( "go/parser" "go/token" "path/filepath" + "slices" "strings" "testing" @@ -233,3 +234,415 @@ func TestMemoValueOnlyAccessedThroughMethods(t *testing.T) { }) } } + +// Mutable cached state must live in memos, which account for the effects of +// computing it. Fields that are not memos must be listed in +// unmemoizedCacheFields with the reason they need not be. +func TestCachedStateIsMemoized(t *testing.T) { + t.Parallel() + fset := token.NewFileSet() + files, err := filepath.Glob("*.go") + assert.NilError(t, err) + seen := make(map[string]bool) + for _, name := range files { + if strings.HasSuffix(name, "_test.go") { + continue + } + file, err := parser.ParseFile(fset, name, nil, parser.SkipObjectResolution) + assert.NilError(t, err) + goast.Inspect(file, func(n goast.Node) bool { + spec, ok := n.(*goast.TypeSpec) + if !ok { + return true + } + st, ok := spec.Type.(*goast.StructType) + if !ok || slices.Contains(notCacheOwners, spec.Name.Name) || name != "types.go" && !strings.HasSuffix(spec.Name.Name, "Links") && spec.Name.Name != "memoStore" { + return true + } + for _, field := range st.Fields.List { + if isMemoType(field.Type) { + continue + } + for _, fieldName := range field.Names { + key := spec.Name.Name + "." + fieldName.Name + seen[key] = true + if _, ok := unmemoizedCacheFields[key]; !ok { + t.Errorf("%s: %s is not a memo; make it one or list it in unmemoizedCacheFields", fset.Position(fieldName.Pos()), key) + } + } + } + return false + }) + } + for key := range unmemoizedCacheFields { + if !seen[key] { + t.Errorf("unmemoizedCacheFields lists %s, which is not an unmemoized field", key) + } + } +} + +func isMemoType(expr goast.Expr) bool { + switch e := expr.(type) { + case *goast.IndexExpr: + expr = e.X + case *goast.IndexListExpr: + expr = e.X + } + ident, ok := expr.(*goast.Ident) + return ok && strings.HasPrefix(ident.Name, "memo") +} + +const ( + unmemoizedImmutable = "Set when the store is created" + unmemoizedContainer = "Holds links, whose fields are checked separately" + unmemoizedCounter = "Allocation counter for IDs and statistics" + unmemoizedInterned = "Interned type whose creation has no effects" + unmemoizedProgram = "Derived from the program only; computing it has no effects" + unmemoizedMemoState = "State of the memos themselves" + unmemoizedChecking = "Written only by checks" + unmemoizedCreated = "Set when the entity owning the links is created" + unmemoizedSyntax = "Derived from syntax and options only; computing it has no effects" + unmemoizedGuarded = "Written only within the memoized computation it is part of" + unmemoizedEmit = "Emit resolver state, written only while resolving for emit" + unmemoizedMark = "Written only by checks and emit marking, and read only by emit" + unmemoizedNodeBuilder = "Node builder state, scoped to one node builder" + unmemoizedNodeFlags = "Each flag is memo-guarded, reporting-only, or set whenever a node is checked and read only by deferred diagnostics, after the whole file is checked" + unmemoizedFlagMemo = "Flag memo, accounted for like a memo under a key naming its entity and field" + unmemoizedEntityFlags = "Each flag is set when the entity is created, or is part of a flag memo" + unmemoizedDerived = "Derived only from fields set when the entity is created; computing it has no effects" +) + +// notCacheOwners are the structs declared in types.go that are plain values +// rather than entities owning cached state. +var notCacheOwners = []string{"LanguageFeatureMinimumTargetMap", "accessibleChainCacheKey", "computedName", "TupleElementInfo", "MemberInfo"} + +var unmemoizedCacheFields = map[string]string{ + "valueSymbolExtra.nameType": unmemoizedCreated, + "valueSymbolExtra.containingType": unmemoizedCreated, + "TypeAlias.symbol": unmemoizedCreated, + "TypeAlias.typeArguments": unmemoizedCreated, + "Type.flags": unmemoizedCreated, + "Type.objectFlags": unmemoizedEntityFlags, + "Type.id": unmemoizedCounter, + "Type.kind": unmemoizedCreated, + "Type.generation": unmemoizedCounter, + "Type.symbol": unmemoizedCreated, + "Type.alias": unmemoizedCreated, + "Type.checker": unmemoizedImmutable, + "IntrinsicType.intrinsicName": unmemoizedCreated, + "LiteralType.value": unmemoizedCreated, + "LiteralType.freshType": unmemoizedInterned, + "LiteralType.regularType": unmemoizedCreated, + "UniqueESSymbolType.name": unmemoizedCreated, + "StructuredType.members": unmemoizedFlagMemo, + "StructuredType.properties": unmemoizedFlagMemo, + "StructuredType.extra": unmemoizedFlagMemo, + "structuredTypeExtra.signatures": unmemoizedFlagMemo, + "structuredTypeExtra.callSignatureCount": unmemoizedFlagMemo, + "structuredTypeExtra.indexInfos": unmemoizedFlagMemo, + "structuredTypeExtra.objectTypeWithoutAbstractConstructSignatures": unmemoizedInterned, + "ObjectType.target": unmemoizedCreated, + "ObjectType.mapper": unmemoizedCreated, + "TypeReference.node": unmemoizedCreated, + "TypeReference.lazy": unmemoizedFlagMemo, + "LazyState.layout": unmemoizedCreated, + "LazyState.mapper": unmemoizedCreated, + "LazyState.baseTypes": unmemoizedCreated, + "LazyState.propertiesResolved": unmemoizedFlagMemo, + "MemberLayout.id": unmemoizedCounter, + "MemberLayout.memberInfoMap": unmemoizedCreated, + "MemberLayout.memberInfos": unmemoizedCreated, + "MemberLayout.layoutProperties": unmemoizedDerived, + "InterfaceType.allTypeParameters": unmemoizedCreated, + "InterfaceType.outerTypeParameterCount": unmemoizedCreated, + "InterfaceType.thisType": unmemoizedCreated, + "InterfaceType.baseTypesResolved": unmemoizedFlagMemo, + "InterfaceType.declaredMembersResolved": unmemoizedFlagMemo, + "InterfaceType.declaredMembers": unmemoizedFlagMemo, + "InterfaceType.declaredCallSignatures": unmemoizedFlagMemo, + "InterfaceType.declaredConstructSignatures": unmemoizedFlagMemo, + "InterfaceType.declaredIndexInfos": unmemoizedFlagMemo, + "TupleType.elementInfos": unmemoizedCreated, + "TupleType.minLength": unmemoizedCreated, + "TupleType.fixedLength": unmemoizedCreated, + "TupleType.combinedFlags": unmemoizedCreated, + "TupleType.readonly": unmemoizedCreated, + "InstantiationExpressionType.node": unmemoizedCreated, + "MappedType.declaration": unmemoizedCreated, + "ReverseMappedType.source": unmemoizedCreated, + "ReverseMappedType.mappedType": unmemoizedCreated, + "ReverseMappedType.constraintType": unmemoizedCreated, + "EvolvingArrayType.elementType": unmemoizedCreated, + "UnionOrIntersectionType.types": unmemoizedCreated, + "UnionType.regularType": unmemoizedInterned, + "UnionType.origin": unmemoizedCreated, + "UnionType.constituentMap": unmemoizedGuarded, + "TypeParameter.target": unmemoizedCreated, + "TypeParameter.mapper": unmemoizedCreated, + "TypeParameter.isThisType": unmemoizedCreated, + "TypeParameter.isDistributed": unmemoizedCreated, + "TypeParameter.distributedType": unmemoizedInterned, + "TypeParameter.origin": unmemoizedCreated, + "IndexType.target": unmemoizedCreated, + "IndexType.indexFlags": unmemoizedCreated, + "IndexedAccessType.objectType": unmemoizedCreated, + "IndexedAccessType.indexType": unmemoizedCreated, + "IndexedAccessType.accessFlags": unmemoizedCreated, + "TemplateLiteralType.texts": unmemoizedCreated, + "TemplateLiteralType.types": unmemoizedCreated, + "StringMappingType.target": unmemoizedCreated, + "SubstitutionType.baseType": unmemoizedCreated, + "SubstitutionType.constraint": unmemoizedCreated, + "ConditionalRoot.node": unmemoizedCreated, + "ConditionalRoot.checkType": unmemoizedCreated, + "ConditionalRoot.extendsType": unmemoizedCreated, + "ConditionalRoot.isDistributive": unmemoizedCreated, + "ConditionalRoot.inferTypeParameters": unmemoizedCreated, + "ConditionalRoot.outerTypeParameters": unmemoizedCreated, + "ConditionalRoot.alias": unmemoizedCreated, + "ConditionalType.root": unmemoizedCreated, + "ConditionalType.checkType": unmemoizedCreated, + "ConditionalType.extendsType": unmemoizedCreated, + "ConditionalType.mapper": unmemoizedCreated, + "ConditionalType.combinedMapper": unmemoizedCreated, + "Signature.id": unmemoizedCreated, + "Signature.flags": unmemoizedEntityFlags, + "Signature.minArgumentCount": unmemoizedCreated, + "Signature.declaration": unmemoizedCreated, + "Signature.parameters": unmemoizedCreated, + "Signature.target": unmemoizedCreated, + "Signature.mapper": unmemoizedCreated, + "Signature.extra": unmemoizedCreated, + "signatureExtra.typeParameters": unmemoizedCreated, + "signatureExtra.thisParameter": unmemoizedCreated, + "signatureExtra.resolvedTypePredicate": unmemoizedFlagMemo, + "signatureExtra.isolatedSignatureType": unmemoizedInterned, + "signatureExtra.composite": unmemoizedCreated, + "CompositeSignature.isUnion": unmemoizedCreated, + "CompositeSignature.signatures": unmemoizedCreated, + "TypePredicate.kind": unmemoizedCreated, + "TypePredicate.parameterIndex": unmemoizedCreated, + "TypePredicate.parameterName": unmemoizedCreated, + "TypePredicate.t": unmemoizedCreated, + "IndexInfo.keyType": unmemoizedCreated, + "IndexInfo.valueType": unmemoizedCreated, + "IndexInfo.isReadonly": unmemoizedCreated, + "IndexInfo.declaration": unmemoizedCreated, + "IndexInfo.indexSymbol": unmemoizedInterned, + "IndexInfo.components": unmemoizedCreated, + "memoStore.root": unmemoizedImmutable, + "memoStore.id": unmemoizedImmutable, + "memoStore.program": unmemoizedImmutable, + "memoStore.compilerOptions": unmemoizedImmutable, + "memoStore.files": unmemoizedImmutable, + "memoStore.fileIndexMap": unmemoizedImmutable, + "memoStore.languageVersion": unmemoizedImmutable, + "memoStore.moduleKind": unmemoizedImmutable, + "memoStore.moduleResolutionKind": unmemoizedImmutable, + "memoStore.legacyDecorators": unmemoizedImmutable, + "memoStore.emitStandardClassFields": unmemoizedImmutable, + "memoStore.strictNullChecks": unmemoizedImmutable, + "memoStore.strictFunctionTypes": unmemoizedImmutable, + "memoStore.strictBindCallApply": unmemoizedImmutable, + "memoStore.strictPropertyInitialization": unmemoizedImmutable, + "memoStore.strictBuiltinIteratorReturn": unmemoizedImmutable, + "memoStore.noImplicitAny": unmemoizedImmutable, + "memoStore.noImplicitThis": unmemoizedImmutable, + "memoStore.useUnknownInCatchVariables": unmemoizedImmutable, + "memoStore.exactOptionalPropertyTypes": unmemoizedImmutable, + "memoStore.canCollectSymbolAliasAccessibilityData": unmemoizedImmutable, + "memoStore.arrayVariances": unmemoizedImmutable, + "memoStore.globals": unmemoizedImmutable, + "memoStore.undefinedSymbol": unmemoizedImmutable, + "memoStore.argumentsSymbol": unmemoizedImmutable, + "memoStore.requireSymbol": unmemoizedImmutable, + "memoStore.unknownSymbol": unmemoizedImmutable, + "memoStore.globalThisSymbol": unmemoizedImmutable, + "memoStore.mergedSymbols": unmemoizedImmutable, + "memoStore.mergesFrozen": unmemoizedImmutable, + "memoStore.anyType": unmemoizedImmutable, + "memoStore.autoType": unmemoizedImmutable, + "memoStore.wildcardType": unmemoizedImmutable, + "memoStore.blockedStringType": unmemoizedImmutable, + "memoStore.errorType": unmemoizedImmutable, + "memoStore.unresolvedType": unmemoizedImmutable, + "memoStore.nonInferrableAnyType": unmemoizedImmutable, + "memoStore.intrinsicMarkerType": unmemoizedImmutable, + "memoStore.unknownType": unmemoizedImmutable, + "memoStore.undefinedType": unmemoizedImmutable, + "memoStore.undefinedWideningType": unmemoizedImmutable, + "memoStore.missingType": unmemoizedImmutable, + "memoStore.undefinedOrMissingType": unmemoizedImmutable, + "memoStore.optionalType": unmemoizedImmutable, + "memoStore.nullType": unmemoizedImmutable, + "memoStore.nullWideningType": unmemoizedImmutable, + "memoStore.stringType": unmemoizedImmutable, + "memoStore.numberType": unmemoizedImmutable, + "memoStore.bigintType": unmemoizedImmutable, + "memoStore.regularFalseType": unmemoizedImmutable, + "memoStore.falseType": unmemoizedImmutable, + "memoStore.regularTrueType": unmemoizedImmutable, + "memoStore.trueType": unmemoizedImmutable, + "memoStore.booleanType": unmemoizedImmutable, + "memoStore.esSymbolType": unmemoizedImmutable, + "memoStore.voidType": unmemoizedImmutable, + "memoStore.neverType": unmemoizedImmutable, + "memoStore.silentNeverType": unmemoizedImmutable, + "memoStore.implicitNeverType": unmemoizedImmutable, + "memoStore.unreachableNeverType": unmemoizedImmutable, + "memoStore.nonPrimitiveType": unmemoizedImmutable, + "memoStore.stringOrNumberType": unmemoizedImmutable, + "memoStore.stringNumberSymbolType": unmemoizedImmutable, + "memoStore.numberOrBigIntType": unmemoizedImmutable, + "memoStore.templateConstraintType": unmemoizedImmutable, + "memoStore.numericStringType": unmemoizedImmutable, + "memoStore.uniqueLiteralType": unmemoizedImmutable, + "memoStore.emptyObjectType": unmemoizedImmutable, + "memoStore.emptyJsxObjectType": unmemoizedImmutable, + "memoStore.emptyFreshJsxObjectType": unmemoizedImmutable, + "memoStore.emptyTypeLiteralType": unmemoizedImmutable, + "memoStore.unknownEmptyObjectType": unmemoizedImmutable, + "memoStore.unknownUnionType": unmemoizedImmutable, + "memoStore.emptyGenericType": unmemoizedImmutable, + "memoStore.anyFunctionType": unmemoizedImmutable, + "memoStore.noConstraintType": unmemoizedImmutable, + "memoStore.circularConstraintType": unmemoizedImmutable, + "memoStore.resolvingDefaultType": unmemoizedImmutable, + "memoStore.markerSuperType": unmemoizedImmutable, + "memoStore.markerSubType": unmemoizedImmutable, + "memoStore.markerOtherType": unmemoizedImmutable, + "memoStore.markerSuperTypeForCheck": unmemoizedImmutable, + "memoStore.markerSubTypeForCheck": unmemoizedImmutable, + "memoStore.noTypePredicate": unmemoizedImmutable, + "memoStore.anySignature": unmemoizedImmutable, + "memoStore.unknownSignature": unmemoizedImmutable, + "memoStore.resolvingSignature": unmemoizedImmutable, + "memoStore.silentNeverSignature": unmemoizedImmutable, + "memoStore.enumNumberIndexInfo": unmemoizedImmutable, + "memoStore.anyBaseTypeIndexInfo": unmemoizedImmutable, + "memoStore.patternAmbientModules": unmemoizedImmutable, + "memoStore.patternAmbientModuleAugmentations": unmemoizedImmutable, + "memoStore.patternAmbientModuleAugmentationTargets": unmemoizedImmutable, + "memoStore.globalObjectType": unmemoizedImmutable, + "memoStore.globalFunctionType": unmemoizedImmutable, + "memoStore.globalCallableFunctionType": unmemoizedImmutable, + "memoStore.globalNewableFunctionType": unmemoizedImmutable, + "memoStore.globalArrayType": unmemoizedImmutable, + "memoStore.globalReadonlyArrayType": unmemoizedImmutable, + "memoStore.globalStringType": unmemoizedImmutable, + "memoStore.globalNumberType": unmemoizedImmutable, + "memoStore.globalBooleanType": unmemoizedImmutable, + "memoStore.globalRegExpType": unmemoizedImmutable, + "memoStore.globalThisType": unmemoizedImmutable, + "memoStore.anyArrayType": unmemoizedImmutable, + "memoStore.autoArrayType": unmemoizedImmutable, + "memoStore.anyReadonlyArrayType": unmemoizedImmutable, + "memoStore.emptyStringType": unmemoizedImmutable, + "memoStore.zeroType": unmemoizedImmutable, + "memoStore.zeroBigIntType": unmemoizedImmutable, + "memoStore.typeofType": unmemoizedImmutable, + "memoStore.subtypeRelation": unmemoizedImmutable, + "memoStore.strictSubtypeRelation": unmemoizedImmutable, + "memoStore.assignableRelation": unmemoizedImmutable, + "memoStore.comparableRelation": unmemoizedImmutable, + "memoStore.identityRelation": unmemoizedImmutable, + "memoStore.nodeLinks": unmemoizedContainer, + "memoStore.signatureLinks": unmemoizedContainer, + "memoStore.symbolNodeLinks": unmemoizedContainer, + "memoStore.typeNodeLinks": unmemoizedContainer, + "memoStore.enumMemberLinks": unmemoizedContainer, + "memoStore.arrayLiteralLinks": unmemoizedContainer, + "memoStore.switchStatementLinks": unmemoizedContainer, + "memoStore.jsxElementLinks": unmemoizedContainer, + "memoStore.computedNameLinks": unmemoizedContainer, + "memoStore.symbolReferenceLinks": unmemoizedContainer, + "memoStore.valueSymbolLinks": unmemoizedContainer, + "memoStore.mappedSymbolLinks": unmemoizedContainer, + "memoStore.deferredSymbolLinks": unmemoizedContainer, + "memoStore.aliasSymbolLinks": unmemoizedContainer, + "memoStore.moduleSymbolLinks": unmemoizedContainer, + "memoStore.lateBoundLinks": unmemoizedContainer, + "memoStore.exportTypeLinks": unmemoizedContainer, + "memoStore.membersAndExportsLinks": unmemoizedContainer, + "memoStore.typeAliasLinks": unmemoizedContainer, + "memoStore.declaredTypeLinks": unmemoizedContainer, + "memoStore.spreadLinks": unmemoizedContainer, + "memoStore.varianceLinks": unmemoizedContainer, + "memoStore.ReverseMappedSymbolLinks": unmemoizedContainer, + "memoStore.markedAssignmentSymbolLinks": unmemoizedContainer, + "memoStore.sourceFileLinks": unmemoizedContainer, + "memoStore.emitResolverLinks": unmemoizedContainer, + "EmitResolverLinks.jsxLinks": unmemoizedContainer, + "EmitResolverLinks.declarationLinks": unmemoizedContainer, + "EmitResolverLinks.declarationFileLinks": unmemoizedContainer, + "memoStore.TypeCount": unmemoizedCounter, + "memoStore.memberLayoutCount": unmemoizedCounter, + "memoStore.SymbolCount": unmemoizedCounter, + "memoStore.SignatureCount": unmemoizedCounter, + "memoStore.TotalInstantiationCount": unmemoizedCounter, + "memoStore.nanType": unmemoizedInterned, + "memoStore.packagesMap": unmemoizedProgram, + "memoStore.ambientModulesOnce": unmemoizedProgram, + "memoStore.ambientModules": unmemoizedProgram, + "memoStore.memoStates": unmemoizedMemoState, + "memoStore.memoPendingCount": unmemoizedMemoState, + "memoStore.mu": unmemoizedMemoState, + "memoStore.diagnostics": unmemoizedChecking, + "memoStore.suggestionDiagnostics": unmemoizedChecking, + "memoStore.nonExistentProperties": unmemoizedChecking, + "memoStore.deferredDiagnosticCallbacks": unmemoizedChecking, + "SymbolReferenceLinks.referenceKinds": unmemoizedChecking, + "AliasSymbolLinks.referenced": unmemoizedMark, + "AliasSymbolLinks.referenceChecked": unmemoizedChecking, + "SourceFileLinks.typeChecked": unmemoizedChecking, + "SourceFileLinks.unusedChecked": unmemoizedChecking, + "SourceFileLinks.deferredNodes": unmemoizedChecking, + "SourceFileLinks.identifierCheckNodes": unmemoizedChecking, + "ValueSymbolLinks.target": unmemoizedCreated, + "ValueSymbolLinks.mapper": unmemoizedCreated, + "ValueSymbolLinks.extra": unmemoizedCreated, + "MappedSymbolLinks.keyType": unmemoizedCreated, + "MappedSymbolLinks.syntheticOrigin": unmemoizedCreated, + "DeferredSymbolLinks.parent": unmemoizedCreated, + "DeferredSymbolLinks.constituents": unmemoizedCreated, + "DeferredSymbolLinks.writeConstituents": unmemoizedCreated, + "ReverseMappedSymbolLinks.propertyType": unmemoizedCreated, + "ReverseMappedSymbolLinks.mappedType": unmemoizedCreated, + "ReverseMappedSymbolLinks.constraintType": unmemoizedCreated, + "ExportTypeLinks.target": unmemoizedCreated, + "ExportTypeLinks.originatingImport": unmemoizedCreated, + "SpreadLinks.leftSpread": unmemoizedCreated, + "SpreadLinks.rightSpread": unmemoizedCreated, + "JsxElementLinks.firstJSXTagInFile": unmemoizedSyntax, + "memoStore._jsxNamespace": unmemoizedSyntax, + "memoStore._jsxFactoryEntity": unmemoizedSyntax, + "SwitchStatementLinks.witnessesComputed": unmemoizedSyntax, + "SwitchStatementLinks.witnesses": unmemoizedSyntax, + "ArrayLiteralLinks.indicesComputed": unmemoizedSyntax, + "ArrayLiteralLinks.firstSpreadIndex": unmemoizedSyntax, + "ArrayLiteralLinks.lastSpreadIndex": unmemoizedSyntax, + "NodeLinks.declarationRequiresScopeChange": unmemoizedSyntax, + "SourceFileLinks.localJsxNamespace": unmemoizedSyntax, + "SourceFileLinks.localJsxFragmentNamespace": unmemoizedSyntax, + "SourceFileLinks.localJsxFactory": unmemoizedSyntax, + "SourceFileLinks.localJsxFragmentFactory": unmemoizedSyntax, + "JsxElementLinks.jsxFlags": unmemoizedGuarded, + "JsxElementLinks.jsxImplicitImportContainer": unmemoizedGuarded, + "ModuleSymbolLinks.resolvedExports": unmemoizedGuarded, + "ModuleSymbolLinks.typeOnlyExportStarMap": unmemoizedGuarded, + "LateBoundLinks.lateSymbol": unmemoizedGuarded, + "TypeAliasLinks.typeParameters": unmemoizedGuarded, + "MarkedAssignmentSymbolLinks.lastAssignmentPos": unmemoizedGuarded, + "MarkedAssignmentSymbolLinks.hasDefiniteAssignment": unmemoizedGuarded, + "EnumMemberLinks.value": unmemoizedGuarded, + "JSXLinks.importRef": unmemoizedEmit, + "DeclarationLinks.isVisible": unmemoizedEmit, + "DeclarationFileLinks.aliasesMarked": unmemoizedEmit, + "NodeBuilderLinks.serializedTypes": unmemoizedNodeBuilder, + "NodeBuilderLinks.fakeScopeForSignatureDeclaration": unmemoizedNodeBuilder, + "NodeBuilderSymbolLinks.specifierCache": unmemoizedNodeBuilder, + "SourceFileLinks.externalHelpersModule": unmemoizedChecking, + "SourceFileLinks.requestedExternalEmitHelpers": unmemoizedChecking, + "AliasSymbolLinks.typeOnlyDeclaration": unmemoizedGuarded, + "NodeLinks.flags": unmemoizedNodeFlags, +} diff --git a/tsc/internal/checker/flow.go b/tsc/internal/checker/flow.go index 4fff394da0e98..d445543d4ceb5 100644 --- a/tsc/internal/checker/flow.go +++ b/tsc/internal/checker/flow.go @@ -1601,10 +1601,7 @@ func (c *Checker) finalizeEvolvingArrayType(t *Type) *Type { } func (c *Checker) getFinalArrayType(t *EvolvingArrayType) *Type { - if t.finalArrayType == nil { - t.finalArrayType = c.createFinalArrayType(t.elementType) - } - return t.finalArrayType + return c.memoCompute(&t.finalArrayType, func() *Type { return c.createFinalArrayType(t.elementType) }) } func (c *Checker) createFinalArrayType(elementType *Type) *Type { @@ -1974,18 +1971,21 @@ func isCoercibleUnderDoubleEquals(source *Type, target *Type) bool { func (c *Checker) isExhaustiveSwitchStatement(node *ast.Node) bool { links := c.switchStatementLinks.Get(node) - if links.exhaustiveState == ExhaustiveStateUnknown { + switch links.exhaustiveState.get(c) { + case ExhaustiveStateUnknown: + links.exhaustiveState.begin(c) // Indicate resolution is in process - links.exhaustiveState = ExhaustiveStateComputing + links.exhaustiveState.set(c, ExhaustiveStateComputing) isExhaustive := c.computeExhaustiveSwitchStatement(node) - if links.exhaustiveState == ExhaustiveStateComputing { - links.exhaustiveState = core.IfElse(isExhaustive, ExhaustiveStateTrue, ExhaustiveStateFalse) + if links.exhaustiveState.get(c) == ExhaustiveStateComputing { + links.exhaustiveState.set(c, core.IfElse(isExhaustive, ExhaustiveStateTrue, ExhaustiveStateFalse)) } - } else if links.exhaustiveState == ExhaustiveStateComputing { + c.endMemo() + case ExhaustiveStateComputing: // Resolve circularity to false - links.exhaustiveState = ExhaustiveStateFalse + links.exhaustiveState.set(c, ExhaustiveStateFalse) } - return links.exhaustiveState == ExhaustiveStateTrue + return links.exhaustiveState.get(c) == ExhaustiveStateTrue } func (c *Checker) computeExhaustiveSwitchStatement(node *ast.Node) bool { @@ -2067,16 +2067,17 @@ func (c *Checker) getNotEqualFactsFromTypeofSwitch(start int, end int, witnesses func (c *Checker) getSwitchClauseTypes(node *ast.Node) []*Type { links := c.switchStatementLinks.Get(node) - if !links.switchTypesComputed { + if links.switchTypes.get(c) == nil { + links.switchTypes.begin(c) clauses := node.AsSwitchStatement().CaseBlock.AsCaseBlock().Clauses.Nodes types := make([]*Type, len(clauses)) for i, clause := range clauses { types[i] = c.getTypeOfSwitchClause(clause) } - links.switchTypes = types - links.switchTypesComputed = true + links.switchTypes.set(c, types) + c.endMemo() } - return links.switchTypes + return links.switchTypes.get(c) } func (c *Checker) getTypeOfSwitchClause(clause *ast.Node) *Type { @@ -2088,8 +2089,9 @@ func (c *Checker) getTypeOfSwitchClause(clause *ast.Node) *Type { func (c *Checker) getEffectsSignature(node *ast.Node) *Signature { links := c.signatureLinks.Get(node) - signature := links.effectsSignature + signature := links.effectsSignature.get(c) if signature == nil { + links.effectsSignature.begin(c) // A call expression parented by an expression statement is a potential assertion. Other call // expressions are potential type predicate function calls. In order to avoid triggering // circularities in control flow analysis, we use getTypeOfDottedName when resolving the call @@ -2121,7 +2123,8 @@ func (c *Checker) getEffectsSignature(node *ast.Node) *Signature { if !(signature != nil && c.hasTypePredicateOrNeverReturnType(signature)) { signature = c.unknownSignature } - links.effectsSignature = signature + links.effectsSignature.set(c, signature) + c.endMemo() } if signature == c.unknownSignature { return nil @@ -2724,18 +2727,16 @@ func (c *Checker) ensureAssignmentsMarked(symbol *ast.Symbol) { if parent == nil { return } - links := c.nodeLinks.Get(parent) - if links.flags&NodeCheckFlagsAssignmentsMarked == 0 { - links.flags |= NodeCheckFlagsAssignmentsMarked + c.assignmentsMarked.once(c, parent, func() { if !c.hasParentWithAssignmentsMarked(parent) { c.markNodeAssignments(parent) } - } + }) } func (c *Checker) hasParentWithAssignmentsMarked(node *ast.Node) bool { return ast.FindAncestor(node.Parent, func(node *ast.Node) bool { - return ast.IsFunctionOrSourceFile(node) && c.nodeLinks.Get(node).flags&NodeCheckFlagsAssignmentsMarked != 0 + return ast.IsFunctionOrSourceFile(node) && c.assignmentsMarked.has(c, node) }) != nil } diff --git a/tsc/internal/checker/grammarchecks.go b/tsc/internal/checker/grammarchecks.go index 93bed4b355296..5465144583732 100644 --- a/tsc/internal/checker/grammarchecks.go +++ b/tsc/internal/checker/grammarchecks.go @@ -2026,13 +2026,20 @@ func (c *Checker) checkGrammarSourceFile(node *ast.SourceFile) bool { return node.Flags&ast.NodeFlagsAmbient != 0 && c.checkGrammarTopLevelElementsForRequiredDeclareModifier(node) } +func (c *Checker) reportStatementInAmbientContext(links *NodeLinks, node *ast.Node, message *diagnostics.Message) bool { + links.hasReportedStatementInAmbientContext.begin(c) + reported := c.grammarErrorOnFirstToken(node, message) + links.hasReportedStatementInAmbientContext.set(c, reported) + c.endMemo() + return reported +} + func (c *Checker) checkGrammarStatementInAmbientContext(node *ast.Node) bool { if node.Flags&ast.NodeFlagsAmbient != 0 { // Find containing block which is either Block, ModuleBlock, SourceFile links := c.nodeLinks.Get(node) - if !links.hasReportedStatementInAmbientContext && (ast.IsFunctionLike(node.Parent) || ast.IsAccessor(node.Parent)) { - links.hasReportedStatementInAmbientContext = c.grammarErrorOnFirstToken(node, diagnostics.An_implementation_cannot_be_declared_in_ambient_contexts) - return links.hasReportedStatementInAmbientContext + if !links.hasReportedStatementInAmbientContext.get(c) && (ast.IsFunctionLike(node.Parent) || ast.IsAccessor(node.Parent)) { + return c.reportStatementInAmbientContext(links, node, diagnostics.An_implementation_cannot_be_declared_in_ambient_contexts) } // We are either parented by another statement, or some sort of block. @@ -2043,9 +2050,8 @@ func (c *Checker) checkGrammarStatementInAmbientContext(node *ast.Node) bool { if node.Parent.Kind == ast.KindBlock || node.Parent.Kind == ast.KindModuleBlock || node.Parent.Kind == ast.KindSourceFile { links := c.nodeLinks.Get(node.Parent) // Check if the containing block ever report this error - if !links.hasReportedStatementInAmbientContext { - links.hasReportedStatementInAmbientContext = c.grammarErrorOnFirstToken(node, diagnostics.Statements_are_not_allowed_in_ambient_contexts) - return links.hasReportedStatementInAmbientContext + if !links.hasReportedStatementInAmbientContext.get(c) { + return c.reportStatementInAmbientContext(links, node, diagnostics.Statements_are_not_allowed_in_ambient_contexts) } } else { // We must be parented by a statement. If so, there's no need diff --git a/tsc/internal/checker/jsx.go b/tsc/internal/checker/jsx.go index e0d5892313d65..2dbcbecac7b43 100644 --- a/tsc/internal/checker/jsx.go +++ b/tsc/internal/checker/jsx.go @@ -32,11 +32,11 @@ const ( ) type JsxElementLinks struct { - jsxFlags JsxFlags // Flags for the JSX element - resolvedJsxElementAttributesType *Type // Resolved element attributes type of a JSX opening-like element - jsxNamespace *ast.Symbol // Resolved JSX namespace symbol for this node - jsxImplicitImportContainer *ast.Symbol // Resolved module symbol the implicit JSX import of this file should refer to - firstJSXTagInFile *ast.Node // The first JSX tag in the file + jsxFlags JsxFlags // Flags for the JSX element + resolvedJsxElementAttributesType memo[*Type] // Resolved element attributes type of a JSX opening-like element + jsxNamespace memo[*ast.Symbol] // Resolved JSX namespace symbol for this node + jsxImplicitImportContainer *ast.Symbol // Resolved module symbol the implicit JSX import of this file should refer to + firstJSXTagInFile *ast.Node // The first JSX tag in the file } var JsxNames = struct { @@ -502,15 +502,22 @@ func (c *Checker) getSuggestedSymbolForNonexistentJSXAttribute(name string, cont func (c *Checker) getJSXFragmentType(node *ast.Node) *Type { // An opening fragment is required in order for `getJsxNamespace` to give the fragment factory links := c.sourceFileLinks.Get(ast.GetSourceFileOfNode(node)) - if links.jsxFragmentType != nil { - return links.jsxFragmentType + if t := links.jsxFragmentType.get(c); t != nil { + return t } + links.jsxFragmentType.begin(c) + t := c.getJSXFragmentTypeUncached(node) + links.jsxFragmentType.set(c, t) + c.endMemo() + return t +} + +func (c *Checker) getJSXFragmentTypeUncached(node *ast.Node) *Type { jsxFragmentFactoryName := c.getJsxNamespace(node) // #38720/60122, allow null as jsxFragmentFactory shouldResolveFactoryReference := (c.compilerOptions.Jsx == core.JsxEmitReact || c.compilerOptions.JsxFragmentFactory != "") && jsxFragmentFactoryName != "null" if !shouldResolveFactoryReference { - links.jsxFragmentType = c.anyType - return links.jsxFragmentType + return c.anyType } jsxFactorySymbol := c.getJsxNamespaceContainerForImplicitImport(node) if jsxFactorySymbol == nil { @@ -522,12 +529,10 @@ func (c *Checker) getJSXFragmentType(node *ast.Node) *Type { jsxFactorySymbol = c.resolveName(node, jsxFragmentFactoryName, flags, diagnostics.Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found, true /*isUse*/, false /*excludeGlobals*/) } if jsxFactorySymbol == nil { - links.jsxFragmentType = c.errorType - return links.jsxFragmentType + return c.errorType } if jsxFactorySymbol.Name() == ReactNames.Fragment { - links.jsxFragmentType = c.getTypeOfSymbol(jsxFactorySymbol) - return links.jsxFragmentType + return c.getTypeOfSymbol(jsxFactorySymbol) } resolvedAlias := jsxFactorySymbol if jsxFactorySymbol.Flags()&ast.SymbolFlagsAlias != 0 { @@ -537,11 +542,9 @@ func (c *Checker) getJSXFragmentType(node *ast.Node) *Type { reactExports := c.getExportsOfSymbol(resolvedAlias) typeSymbol := c.getSymbol(reactExports, ReactNames.Fragment, ast.SymbolFlagsBlockScopedVariable) if typeSymbol != nil { - links.jsxFragmentType = c.getTypeOfSymbol(typeSymbol) - } else { - links.jsxFragmentType = c.errorType + return c.getTypeOfSymbol(typeSymbol) } - return links.jsxFragmentType + return c.errorType } func (c *Checker) resolveJsxOpeningLikeElement(node *ast.Node, candidatesOutArray *[]*Signature, checkMode CheckMode) *Signature { @@ -1190,23 +1193,34 @@ func (c *Checker) createSignatureForJSXIntrinsic(node *ast.Node, result *Type) * func (c *Checker) getIntrinsicAttributesTypeFromJsxOpeningLikeElement(node *ast.Node) *Type { debug.Assert(isJsxIntrinsicTagName(node.TagName())) links := c.jsxElementLinks.Get(node) - if links.resolvedJsxElementAttributesType != nil { - return links.resolvedJsxElementAttributesType + if t := links.resolvedJsxElementAttributesType.get(c); t != nil { + return t } + if c.memoActive() { + links.resolvedJsxElementAttributesType.begin(c) + result := c.getIntrinsicAttributesTypeFromJsxOpeningLikeElementUncached(node, links) + c.endMemo() + return result + } + return c.getIntrinsicAttributesTypeFromJsxOpeningLikeElementUncached(node, links) +} + +func (c *Checker) getIntrinsicAttributesTypeFromJsxOpeningLikeElementUncached(node *ast.Node, links *JsxElementLinks) *Type { + if t := links.resolvedJsxElementAttributesType.get(c); t != nil { + return t + } + result := c.errorType symbol := c.getIntrinsicTagSymbol(node) if links.jsxFlags&JsxFlagsIntrinsicNamedElement != 0 { - links.resolvedJsxElementAttributesType = core.OrElse(c.getTypeOfSymbol(symbol), c.errorType) - return links.resolvedJsxElementAttributesType - } - if links.jsxFlags&JsxFlagsIntrinsicIndexedElement != 0 { + result = core.OrElse(c.getTypeOfSymbol(symbol), c.errorType) + } else if links.jsxFlags&JsxFlagsIntrinsicIndexedElement != 0 { indexInfo := c.getApplicableIndexInfoForName(c.getJsxType(JsxNames.IntrinsicElements, node), node.TagName().Text()) if indexInfo != nil { - links.resolvedJsxElementAttributesType = indexInfo.valueType - return links.resolvedJsxElementAttributesType + result = indexInfo.valueType } } - links.resolvedJsxElementAttributesType = c.errorType - return links.resolvedJsxElementAttributesType + links.resolvedJsxElementAttributesType.set(c, result) + return result } // Looks up an intrinsic tag name and returns a symbol that either points to an intrinsic @@ -1314,14 +1328,31 @@ func (c *Checker) getJsxType(name string, location *ast.Node) *Type { } func (c *Checker) getJsxNamespaceAt(location *ast.Node) *ast.Symbol { - var links *JsxElementLinks - if location != nil { - links = c.jsxElementLinks.Get(location) + if location == nil { + return c.getJsxNamespaceAtUncached(location, nil) + } + links := c.jsxElementLinks.Get(location) + if s := links.jsxNamespace.get(c); s != nil && s != c.unknownSymbol { + return s } - if links != nil && links.jsxNamespace != nil && links.jsxNamespace != c.unknownSymbol { - return links.jsxNamespace + if c.memoActive() { + links.jsxNamespace.begin(c) + result := c.getJsxNamespaceAtUncached(location, links) + c.endMemo() + return result + } + return c.getJsxNamespaceAtUncached(location, links) +} + +func (c *Checker) getJsxNamespaceAtUncached(location *ast.Node, links *JsxElementLinks) *ast.Symbol { + var cached *ast.Symbol + if links != nil { + cached = links.jsxNamespace.get(c) + if cached != nil && cached != c.unknownSymbol { + return cached + } } - if links == nil || links.jsxNamespace != c.unknownSymbol { + if cached != c.unknownSymbol { resolvedNamespace := c.getJsxNamespaceContainerForImplicitImport(location) if resolvedNamespace == nil || resolvedNamespace == c.unknownSymbol { namespaceName := c.getJsxNamespace(location) @@ -1331,13 +1362,13 @@ func (c *Checker) getJsxNamespaceAt(location *ast.Node) *ast.Symbol { candidate := c.resolveSymbol(c.getSymbol(c.getExportsOfSymbol(c.resolveSymbol(resolvedNamespace)), JsxNames.JSX, ast.SymbolFlagsNamespace)) if candidate != nil && candidate != c.unknownSymbol { if links != nil { - links.jsxNamespace = candidate + links.jsxNamespace.set(c, candidate) } return candidate } } if links != nil { - links.jsxNamespace = c.unknownSymbol + links.jsxNamespace.set(c, c.unknownSymbol) } } // JSX global fallback diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 03bba441bc29d..ea0ed15b41e03 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -8,7 +8,6 @@ import ( "github.com/microsoft/TypeScript/tsc/internal/ast" - "github.com/microsoft/TypeScript/tsc/internal/core" "github.com/microsoft/TypeScript/tsc/internal/debug" ) @@ -41,7 +40,6 @@ const ( memoTypeNodeType memoBaseTypes memoStructuredMembers - memoGlobal memoTypeParameterConstraint memoTypeParameterDefault memoTypeAlias @@ -58,6 +56,13 @@ const ( memoModuleExports memoInstantiationExpressionType memoRelationOverflow + memoTypePredicate + memoDeclaredMembers + memoCouldContainTypeVariables + memoGenericObjectFlags + memoUnknownLikeUnion + memoNeverIntersection + memoDiscriminant memoResolvedMembers // followed by one field per MembersOrExportsResolutionKind memoSymbolExports = memoResolvedMembers + memoField(MembersOrExportsResolutionKindResolvedExports) memoSymbolMembers = memoResolvedMembers + memoField(MembersOrExportsResolutionKindResolvedMembers) @@ -195,6 +200,25 @@ func (m *memo[T]) begin(c *Checker) { c.beginMemo(m.key()) } +// memoCompute returns the result cached in m, computing it in a computation +// of its own if there is none. A result cached while computing it, by a +// computation that re-entered it, is kept. +func (c *Checker) memoCompute[T comparable](m *memo[T], compute func() T) T { + var zero T + if v := m.get(c); v != zero { + return v + } + m.begin(c) + v := compute() + if cur := m.peek(); cur != zero { + v = cur + } else { + m.set(c, v) + } + c.endMemo() + return v +} + // memoMap is a map of cached results, each accounted for like a memo. The // entries are only accessible through methods. Memo state is kept per entry // in a side map allocated on first use by a query. @@ -241,6 +265,11 @@ func (m *memoMap[K, V]) has(c *Checker, k K) bool { return ok } +// isEmpty reports whether no result is cached, without observing any. +func (m *memoMap[K, V]) isEmpty() bool { + return len(m.memoEntries) == 0 +} + // values iterates the cached results without observing them, for // inspection outside of checking. func (m *memoMap[K, V]) values() iter.Seq[V] { @@ -323,6 +352,30 @@ func (m *memoMap[K, V]) state(k K) *memoState { return state } +// memoSet tracks computations that run at most once per key, such as checks +// whose only results are diagnostics. Each run is a computation of its own, so +// skipping a key that already ran accounts for the effects of that run. +type memoSet[K comparable] struct { + m memoMap[K, struct{}] +} + +// has reports whether k has run; see memoMap.get. +func (s *memoSet[K]) has(c *Checker, k K) bool { + return s.m.has(c, k) +} + +// once runs fn unless k has run already. k is marked before fn runs, so fn +// does not run again if it re-enters. +func (s *memoSet[K]) once(c *Checker, k K, fn func()) { + if s.m.has(c, k) { + return + } + s.m.begin(c, k) + s.m.set(c, k, struct{}{}) + fn() + c.endMemo() +} + // memoActive reports whether reading a cached result must account for its // effects: false in a check with nothing pending. func (c *Checker) memoActive() bool { @@ -677,6 +730,59 @@ func (c *Checker) memoEffectsAt(i int) *memoEffects { return f } +// A flag memo is a cached result held outside a memo, so that it costs no +// space of its own: bits of a flags word shared with other results, or a +// field of storage allocated only when needed. It is accounted for like a +// memo under a key naming its entity and field. Readers finding it cached +// call observeFlagMemo; it is computed between beginMemo and endMemo for the +// key, and cached with setFlagMemoBits or setFlagMemo. + +// observeFlagMemo accounts for reading the flag memo identified by key. +func (c *Checker) observeFlagMemo(key memoKey) { + if c.memoActive() { + c.observeMemo(key) + } +} + +// setFlagMemo accounts for caching the result of the flag memo identified by +// key, as memo.set does. +func (c *Checker) setFlagMemo(key memoKey) { + if !c.checking { + c.memoAttach(key) + } +} + +// objectFlagsCell returns the flags under value of t, a flag memo whose +// result is cached once the computed flag is set, computing them in a +// computation of their own if needed. With inProgress, the computed flag is +// set while computing, so that a computation re-entering it finds no flags. +func (c *Checker) objectFlagsCell(t *Type, field memoField, computed ObjectFlags, value ObjectFlags, inProgress bool, compute func() ObjectFlags) ObjectFlags { + key := memoKeyOf(t, field) + if t.objectFlags&computed != 0 { + c.observeFlagMemo(key) + return t.objectFlags & value + } + c.beginMemo(key) + if inProgress { + setFlagMemoBits(c, key, &t.objectFlags, computed|value, computed) + } + result := compute() & value + if inProgress || t.objectFlags&computed == 0 { + setFlagMemoBits(c, key, &t.objectFlags, computed|value, computed|result) + } else { + result = t.objectFlags & value + } + c.endMemo() + return result +} + +// setFlagMemoBits caches the bits of *p under mask as the result of the flag +// memo identified by key. +func setFlagMemoBits[T ~uint32](c *Checker, key memoKey, p *T, mask T, bits T) { + *p = *p&^mask | bits&mask + c.setFlagMemo(key) +} + // typeResolutionMemo returns the address of the memo caching the result of // a type resolution, or nil if it is not cached in a memo. func (c *Checker) typeResolutionMemo(r *TypeResolution) *memoHeader { @@ -685,6 +791,8 @@ func (c *Checker) typeResolutionMemo(r *TypeResolution) *memoHeader { return &c.valueSymbolLinks.Get(r.target.(*ast.Symbol)).resolvedType.memoHeader case TypeSystemPropertyNameDeclaredType: return &c.typeAliasLinks.Get(r.target.(*ast.Symbol)).declaredType.memoHeader + case TypeSystemPropertyNameResolvedTypeArguments: + return &r.target.(*Type).AsTypeReference().resolvedTypeArguments.memoHeader case TypeSystemPropertyNameResolvedBaseTypes: return &r.target.(*Type).AsInterfaceType().resolvedBaseTypes.memoHeader case TypeSystemPropertyNameResolvedBaseConstructorType: @@ -704,15 +812,3 @@ func (c *Checker) typeResolutionMemo(r *TypeResolution) *memoHeader { } return nil } - -// memoizeGlobal memoizes the resolution of a global, replaying effects of -// the resolution wherever the cached result is observed. -func memoizeGlobal[T any](c *Checker, fn func() T) func() T { - cell := &struct{ resolve func() T }{resolve: core.Memoize(fn)} - return func() T { - c.beginMemo(memoKeyOf(cell, memoGlobal)) - result := cell.resolve() - c.endMemo() - return result - } -} diff --git a/tsc/internal/checker/nodebuilder_hover.go b/tsc/internal/checker/nodebuilder_hover.go index b49ac981fbd41..9abe67c6b1ed4 100644 --- a/tsc/internal/checker/nodebuilder_hover.go +++ b/tsc/internal/checker/nodebuilder_hover.go @@ -263,7 +263,7 @@ func (b *NodeBuilderImpl) expandInterfaceDecl(symbol *ast.Symbol) *ast.Node { members = append(members, b.signatureToSignatureDeclarationHelper(sig, ast.KindCallSignature, nil)) } // Properties, filtering inherited - filteredProps := b.filterInheritedProperties(interfaceType, baseTypes, resolved.getProperties()) + filteredProps := b.filterInheritedProperties(interfaceType, baseTypes, resolved.getProperties(b.ch)) members = b.serializePropertiesWithTruncation(filteredProps, members) // Heritage clauses diff --git a/tsc/internal/checker/nodebuilderimpl.go b/tsc/internal/checker/nodebuilderimpl.go index 183af5a452ee3..72d63144120d4 100644 --- a/tsc/internal/checker/nodebuilderimpl.go +++ b/tsc/internal/checker/nodebuilderimpl.go @@ -576,7 +576,7 @@ func (b *NodeBuilderImpl) getResolvedTypeWithoutAbstractConstructSignatures(t *S t.extra.objectTypeWithoutAbstractConstructSignatures = t.AsType() return t.AsType() } - typeCopy := b.ch.newAnonymousType(t.symbol, t.getMembers(), t.CallSignatures(), core.IfElse(len(constructSignatures) > 0, constructSignatures, []*Signature{}), t.getIndexInfos()) + typeCopy := b.ch.newAnonymousType(t.symbol, t.getMembers(b.ch), t.CallSignatures(), core.IfElse(len(constructSignatures) > 0, constructSignatures, []*Signature{}), t.getIndexInfos()) t.extra.objectTypeWithoutAbstractConstructSignatures = typeCopy typeCopy.AsStructuredType().ensureExtra().objectTypeWithoutAbstractConstructSignatures = typeCopy return typeCopy @@ -2758,7 +2758,7 @@ func (b *NodeBuilderImpl) createTypeNodesFromResolvedType(resolvedType *Structur typeElements = slices.Concat(typeElements, b.indexInfoToObjectComputedNamesOrSignatureDeclaration(info, typeNode)) } - properties := resolvedType.getProperties() + properties := resolvedType.getProperties(b.ch) if len(properties) == 0 { return b.f.NewNodeList(typeElements) } @@ -2800,14 +2800,14 @@ func (b *NodeBuilderImpl) createTypeNodesFromResolvedType(resolvedType *Structur } func (b *NodeBuilderImpl) createTypeNodeFromObjectType(t *Type) *ast.TypeNode { - if b.ch.isGenericMappedType(t) || (t.objectFlags&ObjectFlagsMapped != 0 && t.AsMappedType().containsError) { + if b.ch.isGenericMappedType(t) || (t.objectFlags&ObjectFlagsMapped != 0 && t.AsMappedType().containsError.get(b.ch)) { return b.createMappedTypeNodeFromType(t) } resolved := b.ch.resolveStructuredTypeMembers(t) callSigs := resolved.CallSignatures() ctorSigs := resolved.ConstructSignatures() - if len(resolved.getProperties()) == 0 && len(resolved.getIndexInfos()) == 0 { + if len(resolved.getProperties(b.ch)) == 0 && len(resolved.getIndexInfos()) == 0 { if len(callSigs) == 0 && len(ctorSigs) == 0 { b.ctx.approximateLength += 2 result := b.f.NewTypeLiteralNode(b.f.NewNodeList([]*ast.Node{})) @@ -2836,9 +2836,9 @@ func (b *NodeBuilderImpl) createTypeNodeFromObjectType(t *Type) *ast.TypeNode { return b.ch.getOrCreateTypeFromSignature(s) }) // count the number of type elements excluding abstract constructors - typeElementCount := len(callSigs) + (len(ctorSigs) - len(abstractSignatures)) + len(resolved.getIndexInfos()) + core.IfElse(b.ctx.flags&nodebuilder.FlagsWriteClassExpressionAsTypeLiteral != 0, core.CountWhere(resolved.getProperties(), func(p *ast.Symbol) bool { + typeElementCount := len(callSigs) + (len(ctorSigs) - len(abstractSignatures)) + len(resolved.getIndexInfos()) + core.IfElse(b.ctx.flags&nodebuilder.FlagsWriteClassExpressionAsTypeLiteral != 0, core.CountWhere(resolved.getProperties(b.ch), func(p *ast.Symbol) bool { return p.Flags()&ast.SymbolFlagsPrototype == 0 - }), len(resolved.getProperties())) + }), len(resolved.getProperties(b.ch))) // don't include an empty object literal if there were no other static-side // properties to write, i.e. `abstract class C { }` becomes `abstract new () => {}` // and not `(abstract new () => {}) & {}` diff --git a/tsc/internal/checker/relater.go b/tsc/internal/checker/relater.go index 0dd3995acb41a..b506908d60fd8 100644 --- a/tsc/internal/checker/relater.go +++ b/tsc/internal/checker/relater.go @@ -97,8 +97,12 @@ func asRecursionId[T *ast.Node | *ast.Symbol | *Type](value T) RecursionId { return RecursionId{value: value} } +// relationCountLimit is the number of results a single comparison may add to +// a relation before it is considered too complex. +const relationCountLimit = 16_000_000 / 8 + type Relation struct { - results map[CacheHashKey]RelationComparisonResult + results memoMap[CacheHashKey, RelationComparisonResult] overflows map[CacheHashKey]*relationOverflow } @@ -129,19 +133,13 @@ func (c *Checker) observeRelationOverflow(relation *Relation, key CacheHashKey) } } -func (r *Relation) get(key CacheHashKey) RelationComparisonResult { - return r.results[key] -} - -func (r *Relation) set(key CacheHashKey, result RelationComparisonResult) { - if r.results == nil { - r.results = make(map[CacheHashKey]RelationComparisonResult) - } - r.results[key] = result +func (r *Relation) get(c *Checker, key CacheHashKey) RelationComparisonResult { + result, _ := r.results.get(c, key) + return result } -func (r *Relation) size() int { - return len(r.results) +func (r *Relation) set(c *Checker, key CacheHashKey, result RelationComparisonResult) { + r.results.set(c, key, result) } func (c *Checker) isTypeIdenticalTo(source *Type, target *Type) bool { @@ -221,7 +219,7 @@ func (c *Checker) isTypeRelatedTo(source *Type, target *Type, relation *Relation } if source.flags&TypeFlagsObject != 0 && target.flags&TypeFlagsObject != 0 { id, _ := c.getRelationKey(source, target, IntersectionStateNone, relation == c.identityRelation, false) - related := relation.get(id) + related := relation.get(c, id) if related != RelationComparisonResultNone { if related&RelationComparisonResultOverflow != 0 { c.observeRelationOverflow(relation, id) @@ -408,12 +406,21 @@ func (c *Checker) checkTypeRelatedToEx( r := c.getRelater() r.relation = relation r.errorNode = errorNode - r.relationCount = (16_000_000 - relation.size()) / 8 + // The budget does not depend on how many results are cached, so that whether + // a comparison overflows does not depend on what was compared before it. + r.relationCount = relationCountLimit + // The comparison is a computation of its own, so that reusing any result it + // caches accounts for the effects of the whole comparison. Errors are + // reported after it, since they belong to the caller rather than the result. + id, _ := c.getRelationKey(source, target, IntersectionStateNone, relation == c.identityRelation, false /*ignoreConstraints*/) + relation.results.begin(c, id) result := r.isRelatedToEx(source, target, RecursionFlagsBoth, errorNode != nil /*reportErrors*/, headMessage, IntersectionStateNone) if r.overflow { // Record this relation as having failed such that we don't attempt the overflowing operation again. - id, _ := c.getRelationKey(source, target, IntersectionStateNone, relation == c.identityRelation, false /*ignoreConstraints*/) - relation.set(id, RelationComparisonResultFailed|RelationComparisonResultComplexityOverflow) + relation.set(c, id, RelationComparisonResultFailed|RelationComparisonResultComplexityOverflow) + } + c.endMemo() + if r.overflow { c.beginMemo(memoKeyOf(relation.overflowCell(id), memoRelationOverflow)) if tr := c.tracer; tr != nil { tr.Instant(tracing.PhaseCheckTypes, "checkTypeRelatedTo_DepthLimit", map[string]any{"sourceId": source.id, "targetId": target.id, "depth": len(r.sourceStack), "targetDepth": len(r.targetStack)}) @@ -865,7 +872,7 @@ func (c *Checker) typeGeneration(t *Type) int { switch { case t.flags&TypeFlagsObject != 0: if t.objectFlags&ObjectFlagsReference != 0 && t.AsTypeReference().node == nil { - generation = c.typesGeneration(t.AsTypeReference().resolvedTypeArguments) + generation = c.typesGeneration(t.AsTypeReference().resolvedTypeArguments.peek()) } else if m := t.AsObjectType().mapper; m != nil { generation = c.mapperGeneration(m) } else if t.symbol != nil && t.symbol.Flags()&ast.SymbolFlagsObjectLiteral != 0 { @@ -1232,18 +1239,31 @@ func (c *Checker) isDiscriminantProperty(t *Type, name string) bool { if t != nil && t.flags&TypeFlagsUnion != 0 { prop := c.getUnionOrIntersectionProperty(t, name, false /*skipObjectFunctionPropertyAugment*/) if prop != nil && prop.CheckFlags()&ast.CheckFlagsSyntheticProperty != 0 { - if prop.CheckFlags()&ast.CheckFlagsIsDiscriminantComputed == 0 { - prop.SetCheckFlags(prop.CheckFlags() | ast.CheckFlagsIsDiscriminantComputed) - if prop.CheckFlags()&ast.CheckFlagsNonUniformAndLiteral == ast.CheckFlagsNonUniformAndLiteral && !c.isGenericType(c.getTypeOfSymbol(prop)) { - prop.SetCheckFlags(prop.CheckFlags() | ast.CheckFlagsIsDiscriminant) - } + key := memoKeyOf(prop, memoDiscriminant) + if prop.CheckFlags()&ast.CheckFlagsIsDiscriminantComputed != 0 { + c.observeFlagMemo(key) + return prop.CheckFlags()&ast.CheckFlagsIsDiscriminant != 0 + } + c.beginMemo(key) + c.setDiscriminantFlags(prop, ast.CheckFlagsIsDiscriminantComputed) + if prop.CheckFlags()&ast.CheckFlagsNonUniformAndLiteral == ast.CheckFlagsNonUniformAndLiteral && !c.isGenericType(c.getTypeOfSymbol(prop)) { + c.setDiscriminantFlags(prop, ast.CheckFlagsIsDiscriminantComputed|ast.CheckFlagsIsDiscriminant) } + c.endMemo() return prop.CheckFlags()&ast.CheckFlagsIsDiscriminant != 0 } } return false } +// setDiscriminantFlags caches whether the synthetic property prop is a +// discriminant, a flag memo. +func (c *Checker) setDiscriminantFlags(prop *ast.Symbol, flags ast.CheckFlags) { + const mask = ast.CheckFlagsIsDiscriminantComputed | ast.CheckFlagsIsDiscriminant + prop.SetCheckFlags(prop.CheckFlags()&^mask | flags) + c.setFlagMemo(memoKeyOf(prop, memoDiscriminant)) +} + func (c *Checker) getMatchingUnionConstituentForType(unionType *Type, t *Type) *Type { keyPropertyName := c.getKeyPropertyName(unionType) if keyPropertyName == "" { @@ -1261,13 +1281,15 @@ func (c *Checker) getMatchingUnionConstituentForType(unionType *Type, t *Type) * // an empty string if no such discriminant property exists. func (c *Checker) getKeyPropertyName(t *Type) string { u := t.AsUnionType() - if u.keyPropertyName == "" { - u.keyPropertyName, u.constituentMap = c.computeKeyPropertyNameAndMap(t) - } - if u.keyPropertyName == ast.InternalSymbolNameMissing { + name := c.memoCompute(&u.keyPropertyName, func() string { + var name string + name, u.constituentMap = c.computeKeyPropertyNameAndMap(t) + return name + }) + if name == ast.InternalSymbolNameMissing { return "" } - return u.keyPropertyName + return name } // Given a union type for which getKeyPropertyName returned a non-empty string, return the constituent @@ -1484,14 +1506,15 @@ func (c *Checker) getAliasVariances(symbol *ast.Symbol) []VarianceFlags { // returns an empty slice when invoked recursively for the given generic type. func (c *Checker) getVariancesWorker(symbol *ast.Symbol, typeParameters []*Type) []VarianceFlags { links := c.varianceLinks.Get(symbol) - if links.variances == nil { + if links.variances.get(c) == nil { var traceArgs map[string]any if tr := c.tracer; tr != nil { traceArgs = map[string]any{"arity": len(typeParameters), "id": c.getDeclaredTypeOfSymbol(symbol).id} popFn := tr.Push(tracing.PhaseCheckTypes, "getVariancesWorker", traceArgs, true) defer func() { - formatted := make([]string, len(links.variances)) - for i, v := range links.variances { + variances := links.variances.get(c) + formatted := make([]string, len(variances)) + for i, v := range variances { formatted[i] = v.String() } traceArgs["variances"] = formatted @@ -1500,11 +1523,16 @@ func (c *Checker) getVariancesWorker(symbol *ast.Symbol, typeParameters []*Type) } stackIndex := c.getVarianceStackIndex(symbol) if stackIndex < 0 { + links.variances.begin(c) saveResolutionStart := c.resolutionStart if len(c.varianceStack) == 0 { c.resolutionStart = len(c.resolutions) } c.varianceStack = append(c.varianceStack, VarianceStackEntry{symbol, typeParameters}) + if c.varianceMeasuring == nil { + c.varianceMeasuring = make(map[*ast.Symbol]int) + } + c.varianceMeasuring[symbol]++ variances := make([]VarianceFlags, len(typeParameters)) for i, tp := range typeParameters { modifiers := c.getTypeParameterModifiers(tp) @@ -1545,19 +1573,23 @@ func (c *Checker) getVariancesWorker(symbol *ast.Symbol, typeParameters []*Type) } // If variance computation was restarted due to a circularity we may have already // computed variances for this generic type. If so, we exit early. - if len(links.variances) != 0 { + if len(links.variances.get(c)) != 0 { break } variances[i] = variance } // Store the results unless a restarted computation has already stored them. - if len(links.variances) == 0 { - links.variances = variances + if len(links.variances.get(c)) == 0 { + links.variances.set(c, variances) } c.varianceStack = c.varianceStack[:len(c.varianceStack)-1] + if c.varianceMeasuring[symbol]--; c.varianceMeasuring[symbol] == 0 { + delete(c.varianceMeasuring, symbol) + } if len(c.varianceStack) == 0 { c.resolutionStart = saveResolutionStart } + c.endMemo() } else { // We've detected a circularity. Since we may compute different variances depending on where // we enter a circularity, we find the generic type with the "smallest" symbol in the circular @@ -1577,12 +1609,12 @@ func (c *Checker) getVariancesWorker(symbol *ast.Symbol, typeParameters []*Type) } // Store an empty slice to mark that we can't compute variances for this type. We treat type // parameters as co-variant in this case. - if len(links.variances) == 0 { - links.variances = []VarianceFlags{} + if len(links.variances.get(c)) == 0 { + links.variances.set(c, []VarianceFlags{}) } } } - return links.variances + return links.variances.get(c) } func (c *Checker) getVarianceStackIndex(symbol *ast.Symbol) int { @@ -1606,12 +1638,61 @@ func (c *Checker) createMarkerType(symbol *ast.Symbol, source *Type, target *Typ } else { result = c.createTypeReference(t, c.instantiateTypes(t.AsInterfaceType().TypeParameters(), mapper)) } - c.markerTypes.Add(result) return result } +// isMarkerType reports whether t is a marker type of a variance computation +// or variance annotation check in progress (including computations suspended +// by a restart from a circularity): an instantiation of the generic +// type or type alias being measured with one of its type parameters replaced +// by a variance marker. Instantiations of other types with markers, such as +// those nested in the type being measured, are not marker types, whether or +// not their own variances have been measured before. func (c *Checker) isMarkerType(t *Type) bool { - return c.markerTypes.Has(t) + if len(c.varianceMeasuring) == 0 && c.varianceTypeParameter == nil { + return false + } + if t.alias != nil && t.alias.symbol.Flags()&ast.SymbolFlagsTypeAlias != 0 && + c.isMarkerInstantiation(t.alias.symbol, c.typeAliasLinks.Get(t.alias.symbol).typeParameters, t.alias.typeArguments) { + return true + } + if t.objectFlags&ObjectFlagsReference != 0 && t.AsTypeReference().node == nil { + target := t.Target() + if target != nil && target != t && target.objectFlags&ObjectFlagsClassOrInterface != 0 { + return c.isMarkerInstantiation(target.symbol, target.AsInterfaceType().TypeParameters(), t.AsTypeReference().resolvedTypeArguments.peek()) + } + } + return false +} + +func (c *Checker) isMarkerInstantiation(symbol *ast.Symbol, typeParameters []*Type, typeArguments []*Type) bool { + if len(typeParameters) == 0 || len(typeParameters) != len(typeArguments) { + return false + } + replaced := -1 + for i, tp := range typeParameters { + if typeArguments[i] == tp { + continue + } + if replaced >= 0 || !c.isVarianceMarker(typeArguments[i]) { + return false + } + replaced = i + } + if replaced < 0 { + return false + } + switch typeArguments[replaced] { + case c.markerSuperTypeForCheck, c.markerSubTypeForCheck: + return typeParameters[replaced] == c.varianceTypeParameter + default: + return c.varianceMeasuring[symbol] != 0 + } +} + +func (c *Checker) isVarianceMarker(t *Type) bool { + return t == c.markerSuperType || t == c.markerSubType || t == c.markerOtherType || + t == c.markerSuperTypeForCheck || t == c.markerSubTypeForCheck } func (c *Checker) getTypeParameterModifiers(tp *Type) ast.ModifierFlags { @@ -1890,9 +1971,23 @@ func (c *Checker) getMinArgumentCount(signature *Signature) int { } func (c *Checker) getMinArgumentCountEx(signature *Signature, flags MinArgumentCountFlags) int { + voidIsNonOptional := flags & MinArgumentCountFlagsVoidIsNonOptional + if voidIsNonOptional != 0 { + return c.getMinArgumentCountUncached(signature, flags) + } + if count := signature.resolvedMinArgumentCount.get(c); count != -1 { + return int(count) + } + signature.resolvedMinArgumentCount.begin(c) + result := c.getMinArgumentCountUncached(signature, flags) + c.endMemo() + return result +} + +func (c *Checker) getMinArgumentCountUncached(signature *Signature, flags MinArgumentCountFlags) int { strongArityForUntypedJS := flags & MinArgumentCountFlagsStrongArityForUntypedJS voidIsNonOptional := flags & MinArgumentCountFlagsVoidIsNonOptional - if voidIsNonOptional != 0 || signature.resolvedMinArgumentCount == -1 { + { minArgumentCount := -1 if signatureHasRestParameter(signature) { restType := c.getTypeOfSymbol(signature.parameters[len(signature.parameters)-1]) @@ -1925,9 +2020,9 @@ func (c *Checker) getMinArgumentCountEx(signature *Signature, flags MinArgumentC } minArgumentCount = i } - signature.resolvedMinArgumentCount = int32(minArgumentCount) + signature.resolvedMinArgumentCount.set(c, int32(minArgumentCount)) + return minArgumentCount } - return int(signature.resolvedMinArgumentCount) } func (c *Checker) hasEffectiveRestParameter(signature *Signature) bool { @@ -2198,6 +2293,22 @@ func (c *Checker) getTupleElementLabelFromBindingElement(node *ast.Node, index i } func (c *Checker) getTypePredicateOfSignature(sig *Signature) *TypePredicate { + key := memoKeyOf(sig, memoTypePredicate) + if sig.getResolvedTypePredicate(c) != nil { + c.observeFlagMemo(key) + } else { + c.beginMemo(key) + c.resolveTypePredicateOfSignature(sig) + c.endMemo() + } + predicate := sig.getResolvedTypePredicate(c) + if predicate == c.noTypePredicate { + return nil + } + return predicate +} + +func (c *Checker) resolveTypePredicateOfSignature(sig *Signature) { if sig.getResolvedTypePredicate(c) == nil { switch { case sig.target != nil: @@ -2225,11 +2336,6 @@ func (c *Checker) getTypePredicateOfSignature(sig *Signature) *TypePredicate { sig.setResolvedTypePredicate(c, c.noTypePredicate) } } - predicate := sig.getResolvedTypePredicate(c) - if predicate == c.noTypePredicate { - return nil - } - return predicate } func (c *Checker) getUnionOrIntersectionTypePredicate(signatures []*Signature, isUnion bool) *TypePredicate { @@ -3297,7 +3403,7 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError return TernaryFalse } id, constrained := r.c.getRelationKey(source, target, intersectionState, r.relation == r.c.identityRelation, false /*ignoreConstraints*/) - if entry := r.relation.get(id); entry != RelationComparisonResultNone { + if entry := r.relation.get(r.c, id); entry != RelationComparisonResultNone { if reportErrors && entry&RelationComparisonResultFailed != 0 && entry&RelationComparisonResultOverflow == 0 { // We are elaborating errors and the cached result is a failure not due to a comparison overflow, // so we will do the comparison again to generate an error message. @@ -3333,7 +3439,7 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError } // What relates with unconstrained type parameters also relates with // constrained ones. - if entry := r.relation.get(broadestEquivalentId); entry&RelationComparisonResultSucceeded != 0 { + if entry := r.relation.get(r.c, broadestEquivalentId); entry&RelationComparisonResultSucceeded != 0 { r.c.reliabilityFlags |= entry & (RelationComparisonResultReportsUnmeasurable | RelationComparisonResultReportsUnreliable) return TernaryTrue } @@ -3419,7 +3525,7 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError case result == TernaryFalse: // A false result goes straight into global cache (when something is false under // assumptions it will also be false without assumptions) - r.relation.set(id, RelationComparisonResultFailed|propagatingVarianceFlags) + r.relation.set(r.c, id, RelationComparisonResultFailed|propagatingVarianceFlags) r.relationCount-- r.resetMaybeStack(maybeStart, propagatingVarianceFlags, false) case low >= depth: @@ -3432,7 +3538,7 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError r.resetMaybeStack(maybeStart, propagatingVarianceFlags, false) case truncated: r.resetMaybeStack(maybeStart, propagatingVarianceFlags, false) - r.relation.set(id, RelationComparisonResultSucceeded|propagatingVarianceFlags) + r.relation.set(r.c, id, RelationComparisonResultSucceeded|propagatingVarianceFlags) r.relationCount-- default: r.resetMaybeStack(maybeStart, propagatingVarianceFlags, true) @@ -3483,7 +3589,7 @@ func (r *Relater) resetMaybeStack(maybeStart int, propagatingVarianceFlags Relat key := r.maybeKeys[i].key delete(r.maybeKeysSet, key) if markAllAsSucceeded { - r.relation.set(key, RelationComparisonResultSucceeded|propagatingVarianceFlags) + r.relation.set(r.c, key, RelationComparisonResultSucceeded|propagatingVarianceFlags) r.relationCount-- } } diff --git a/tsc/internal/checker/services.go b/tsc/internal/checker/services.go index 8f3206adfddff..9dc67cfe92db3 100644 --- a/tsc/internal/checker/services.go +++ b/tsc/internal/checker/services.go @@ -153,7 +153,7 @@ func (c *Checker) ForEachExportAndPropertyOfModule(moduleSymbol *ast.Symbol, cb if reducedType.flags&TypeFlagsStructuredType == 0 { return } - for name, symbol := range c.resolveStructuredTypeMembers(reducedType).getMembers().All() { + for name, symbol := range c.resolveStructuredTypeMembers(reducedType).getMembers(c).All() { if c.isNamedMember(symbol, name) { cb(symbol, name) } diff --git a/tsc/internal/checker/symbolaccessibility.go b/tsc/internal/checker/symbolaccessibility.go index 35bf5b6d778e1..c2333c8e1ee67 100644 --- a/tsc/internal/checker/symbolaccessibility.go +++ b/tsc/internal/checker/symbolaccessibility.go @@ -171,18 +171,37 @@ func (c *Checker) getAlternativeContainingModules(symbol *ast.Symbol, enclosingD return nil } containingFile := ast.GetSourceFileOfNode(enclosingDeclaration) - id := ast.GetNodeId(containingFile.AsNode()) - links := c.symbolContainerLinks.Get(symbol) - if links.extendedContainersByFile == nil { - links.extendedContainersByFile = make(map[ast.NodeId][]*ast.Symbol) + // Try to make an import using an import already in the enclosing file, if possible + if results := c.getImportedContainingModules(symbol, containingFile, enclosingDeclaration); len(results) > 0 { + return results } - existing, ok := links.extendedContainersByFile[id] - if ok && existing != nil { - return existing + // No results from files already being imported by this file - expand search (not location-specific, so cached) + if results, ok := c.extendedContainers.get(c, symbol); ok { + return results + } + return c.extendedContainers.compute(c, symbol, func() []*ast.Symbol { + return c.getExternalModuleContainers(symbol) + }) +} + +type symbolFileKey struct { + symbol *ast.Symbol + file *ast.SourceFile +} + +// getImportedContainingModules returns the modules imported by a file that +// export a symbol. The result only depends on the file, as the module names +// are resolved relative to it. +func (c *Checker) getImportedContainingModules(symbol *ast.Symbol, containingFile *ast.SourceFile, enclosingDeclaration *ast.Node) []*ast.Symbol { + if len(containingFile.Imports()) == 0 { + return nil + } + key := symbolFileKey{symbol, containingFile} + if results, ok := c.importedContainingModules.get(c, key); ok { + return results } - var results []*ast.Symbol - if len(containingFile.Imports()) > 0 { - // Try to make an import using an import already in the enclosing file, if possible + return c.importedContainingModules.compute(c, key, func() []*ast.Symbol { + var results []*ast.Symbol for _, importRef := range containingFile.Imports() { if ast.NodeIsSynthesized(importRef) { // Synthetic names can't be resolved by `resolveExternalModuleName` - they'll cause a debug assert if they error @@ -198,23 +217,11 @@ func (c *Checker) getAlternativeContainingModules(symbol *ast.Symbol, enclosingD } results = append(results, resolvedModule) } - if len(results) > 0 { - links.extendedContainersByFile[id] = results - return results - } - } - - if links.extendedContainers != nil { - return *links.extendedContainers - } - // No results from files already being imported by this file - expand search (not location-specific, so cached) - results = c.getExternalModuleContainers(symbol) - links.extendedContainers = &results - return results + return results + }) } type externalModuleContainerIndex struct { - complete bool containersByTarget map[*ast.Symbol][]*ast.Symbol moduleOrder map[*ast.Symbol]int } @@ -227,14 +234,14 @@ func (index *externalModuleContainerIndex) add(target *ast.Symbol, container *as } func (c *Checker) getExternalModuleContainers(symbol *ast.Symbol) []*ast.Symbol { - if c.externalModuleContainers == nil { - c.buildExternalModuleContainerIndex() - } - index := c.externalModuleContainers - if !index.complete { + if c.buildingExternalModuleContainers { // Re-entered from an alias resolved while building the index; answer this query without it. return c.scanExternalModuleContainers(symbol) } + index := c.externalModuleContainers.get(c) + if index == nil { + index = c.buildExternalModuleContainerIndex() + } containers := index.containersByTarget[c.getResolvedTarget(symbol)] parent := c.getParentOfSymbol(symbol) parentOrder, parentIsModule := index.moduleOrder[parent] @@ -250,12 +257,13 @@ func (c *Checker) getExternalModuleContainers(symbol *ast.Symbol) []*ast.Symbol return containers } -func (c *Checker) buildExternalModuleContainerIndex() { +func (c *Checker) buildExternalModuleContainerIndex() *externalModuleContainerIndex { + c.externalModuleContainers.begin(c) + c.buildingExternalModuleContainers = true index := &externalModuleContainerIndex{ containersByTarget: make(map[*ast.Symbol][]*ast.Symbol), moduleOrder: make(map[*ast.Symbol]int, len(c.program.SourceFiles())), } - c.externalModuleContainers = index for _, file := range c.program.SourceFiles() { if !ast.IsExternalModule(file) { continue @@ -269,7 +277,10 @@ func (c *Checker) buildExternalModuleContainerIndex() { index.add(c.getResolvedTarget(exportEquals), container) } } - index.complete = true + c.buildingExternalModuleContainers = false + c.externalModuleContainers.set(c, index) + c.endMemo() + return index } func (c *Checker) scanExternalModuleContainers(symbol *ast.Symbol) []*ast.Symbol { @@ -513,15 +524,11 @@ func (c *Checker) getAccessibleSymbolChainEx(ctx accessibleSymbolChainContext) [ firstRelevantLocation = node return true }) - links := c.symbolContainerLinks.Get(ctx.symbol) - linkKey := accessibleChainCacheKey{ctx.useOnlyExternalAliasing, firstRelevantLocation, ctx.meaning} - if links.accessibleChainCache == nil { - links.accessibleChainCache = make(map[accessibleChainCacheKey][]*ast.Symbol) - } - existing, ok := links.accessibleChainCache[linkKey] - if ok { + key := accessibleChainCacheKey{ctx.symbol, ctx.useOnlyExternalAliasing, firstRelevantLocation, ctx.meaning} + if existing, ok := c.accessibleChains.get(c, key); ok { return existing } + c.accessibleChains.begin(c, key) var result []*ast.Symbol @@ -533,7 +540,8 @@ func (c *Checker) getAccessibleSymbolChainEx(ctx accessibleSymbolChainContext) [ } return false }) - links.accessibleChainCache[linkKey] = result + c.accessibleChains.set(c, key, result) + c.endMemo() return result } diff --git a/tsc/internal/checker/tracer.go b/tsc/internal/checker/tracer.go index d6c79ecb8bf9e..f6cf05ef5b91f 100644 --- a/tsc/internal/checker/tracer.go +++ b/tsc/internal/checker/tracer.go @@ -191,7 +191,7 @@ func (a *tracedTypeAdapter) ConditionalTrueType() tracing.TracedType { if a.t.flags&TypeFlagsConditional == 0 { return nil } - t := a.t.AsConditionalType().resolvedTrueType + t := a.t.AsConditionalType().resolvedTrueType.peek() if t == nil { return nil } @@ -202,7 +202,7 @@ func (a *tracedTypeAdapter) ConditionalFalseType() tracing.TracedType { if a.t.flags&TypeFlagsConditional == 0 { return nil } - t := a.t.AsConditionalType().resolvedFalseType + t := a.t.AsConditionalType().resolvedFalseType.peek() if t == nil { return nil } @@ -246,7 +246,7 @@ func (a *tracedTypeAdapter) ReferenceTypeArguments() []tracing.TracedType { if a.t.flags&TypeFlagsObject == 0 || a.t.objectFlags&ObjectFlagsReference == 0 { return nil } - return wrapTypes(a.t.AsTypeReference().resolvedTypeArguments) + return wrapTypes(a.t.AsTypeReference().resolvedTypeArguments.peek()) } func (a *tracedTypeAdapter) ReferenceNode() *ast.Node { @@ -304,7 +304,7 @@ func (a *tracedTypeAdapter) EvolvingArrayFinalType() tracing.TracedType { if a.t.flags&TypeFlagsObject == 0 || a.t.objectFlags&ObjectFlagsEvolvingArray == 0 { return nil } - t := a.t.AsEvolvingArrayType().finalArrayType + t := a.t.AsEvolvingArrayType().finalArrayType.peek() if t == nil { return nil } diff --git a/tsc/internal/checker/types.go b/tsc/internal/checker/types.go index 67b6c0397fb32..86ada6c9fb7b6 100644 --- a/tsc/internal/checker/types.go +++ b/tsc/internal/checker/types.go @@ -262,7 +262,7 @@ type DeferredSymbolLinks struct { // Links for alias symbols type AliasSymbolLinks struct { - immediateTarget *ast.Symbol // Immediate target of an alias. May be another alias. Do not access directly, use `checker.getImmediateAliasedSymbol` instead. + immediateTarget memo[*ast.Symbol] // Immediate target of an alias. May be another alias. Do not access directly, use `checker.getImmediateAliasedSymbol` instead. aliasTarget memo[*ast.Symbol] // Resolved (non-alias) target of an alias referenced bool // True if alias symbol has been referenced as a value that can be emitted referenceChecked bool // True if checking has followed the reference; see referenceAliasSymbol @@ -274,7 +274,6 @@ type AliasSymbolLinks struct { type ModuleSymbolLinks struct { resolvedExports ast.SymbolTable // Resolved exports of module or combined early- and late-bound static members of a class. typeOnlyExportStarMap map[string]*ast.Node // Set on a module symbol when some of its exports were resolved through a 'export type * from "mod"' declaration - exportsChecked bool } type ReverseMappedSymbolLinks struct { @@ -300,18 +299,14 @@ type ExportTypeLinks struct { type TypeAliasLinks struct { declaredType memo[*Type] - typeParameters []*Type // Type parameters of type alias (undefined if non-generic) - instantiations map[CacheHashKey]*Type // Instantiations of generic type alias (undefined if non-generic) + typeParameters []*Type // Type parameters of type alias (undefined if non-generic) + instantiations memoMap[CacheHashKey, *Type] // Instantiations of generic type alias (undefined if non-generic) } // Links for declared types (type parameters, class types, interface types, enums) type DeclaredTypeLinks struct { - declaredType memo[*Type] - interfaceChecked bool - indexSignaturesChecked bool - typeParametersChecked bool - enumChecked bool + declaredType memo[*Type] } // Links for switch clauses @@ -326,11 +321,10 @@ const ( ) type SwitchStatementLinks struct { - exhaustiveState ExhaustiveState // Switch statement exhaustiveness - switchTypesComputed bool - witnessesComputed bool - switchTypes []*Type - witnesses []string + exhaustiveState memo[ExhaustiveState] // Switch statement exhaustiveness + witnessesComputed bool + switchTypes memo[[]*Type] + witnesses []string // Syntactic, so needs no memo } type ArrayLiteralLinks struct { @@ -360,7 +354,7 @@ type SpreadLinks struct { // Links for variances of type aliases and interface types type VarianceLinks struct { - variances []VarianceFlags + variances memo[[]VarianceFlags] } type VarianceFlags uint32 @@ -383,17 +377,12 @@ type MarkedAssignmentSymbolLinks struct { } type accessibleChainCacheKey struct { + symbol *ast.Symbol useOnlyExternalAliasing bool location *ast.Node meaning ast.SymbolFlags } -type ContainingSymbolLinks struct { - extendedContainersByFile map[ast.NodeId][]*ast.Symbol // Symbols of nodes which which logically contain this one, cached by file the request is made within - extendedContainers *[]*ast.Symbol // Containers (other than the parent) which this symbol is aliased in - accessibleChainCache map[accessibleChainCacheKey][]*ast.Symbol -} - type AccessFlags uint32 const ( @@ -418,10 +407,8 @@ const ( NodeCheckFlagsContextChecked NodeCheckFlags = 1 << 6 // Contextual types have been assigned NodeCheckFlagsSignatureContextChecked NodeCheckFlags = 1 << 7 // Signature of a contextually typed function has been checked NodeCheckFlagsEnumValuesComputed NodeCheckFlags = 1 << 10 // Values for enum members have been computed, and any errors have been reported for them. - NodeCheckFlagsAssignmentsMarked NodeCheckFlags = 1 << 17 // Parameter assignments have been marked NodeCheckFlagsContainsClassWithPrivateIdentifiers NodeCheckFlags = 1 << 20 // Marked on all block-scoped containers containing a class with private identifiers. NodeCheckFlagsContainsSuperPropertyInStaticInitializer NodeCheckFlags = 1 << 21 // Marked on all block-scoped containers containing a static initializer with 'super.x' or 'super[x]'. - NodeCheckFlagsInCheckIdentifier NodeCheckFlags = 1 << 22 NodeCheckFlagsInitializerIsUndefined NodeCheckFlags = 1 << 24 NodeCheckFlagsInitializerIsUndefinedComputed NodeCheckFlags = 1 << 25 ) @@ -431,7 +418,7 @@ const ( type NodeLinks struct { flags NodeCheckFlags // Set of flags specific to Node declarationRequiresScopeChange core.Tristate // Set by `useOuterVariableScopeInParameter` in checker when downlevel emit would change the name resolution scope inside of a parameter. - hasReportedStatementInAmbientContext bool // Cache boolean if we report statements in ambient context + hasReportedStatementInAmbientContext memo[bool] // Cache boolean if we report statements in ambient context } type SymbolNodeLinks struct { @@ -439,31 +426,34 @@ type SymbolNodeLinks struct { } type TypeNodeLinks struct { - resolvedType memo[*Type] // Resolved type associated with node - outerTypeParameters *[]*Type // Outer type parameters of anonymous object type + resolvedType memo[*Type] // Resolved type associated with node + outerTypeParameters memo[*[]*Type] // Outer type parameters of anonymous object type } -func (links *TypeNodeLinks) getOuterTypeParameters() []*Type { - if links.outerTypeParameters == nil { - return nil +func (links *TypeNodeLinks) getOuterTypeParameters(c *Checker) []*Type { + if p := links.outerTypeParameters.get(c); p != nil { + return *p } - return *links.outerTypeParameters + return nil } func (links *TypeNodeLinks) setOuterTypeParameters(c *Checker, types []*Type) { if types == nil { - links.outerTypeParameters = nil + links.outerTypeParameters.set(c, nil) return } - if links.outerTypeParameters == nil { - links.outerTypeParameters = c.outerTypeParameterListArena.New() - } - *links.outerTypeParameters = types + p := c.outerTypeParameterListArena.New() + *p = types + links.outerTypeParameters.set(c, p) } type ComputedNameNodeLinks struct { - hasName core.Tristate // If the node has a computable name - name string // Resolved name associated with the type of the node + name memo[computedName] // Resolved name associated with the type of the node +} + +type computedName struct { + name string + exists core.Tristate // If the node has a computable name; unknown until computed } // Links for enum members @@ -485,15 +475,15 @@ type SourceFileLinks struct { localJsxFragmentNamespace string localJsxFactory *ast.EntityName localJsxFragmentFactory *ast.EntityName - jsxFragmentType *Type + jsxFragmentType memo[*Type] } // Signature specific links type SignatureLinks struct { resolvedSignature memo[*Signature] // Cached signature of signature node or call expression - effectsSignature *Signature // Signature with possible control flow effects - decoratorSignature *Signature // Signature for decorator as if invoked by the runtime + effectsSignature memo[*Signature] // Signature with possible control flow effects + decoratorSignature memo[*Signature] // Signature for decorator as if invoked by the runtime } type TypeFlags uint32 @@ -1146,7 +1136,7 @@ func (t *StructuredType) ConstructSignatures() []*Signature { return slices.Clip(t.extra.signatures[t.extra.callSignatureCount:]) } -func (t *StructuredType) getMember(name string) *ast.Symbol { +func (t *StructuredType) getMember(c *Checker, name string) *ast.Symbol { if t.members != nil { return t.members.Get(name) } @@ -1158,12 +1148,12 @@ func (t *StructuredType) getMember(name string) *ast.Symbol { if memberInfo == nil { return nil } - return t.getPropertyAt(int(memberInfo.slotIndex)) + return t.getPropertyAt(c, int(memberInfo.slotIndex)) } -func (t *StructuredType) getMembers() ast.SymbolTable { +func (t *StructuredType) getMembers(c *Checker) ast.SymbolTable { if t.members == nil { - if properties := t.getProperties(); len(properties) != 0 { + if properties := t.getProperties(c); len(properties) != 0 { t.members = ast.NewSymbolTableWithCapacity(len(properties)) for _, member := range properties { t.members.Set(member.Name(), member) @@ -1173,7 +1163,7 @@ func (t *StructuredType) getMembers() ast.SymbolTable { return t.members } -func (t *StructuredType) getPropertyAt(index int) *ast.Symbol { +func (t *StructuredType) getPropertyAt(c *Checker, index int) *ast.Symbol { lazy := t.getLazyState() if lazy == nil { return t.properties[index] @@ -1185,19 +1175,19 @@ func (t *StructuredType) getPropertyAt(index int) *ast.Symbol { if member == nil { memberInfo := lazy.layout.memberInfos[index] if memberInfo.baseIndex < 0 { - member = t.checker.instantiateSymbol(memberInfo.symbol, lazy.mapper) + member = c.instantiateSymbol(memberInfo.symbol, lazy.mapper) } else { - member = t.checker.getPropertyOfType(lazy.baseTypes[memberInfo.baseIndex], memberInfo.symbol.Name()) + member = c.getPropertyOfType(lazy.baseTypes[memberInfo.baseIndex], memberInfo.symbol.Name()) } t.properties[index] = member } return member } -func (t *StructuredType) getProperties() []*ast.Symbol { +func (t *StructuredType) getProperties(c *Checker) []*ast.Symbol { if lazy := t.getLazyState(); lazy != nil && !lazy.propertiesResolved { for i := range lazy.layout.memberInfos { - t.getPropertyAt(i) + t.getPropertyAt(c, i) } lazy.propertiesResolved = true } @@ -1244,7 +1234,7 @@ func (t *StructuredType) ensureExtra() *structuredTypeExtra { } func (t *StructuredType) Properties() []*ast.Symbol { - return t.getProperties() + return t.getProperties(t.checker) } // Except for tuple type references and reverse mapped types, all object types have an associated symbol. @@ -1282,9 +1272,9 @@ func (t *StructuredType) Properties() []*ast.Symbol { type ObjectType struct { StructuredType - target *Type // Target of instantiated type - mapper *TypeMapper // Type mapper for instantiated type - instantiations map[CacheHashKey]*Type // Map of type instantiations + target *Type // Target of instantiated type + mapper *TypeMapper // Type mapper for instantiated type + instantiations memoMap[CacheHashKey, *Type] // Map of type instantiations } func (t *ObjectType) AsObjectType() *ObjectType { return t } @@ -1294,7 +1284,7 @@ func (t *ObjectType) AsObjectType() *ObjectType { return t } type TypeReference struct { ObjectType node *ast.Node // TypeReferenceNode | ArrayTypeNode | TupleTypeNode when deferred, else nil - resolvedTypeArguments []*Type + resolvedTypeArguments memo[[]*Type] lazy *LazyState // Resolved member layout and instantiation state } @@ -1420,19 +1410,19 @@ type InstantiationExpressionType struct { type MappedType struct { ObjectType declaration *ast.MappedTypeNode - typeParameter *Type - constraintType *Type - nameType *Type - templateType *Type - modifiersType *Type - resolvedApparentType *Type - containsError bool -} - -func (t *MappedType) TypeParameter() *Type { return t.typeParameter } -func (t *MappedType) ConstraintType() *Type { return t.constraintType } -func (t *MappedType) NameType() *Type { return t.nameType } -func (t *MappedType) TemplateType() *Type { return t.templateType } + typeParameter memo[*Type] + constraintType memo[*Type] + nameType memo[*Type] + templateType memo[*Type] + modifiersType memo[*Type] + resolvedApparentType memo[*Type] + containsError memo[bool] +} + +func (t *MappedType) TypeParameter() *Type { return t.typeParameter.peek() } +func (t *MappedType) ConstraintType() *Type { return t.constraintType.peek() } +func (t *MappedType) NameType() *Type { return t.nameType.peek() } +func (t *MappedType) TemplateType() *Type { return t.templateType.peek() } func (t *MappedType) ResolveComponents(c *Checker, typ *Type) { c.getTypeParameterFromMappedType(typ) c.getConstraintTypeFromMappedType(typ) @@ -1454,7 +1444,7 @@ type ReverseMappedType struct { type EvolvingArrayType struct { ObjectType elementType *Type - finalArrayType *Type + finalArrayType memo[*Type] } // UnionOrIntersectionTypeData @@ -1462,9 +1452,9 @@ type EvolvingArrayType struct { type UnionOrIntersectionType struct { StructuredType types []*Type - propertyCache ast.SymbolTable // Augmented entries, except complete ones already in the non-augmented cache. - propertyCacheWithoutFunctionPropertyAugment ast.SymbolTable - resolvedProperties []*ast.Symbol + propertyCache memoMap[string, *ast.Symbol] // Augmented entries, except complete ones already in the non-augmented cache. + propertyCacheWithoutFunctionPropertyAugment memoMap[string, *ast.Symbol] + resolvedProperties memo[[]*ast.Symbol] } func (t *UnionOrIntersectionType) AsUnionOrIntersectionType() *UnionOrIntersectionType { return t } @@ -1477,10 +1467,10 @@ func (t *UnionOrIntersectionType) Types() []*Type { type UnionType struct { UnionOrIntersectionType - resolvedReducedType *Type + resolvedReducedType memo[*Type] regularType *Type origin *Type // Denormalized union, intersection, or index type in which union originates - keyPropertyName string // Property with unique unit type that exists in every object/intersection in union type + keyPropertyName memo[string] // Property with unique unit type that exists in every object/intersection in union type constituentMap map[*Type]*Type // Constituents keyed by unit type discriminants } @@ -1488,8 +1478,8 @@ type UnionType struct { type IntersectionType struct { UnionOrIntersectionType - resolvedApparentType *Type - uniqueLiteralFilledInstantiation *Type // Instantiation with type parameters mapped to never type + resolvedApparentType memo[*Type] + uniqueLiteralFilledInstantiation memo[*Type] // Instantiation with type parameters mapped to never type } // TypeParameter @@ -1573,7 +1563,7 @@ type ConditionalRoot struct { isDistributive bool inferTypeParameters []*Type outerTypeParameters []*Type - instantiations map[CacheHashKey]*Type + instantiations memoMap[CacheHashKey, *Type] alias *TypeAlias } @@ -1582,11 +1572,11 @@ type ConditionalType struct { root *ConditionalRoot checkType *Type extendsType *Type - resolvedTrueType *Type - resolvedFalseType *Type - resolvedInferredTrueType *Type // The `trueType` instantiated with the `combinedMapper`, if present - resolvedDefaultConstraint *Type - resolvedConstraintOfDistributive *Type + resolvedTrueType memo[*Type] + resolvedFalseType memo[*Type] + resolvedInferredTrueType memo[*Type] // The `trueType` instantiated with the `combinedMapper`, if present + resolvedDefaultConstraint memo[*Type] + resolvedConstraintOfDistributive memo[*Type] mapper *TypeMapper combinedMapper *TypeMapper } @@ -1625,7 +1615,7 @@ type Signature struct { id SignatureId flags SignatureFlags minArgumentCount int32 - resolvedMinArgumentCount int32 + resolvedMinArgumentCount memo[int32] declaration *ast.Node parameters []*ast.Symbol resolvedReturnType memo[*Type] @@ -1671,7 +1661,16 @@ func (s *Signature) getResolvedTypePredicate(c *Checker) *TypePredicate { return s.extra.resolvedTypePredicate } +// setResolvedTypePredicate caches the type predicate of the signature, a flag +// memo; see initResolvedTypePredicate. func (s *Signature) setResolvedTypePredicate(c *Checker, predicate *TypePredicate) { + s.initResolvedTypePredicate(c, predicate) + c.setFlagMemo(memoKeyOf(s, memoTypePredicate)) +} + +// initResolvedTypePredicate sets the type predicate of a signature being +// created. +func (s *Signature) initResolvedTypePredicate(c *Checker, predicate *TypePredicate) { s.flags &^= signatureFlagsNoTypePredicate if predicate != nil && predicate == c.noTypePredicate { s.flags |= signatureFlagsNoTypePredicate diff --git a/tsc/internal/checker/types_test.go b/tsc/internal/checker/types_test.go index bbad7530239f5..39d0e69e94f67 100644 --- a/tsc/internal/checker/types_test.go +++ b/tsc/internal/checker/types_test.go @@ -369,7 +369,7 @@ func TestIntersectionReductionReentrancy(t *testing.T) { assert.Assert(t, c.freePropertyCounts.next != nil) workspace := c.freePropertyCounts conflicting := c.newSymbolEx(ast.SymbolFlagsProperty, "value", ast.CheckFlagsContainsPrivate) - outer.AsUnionOrIntersectionType().propertyCacheWithoutFunctionPropertyAugment.Set("value", conflicting) + outer.AsUnionOrIntersectionType().propertyCacheWithoutFunctionPropertyAugment.intern("value", conflicting) assert.Assert(t, c.somePropertyReducesToNever(outer)) assert.Equal(t, c.freePropertyCounts, workspace) for counts := c.freePropertyCounts; counts != nil; counts = counts.next { @@ -542,9 +542,9 @@ func TestUnionIntersectionPropertyCacheSharing(t *testing.T) { assert.Equal(t, c.getUnionOrIntersectionProperty(typ, name, !augmentedFirst), symbol) assert.Equal(t, c.getUnionOrIntersectionProperty(typ, name, augmentedFirst), symbol) } - assert.Equal(t, data.propertyCacheWithoutFunctionPropertyAugment.Len(), members.Len()) + assert.Equal(t, len(data.propertyCacheWithoutFunctionPropertyAugment.memoEntries), members.Len()) if !augmentedFirst { - assert.Assert(t, data.propertyCache == nil) + assert.Assert(t, data.propertyCache.isEmpty()) } runtime.GC() for name, symbol := range members.All() { @@ -572,25 +572,23 @@ func TestUnionIntersectionPropertyCacheModes(t *testing.T) { data := typ.AsUnionOrIntersectionType() assert.Assert(t, c.getUnionOrIntersectionProperty(typ, "missing", true) == nil) assert.Assert(t, c.getUnionOrIntersectionProperty(typ, "missing", false) == nil) - assert.Assert(t, data.propertyCache == nil) - assert.Assert(t, data.propertyCacheWithoutFunctionPropertyAugment == nil) - data.propertyCacheWithoutFunctionPropertyAugment = ast.NewSymbolTable() - data.propertyCache = ast.NewSymbolTable() + assert.Assert(t, data.propertyCache.isEmpty()) + assert.Assert(t, data.propertyCacheWithoutFunctionPropertyAugment.isEmpty()) for _, flags := range []ast.CheckFlags{ast.CheckFlagsReadPartial, ast.CheckFlagsWritePartial} { name := strconv.Itoa(int(flags)) partial := c.newSymbolEx(ast.SymbolFlagsProperty, name, flags) complete := c.newSymbol(ast.SymbolFlagsProperty, name) - data.propertyCacheWithoutFunctionPropertyAugment.Set(name, partial) + data.propertyCacheWithoutFunctionPropertyAugment.intern(name, partial) assert.Equal(t, c.getUnionOrIntersectionProperty(typ, name, true), partial) assert.Assert(t, c.getUnionOrIntersectionProperty(typ, name, false) == nil) assert.Equal(t, c.getPropertyOfUnionOrIntersectionType(typ, name, true) == nil, flags&ast.CheckFlagsReadPartial != 0) - data.propertyCache.Set(name, complete) + data.propertyCache.intern(name, complete) assert.Equal(t, c.getUnionOrIntersectionProperty(typ, name, false), complete) } nonAugmented := c.newSymbol(ast.SymbolFlagsProperty, "different") augmented := c.newSymbol(ast.SymbolFlagsProperty, "different") - data.propertyCacheWithoutFunctionPropertyAugment.Set("different", nonAugmented) - data.propertyCache.Set("different", augmented) + data.propertyCacheWithoutFunctionPropertyAugment.intern("different", nonAugmented) + data.propertyCache.intern("different", augmented) assert.Equal(t, c.getUnionOrIntersectionProperty(typ, "different", true), nonAugmented) assert.Equal(t, c.getUnionOrIntersectionProperty(typ, "different", false), augmented) }) @@ -653,28 +651,26 @@ func TestCompactTypeNodeLinksLayout(t *testing.T) { c, types := newCompositeTestChecker() var links TypeNodeLinks links.resolvedType.intern(types[0]) - assert.Assert(t, links.getOuterTypeParameters() == nil) + assert.Assert(t, links.getOuterTypeParameters(c) == nil) links.setOuterTypeParameters(c, nil) - assert.Assert(t, links.outerTypeParameters == nil) + assert.Assert(t, links.outerTypeParameters.memoValue == nil) links.setOuterTypeParameters(c, []*Type{}) - assert.Assert(t, links.getOuterTypeParameters() != nil) - assert.Equal(t, len(links.getOuterTypeParameters()), 0) - entry := links.outerTypeParameters + assert.Assert(t, links.getOuterTypeParameters(c) != nil) + assert.Equal(t, len(links.getOuterTypeParameters(c)), 0) list := slices.Clone(types) links.setOuterTypeParameters(c, list) - assert.Equal(t, links.outerTypeParameters, entry) - assert.Equal(t, links.getOuterTypeParameters()[0], types[0]) + assert.Equal(t, links.getOuterTypeParameters(c)[0], types[0]) list[0] = types[1] - assert.Equal(t, links.getOuterTypeParameters()[0], types[1]) + assert.Equal(t, links.getOuterTypeParameters(c)[0], types[1]) for range 1024 { var other TypeNodeLinks other.setOuterTypeParameters(c, types) } runtime.GC() - assert.Equal(t, links.getOuterTypeParameters()[0], types[1]) + assert.Equal(t, links.getOuterTypeParameters(c)[0], types[1]) assert.Equal(t, links.resolvedType.get(c), types[0]) links.setOuterTypeParameters(c, nil) - assert.Assert(t, links.getOuterTypeParameters() == nil) + assert.Assert(t, links.getOuterTypeParameters(c) == nil) assert.Equal(t, links.resolvedType.get(c), types[0]) runtime.KeepAlive(c) } @@ -696,7 +692,7 @@ func TestSignatureExtra(t *testing.T) { assert.Assert(t, sig.getComposite() == nil) assert.Assert(t, sig.getIsolatedSignatureType() == nil) assert.Assert(t, sig.getResolvedTypePredicate(c) == nil) - assert.Equal(t, sig.resolvedMinArgumentCount, int32(-1)) + assert.Equal(t, sig.resolvedMinArgumentCount.peek(), int32(-1)) sig.setTypeParameters(c, nil) sig.setThisParameter(c, nil) sig.setComposite(c, nil) diff --git a/tsc/internal/checker/utilities.go b/tsc/internal/checker/utilities.go index 0455ee60b3bee..51e3d2ee14357 100644 --- a/tsc/internal/checker/utilities.go +++ b/tsc/internal/checker/utilities.go @@ -487,7 +487,7 @@ func CompareTypes(t1, t2 *Type) int { // Here we know we have references to instantiations of the same type because we have matching targets. if r1.node == nil && r2.node == nil { // Non-deferred type references with the same target are sorted by their type argument lists. - if c := compareTypeLists(t1.AsTypeReference().resolvedTypeArguments, t2.AsTypeReference().resolvedTypeArguments); c != 0 { + if c := compareTypeLists(t1.AsTypeReference().resolvedTypeArguments.peek(), t2.AsTypeReference().resolvedTypeArguments.peek()); c != 0 { return c } } else { diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).errors.txt index 6e370b78d30f9..735d4e676a17d 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).errors.txt @@ -1,4 +1,4 @@ -b.ts(2,15): error TS2589: Type instantiation is excessively deep and possibly infinite. +a.ts(2,15): error TS2589: Type instantiation is excessively deep and possibly infinite. ==== lib.ts (0 errors) ==== @@ -9,15 +9,15 @@ b.ts(2,15): error TS2589: Type instantiation is excessively deep and possibly in export type Recur = N extends 0 ? S : Recur, `${S}_${S}`>; -==== a.ts (0 errors) ==== +==== a.ts (1 errors) ==== import { Recur } from "./lib"; export let a: Recur<5, "a">; + ~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. -==== b.ts (1 errors) ==== +==== b.ts (0 errors) ==== import { Recur } from "./lib"; export let b: Recur<5, "a">; - ~~~~~~~~~~~~~ -!!! error TS2589: Type instantiation is excessively deep and possibly infinite. ==== c.ts (0 errors) ==== class T { From 91a1880d265ce2bb9054d69ed25af585657a94f2 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 26 Oct 2026 02:40:36 -0700 Subject: [PATCH 061/194] Discard results derived from computations in progress MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When a computation re-enters one still in progress, everything computed from then until the outermost computation of the cycle finishes may have observed provisional state, such as an in-progress marker, a fallback for the circularity, members published before they were complete, or the early symbols of a table still being late bound. Caching those results made them depend on which computation happened to be requested first: computed from scratch, they would see the finished result of the cycle instead. Those results are now discarded once the cycle finishes, so they are recomputed when next requested. The computations in progress when the cycle was detected keep their fallbacks, as each reaches the same cycle when computed first. Results that define the identity of what they cache, such as declared types, instantiations, deferred type references, and the parts of synthetic symbols set when creating them, are kept so that no second, distinct result can exist. What a computation records before the cycle is detected goes with its results: a function expression marked as contextually checked would otherwise keep the parameter types the discard took away, and a call left marked as being resolved would deny its arguments a contextual type. Every kind of computation declares what re-entry means. By default it marks the cycle circular; kinds that detect re-entry through a resolution of their own, or that deliberately publish a partial result early, are listed explicitly so each can be examined on its own. Cycles are also detected where nothing re-entered before: - Probes that check whether a resolution is in progress and take another path, such as treating a mapped property as circular, open a cycle at the resolution they observed. Nothing fails: failing them like re-entrance reported circularities in code without any. - Resolving the members of a type, simplifying an indexed access, and contextually checking a function expression before its parameter types are assigned are resolutions on the stack, so observing them in progress is a cycle like any other. - The rest of a contextual check, inferring the return type and checking the signature, is a computation of its own. A call resolved again within it, as in circularReferenceInReturnType2, no longer caches types derived from the outer call's inference in progress. - Re-entering the variance measurement of a type in progress treats that type as related to any instantiation of itself, so results cached meanwhile are discarded too. The variances themselves are kept. Results stored outside memos are discarded with the rest: members resolved during the cycle, lazily filled member slots, spread types and the spread property symbols they are made from. Discarding only the spread types would recompute them from stale property symbols. Some errors, like excessive instantiation depth or overly complex unions, are reported at whatever node is being checked when they are first hit. Such a result is kept along with the errors it reported at the current node, and they are reported again at whichever node reuses it, as computing it there would have. Discarding the result instead and computing it again at every node made its cost proportional to the number of nodes reaching it: an instantiation hitting the depth limit and used from 16 declarations took 11.8s instead of 1.1s. Errors that belong to a declaration rather than the current node, such as circular constraints, are still reported once. Cycles, effects marks, alias resolution, type parameter defaults and variance measurement all need to rerun or abandon work from some point. They share one discard log and one notion of a discard mark, rather than each saving and restoring the same state by hand. The spread cycle test settles on complete types, and the recursive indexed access test now agrees in every check order. The late-bound members test loses its duplicate identifier errors for now: a computed name that looks up its own interface re-enters late binding, which discards the merge it observed, until late-bound members are combined without re-entering their resolution. The tests of contextual checks in discarded cycles are added here, since they rely on these discards. │ before.txt │ after.txt │ │ sec/op │ sec/op vs base │ Compiler 2.445 ± 1% 2.495 ± 2% +2.04% (p=0.003 n=10) │ before.txt │ after.txt │ │ peak-RSS-bytes │ peak-RSS-bytes vs base │ Compiler 358.8Mi ± 6% 359.1Mi ± 4% ~ (p=1.000 n=10) --- packages/typescript/enums/objectFlags.d.ts | 1 + tsc/internal/api/enum_values_generated.go | 1 + tsc/internal/checker/checker.go | 450 ++++++++++++++---- tsc/internal/checker/checker_test.go | 1 + tsc/internal/checker/inference.go | 2 +- tsc/internal/checker/memo.go | 386 ++++++++++++++- tsc/internal/checker/relater.go | 18 +- tsc/internal/checker/resolutions.go | 13 +- tsc/internal/checker/types.go | 20 + ...larDefaults(checkorder=default).errors.txt | 5 +- ...CircularDefaults(checkorder=default).types | 2 +- ...arDefaults(checkorder=isolated).errors.txt | 18 + ...larDefaults(checkorder=reverse).errors.txt | 5 +- ...CircularDefaults(checkorder=reverse).types | 2 +- ...oundMembers(checkorder=default).errors.txt | 22 - ...teBoundMembers(checkorder=default).symbols | 6 +- ...undMembers(checkorder=isolated).errors.txt | 22 - ...eBoundMembers(checkorder=isolated).symbols | 6 +- ...oundMembers(checkorder=reverse).errors.txt | 22 - ...teBoundMembers(checkorder=reverse).symbols | 6 +- ...dMembers(checkorder=typesfirst).errors.txt | 22 - ...oundMembers(checkorder=typesfirst).symbols | 6 +- ...eckOrderSpreadCycle(checkorder=default).js | 16 +- ...derSpreadCycle(checkorder=default).symbols | 2 - ...OrderSpreadCycle(checkorder=default).types | 50 +- ...ckOrderSpreadCycle(checkorder=isolated).js | 16 +- ...erSpreadCycle(checkorder=isolated).symbols | 2 - ...rderSpreadCycle(checkorder=isolated).types | 50 +- ...eckOrderSpreadCycle(checkorder=reverse).js | 16 +- ...derSpreadCycle(checkorder=reverse).symbols | 2 - ...OrderSpreadCycle(checkorder=reverse).types | 50 +- ...OrderSpreadCycle(checkorder=typesfirst).js | 16 +- ...SpreadCycle(checkorder=typesfirst).symbols | 2 - ...erSpreadCycle(checkorder=typesfirst).types | 50 +- ...ationErrors(checkorder=default).errors.txt | 13 +- ...ationErrors(checkorder=reverse).errors.txt | 13 +- ...onErrors(checkorder=typesfirst).errors.txt | 13 +- ...orAnnotations(checkorder=typesfirst).types | 8 +- ...larIndexedPropertyInstantiation.errors.txt | 5 +- ...TypeNoCrash(checkorder=default).errors.txt | 5 +- ...eNoCrash(checkorder=typesfirst).errors.txt | 5 +- .../circularReferenceInReturnType2.types | 8 +- .../contextualCheckInDiscardedCycle.symbols | 150 ++++++ .../contextualCheckInDiscardedCycle.types | 117 +++++ ...textualCheckReentryAfterParameters.symbols | 181 +++++++ ...ontextualCheckReentryAfterParameters.types | 190 ++++++++ .../contextualReturnTypeInSpreadArgument.js | 36 ++ ...ntextualReturnTypeInSpreadArgument.symbols | 59 +++ ...contextualReturnTypeInSpreadArgument.types | 63 +++ ...nalModuleContainerIndexDeclarationOrder.js | 2 + ...ModuleContainerIndexDeclarationOrder.types | 4 +- .../duplicateIdentifierChecks.errors.txt | 29 +- .../duplicateIdentifierChecks.symbols | 22 +- .../compiler/dynamicNamesErrors.errors.txt | 8 +- .../compiler/dynamicNamesErrors.symbols | 4 +- ...andoIndexedAssignmentDiagnostic.errors.txt | 5 +- ...enericExtendingClassDoubleLayer.errors.txt | 5 +- ...tantiations(checkorder=default).errors.txt | 5 +- ...tiations(checkorder=typesfirst).errors.txt | 5 +- ...embersResolutionOrderExportStar.errors.txt | 64 --- ...mespaceMembersResolutionOrderExportStar.js | 25 +- ...ceMembersResolutionOrderExportStar.symbols | 4 - ...paceMembersResolutionOrderExportStar.types | 118 ++--- ...ationEmitExportEqualsQualifiedNameOrder.js | 2 + ...onEmitExportEqualsQualifiedNameOrder.types | 4 +- ...onEmitExternalModuleContainerIndexOrder.js | 2 + ...mitExternalModuleContainerIndexOrder.types | 4 +- ...mitLateBoundIndexSignatureSiblingsOrder.js | 2 + ...LateBoundIndexSignatureSiblingsOrder.types | 4 +- ...oFlakyDeclarationEmitRenamedExportOrder.js | 2 + ...akyDeclarationEmitRenamedExportOrder.types | 4 +- ...oFlakyDeclarationEmitSharedCheckerOrder.js | 56 ++- ...yDeclarationEmitSharedCheckerOrder.symbols | 2 - ...akyDeclarationEmitSharedCheckerOrder.types | 56 +-- ...akyDeclarationEmitUmdGlobalAliasesOrder.js | 2 + ...DeclarationEmitUmdGlobalAliasesOrder.types | 4 +- ...larationEmitVariableMatchesInScopeOrder.js | 2 + ...ationEmitVariableMatchesInScopeOrder.types | 4 +- ...nosticsExportStarCollisionOrder.errors.txt | 4 +- ...yDiagnosticsExportStarCollisionOrder.types | 2 +- ...rtStarDeclarationCollisionOrder.errors.txt | 4 +- ...sExportStarDeclarationCollisionOrder.types | 2 +- ...NamespaceMembersResolutionOrder.errors.txt | 61 --- ...gnosticsNamespaceMembersResolutionOrder.js | 25 +- ...icsNamespaceMembersResolutionOrder.symbols | 4 - ...sticsNamespaceMembersResolutionOrder.types | 118 ++--- ...sResolutionOrderReexportedTypes.errors.txt | 77 --- ...ceMembersResolutionOrderReexportedTypes.js | 25 +- ...bersResolutionOrderReexportedTypes.symbols | 4 - ...embersResolutionOrderReexportedTypes.types | 130 ++--- ...agnosticsNonExportedMemberOrder.errors.txt | 4 +- ...akyDiagnosticsNonExportedMemberOrder.types | 2 +- ...qualsWithOtherExportsCheckOrder.errors.txt | 5 +- ...rtEqualsWithOtherExportsCheckOrder.symbols | 2 + ...portEqualsWithOtherExportsCheckOrder.types | 4 +- ...ExportEqualsWithOtherExportsImportOrder.js | 2 + ...ortEqualsWithOtherExportsImportOrder.types | 4 +- ...ectionBase(checkorder=default).errors.txt} | 0 ...ersectionBase(checkorder=default).symbols} | 0 ...ntersectionBase(checkorder=default).types} | 0 ...tionBase(checkorder=typesfirst).errors.txt | 24 + ...sectionBase(checkorder=typesfirst).symbols | 51 ++ ...ersectionBase(checkorder=typesfirst).types | 42 ++ ...ssiveLength(checkorder=default).errors.txt | 35 +- ...veLength(checkorder=typesfirst).errors.txt | 20 +- .../compiler/varianceCycleCachedResults.types | 10 +- .../recursiveMappedTypes.errors.txt | 8 +- ...s2015,usedefineforclassfields=false).types | 6 +- ...es2015,usedefineforclassfields=true).types | 6 +- .../templateLiteralTypes1.errors.txt | 13 +- .../contextualCheckInDiscardedCycle.ts | 39 ++ .../contextualCheckReentryAfterParameters.ts | 41 ++ .../contextualReturnTypeInSpreadArgument.ts | 18 + .../sharedMemberLayoutThisIntersectionBase.ts | 1 + 114 files changed, 2442 insertions(+), 975 deletions(-) create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=isolated).errors.txt delete mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).errors.txt delete mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).errors.txt delete mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).errors.txt delete mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/contextualCheckInDiscardedCycle.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/contextualCheckInDiscardedCycle.types create mode 100644 tsc/testdata/baselines/reference/compiler/contextualCheckReentryAfterParameters.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/contextualCheckReentryAfterParameters.types create mode 100644 tsc/testdata/baselines/reference/compiler/contextualReturnTypeInSpreadArgument.js create mode 100644 tsc/testdata/baselines/reference/compiler/contextualReturnTypeInSpreadArgument.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/contextualReturnTypeInSpreadArgument.types delete mode 100644 tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.errors.txt delete mode 100644 tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.errors.txt delete mode 100644 tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.errors.txt rename tsc/testdata/baselines/reference/compiler/{sharedMemberLayoutThisIntersectionBase.errors.txt => sharedMemberLayoutThisIntersectionBase(checkorder=default).errors.txt} (100%) rename tsc/testdata/baselines/reference/compiler/{sharedMemberLayoutThisIntersectionBase.symbols => sharedMemberLayoutThisIntersectionBase(checkorder=default).symbols} (100%) rename tsc/testdata/baselines/reference/compiler/{sharedMemberLayoutThisIntersectionBase.types => sharedMemberLayoutThisIntersectionBase(checkorder=default).types} (100%) create mode 100644 tsc/testdata/baselines/reference/compiler/sharedMemberLayoutThisIntersectionBase(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/sharedMemberLayoutThisIntersectionBase(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/sharedMemberLayoutThisIntersectionBase(checkorder=typesfirst).types create mode 100644 tsc/testdata/tests/cases/compiler/contextualCheckInDiscardedCycle.ts create mode 100644 tsc/testdata/tests/cases/compiler/contextualCheckReentryAfterParameters.ts create mode 100644 tsc/testdata/tests/cases/compiler/contextualReturnTypeInSpreadArgument.ts diff --git a/packages/typescript/enums/objectFlags.d.ts b/packages/typescript/enums/objectFlags.d.ts index 1b0a911b1a531..125a99aacae47 100644 --- a/packages/typescript/enums/objectFlags.d.ts +++ b/packages/typescript/enums/objectFlags.d.ts @@ -24,6 +24,7 @@ export declare enum ObjectFlags { CouldContainTypeVariablesComputed = 1 << 19, CouldContainTypeVariables = 1 << 20, MembersResolved = 1 << 21, + MembersResolving = 1 << 30, ClassOrInterface = Class | Interface, RequiresWidening = ContainsWideningType | ContainsObjectOrArrayLiteral, PropagatingFlags = ContainsWideningType | ContainsObjectOrArrayLiteral | NonInferrableType, diff --git a/tsc/internal/api/enum_values_generated.go b/tsc/internal/api/enum_values_generated.go index b223dab0403fb..6627b0d2f5f78 100644 --- a/tsc/internal/api/enum_values_generated.go +++ b/tsc/internal/api/enum_values_generated.go @@ -232,6 +232,7 @@ func main() { "CouldContainTypeVariablesComputed": toInt32(checker.ObjectFlagsCouldContainTypeVariablesComputed), "CouldContainTypeVariables": toInt32(checker.ObjectFlagsCouldContainTypeVariables), "MembersResolved": toInt32(checker.ObjectFlagsMembersResolved), + "MembersResolving": toInt32(checker.ObjectFlagsMembersResolving), "ClassOrInterface": toInt32(checker.ObjectFlagsClassOrInterface), "RequiresWidening": toInt32(checker.ObjectFlagsRequiresWidening), "PropagatingFlags": toInt32(checker.ObjectFlagsPropagatingFlags), diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index cc26fcd30be7c..b790cff459ae7 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -66,6 +66,12 @@ const ( TypeSystemPropertyNameInitializerIsUndefined TypeSystemPropertyNameAliasTarget TypeSystemPropertyNameComputedPropertyName + TypeSystemPropertyNameContextChecked + TypeSystemPropertyNameVariances + TypeSystemPropertyNameStructuredMembers + TypeSystemPropertyNameCurrentNode + TypeSystemPropertyNameSimplifiedForReading + TypeSystemPropertyNameSimplifiedForWriting ) type TypeResolution struct { @@ -556,6 +562,7 @@ type WideningContext struct { type VarianceStackEntry struct { symbol *ast.Symbol typeParameters []*Type + resolution int // Index in Checker.resolutions of the resolution of the measurement } type ResolvingObjectType struct { @@ -613,6 +620,8 @@ type Checker struct { inlineLevel int serializationLevel int currentNode *ast.Node + simplifyingIndexedAccess collections.Set[CachedTypeKey] + currentNodeResolution int // 1-based index in resolutions of the resolution of currentNode, or 0; see enterCurrentNode varianceTypeParameter *Type isInferencePartiallyBlocked bool wasCanceled bool @@ -654,9 +663,16 @@ type Checker struct { restrictiveMapper *TypeMapper permissiveMapper *TypeMapper contextualBindingPatterns []*ast.Node - resolving map[memoKey]int32 // Index in resolutions of the outermost computation of each key in progress - typeResolutionTop int // 1-based index in resolutions of the innermost resolution, or 0 - resolutionStart int // Index in resolutions below which resolutions are not searched for cycles + resolving map[memoKey]int32 // Index in resolutions of the outermost computation of each key in progress + typeResolutionTop int // 1-based index in resolutions of the innermost resolution, or 0 + resolutionStart int // Index in resolutions below which resolutions are not searched for cycles + circularityStart int // 1-based index in resolutions of the outermost cycle in progress, or 0; see memo.go + currentNodeErrors []*currentNodeError // Errors reported at the current node while collecting; see startCurrentNodeErrors + currentNodeErrorCollectors int // Number of computations collecting currentNodeErrors + currentNodeErrorsCyclic bool // Whether a cycle was observed while collecting currentNodeErrors; see endCurrentNodeErrors + discardLog []discardEntry // Restores what was cached while anything may be discarded; see "Discard log" in memo.go + circularityMark int // Length of discard log when the cycle in progress was detected + cycleParticipants []TypeResolution // Computations that observed a cycle in progress varianceStack []VarianceStackEntry varianceMeasuring map[*ast.Symbol]int // Symbols whose variances are being measured, including by suspended computations callResolutionStack []*ast.Node @@ -671,6 +687,7 @@ type Checker struct { freeinferenceState *InferenceState freeFlowState *FlowState flowLoopStack []FlowLoopInfo + signaturesResolving []*SignatureLinks // Calls whose resolution is in progress sharedFlows []SharedFlow flowLoopFrameCount uint64 antecedentTypes []*Type @@ -990,6 +1007,7 @@ type memoStore struct { deferredDiagnosticCallbacks []func(c *Checker) memoStates map[memoKey]*memoState // Memo state of results computed by queries; see memo.go memoPendingCount int // Number of memoStates with unreplayed effects + memoErrorStates int // Number of memoStates with reports; see setReported mu sync.Mutex } @@ -2422,14 +2440,13 @@ func (c *Checker) checkSourceElements(nodes []*ast.Node) { func (c *Checker) checkSourceElement(node *ast.Node) bool { if node != nil { - saveCurrentNode := c.currentNode + saveCurrentNode := c.enterCurrentNode(node) saveWithinUnreachableCode := c.withinUnreachableCode - c.currentNode = node c.instantiationCount = 0 c.beginResolution(0, nil, 0) c.checkSourceElementWorker(node) c.endResolution() - c.currentNode = saveCurrentNode + c.exitCurrentNode(saveCurrentNode) c.withinUnreachableCode = saveWithinUnreachableCode } return false @@ -2667,8 +2684,7 @@ func (c *Checker) checkDeferredNode(node *ast.Node) { if tr := c.tracer; tr != nil { defer tr.Push(tracing.PhaseCheck, "checkDeferredNode", map[string]any{"kind": node.Kind, "pos": node.Pos(), "end": node.End(), "path": ast.GetSourceFileOfNode(node).FileName()}, false)() } - saveCurrentNode := c.currentNode - c.currentNode = node + saveCurrentNode := c.enterCurrentNode(node) c.instantiationCount = 0 c.beginResolution(0, nil, 0) switch node.Kind { @@ -2700,7 +2716,7 @@ func (c *Checker) checkDeferredNode(node *ast.Node) { c.checkContextualDeprecations(node) } c.endResolution() - c.currentNode = saveCurrentNode + c.exitCurrentNode(saveCurrentNode) } func (c *Checker) checkJSDocComments(node *ast.Node) { @@ -5691,7 +5707,7 @@ func (c *Checker) checkImportAttributesExpression(node *ast.Node) *Type { members := ast.NewSymbolTable() for _, attribute := range node.AsImportAttributes().Attributes.Nodes { member := c.newSymbol(ast.SymbolFlagsProperty, attribute.Name().Text()) - c.valueSymbolLinks.Get(member).resolvedType.set(c, c.getRegularTypeOfLiteralType(c.checkExpressionCached(attribute.AsImportAttribute().Value))) + c.valueSymbolLinks.Get(member).resolvedType.setIdentity(c, c.getRegularTypeOfLiteralType(c.checkExpressionCached(attribute.AsImportAttribute().Value))) members.Set(member.Name(), member) } t := c.newAnonymousType(symbol, members, nil, nil, nil) @@ -7914,8 +7930,7 @@ func (c *Checker) checkExpressionEx(node *ast.Node, checkMode CheckMode) *Type { if tr := c.tracer; tr != nil { defer tr.Push(tracing.PhaseCheck, "checkExpression", map[string]any{"kind": node.Kind, "pos": node.Pos(), "end": node.End(), "path": ast.GetSourceFileOfNode(node).FileName()}, false)() } - saveCurrentNode := c.currentNode - c.currentNode = node + saveCurrentNode := c.enterCurrentNode(node) c.instantiationCount = 0 c.beginResolution(0, nil, 0) uninstantiatedType := c.checkExpressionWorker(node, checkMode) @@ -7924,7 +7939,7 @@ func (c *Checker) checkExpressionEx(node *ast.Node, checkMode CheckMode) *Type { c.checkConstEnumAccess(node, t) } c.endResolution() - c.currentNode = saveCurrentNode + c.exitCurrentNode(saveCurrentNode) return t } @@ -8823,8 +8838,7 @@ func (c *Checker) getResolvedSignature(node *ast.Node, candidatesOutArray *[]*Si // Resolution is located at the call however it was requested, such as // from contextually typing an argument, so that errors it reports at the // current node do not depend on which was checked first. - saveCurrentNode := c.currentNode - c.currentNode = node + saveCurrentNode := c.enterCurrentNode(node) var result *Signature if c.memoActive() { c.signatureLinks.Get(node).resolvedSignature.begin(c) @@ -8833,7 +8847,7 @@ func (c *Checker) getResolvedSignature(node *ast.Node, candidatesOutArray *[]*Si } else { result = c.getResolvedSignatureUncached(node, candidatesOutArray, checkMode) } - c.currentNode = saveCurrentNode + c.exitCurrentNode(saveCurrentNode) return result } @@ -8872,7 +8886,9 @@ func (c *Checker) getResolvedSignatureUncached(node *ast.Node, candidatesOutArra c.resolutionStart = len(c.resolutions) } links.resolvedSignature.swap(c.resolvingSignature) + c.signaturesResolving = append(c.signaturesResolving, links) result := c.resolveSignature(node, candidatesOutArray, checkMode) + c.signaturesResolving = c.signaturesResolving[:len(c.signaturesResolving)-1] c.resolutionStart = saveResolutionStart // When CheckMode.SkipGenericFunctions is set we use resolvingSignature to indicate that call // resolution should be deferred. @@ -8889,7 +8905,7 @@ func (c *Checker) getResolvedSignatureUncached(node *ast.Node, candidatesOutArra // assigned type in a flow assignment) we don't cache the result as it may be based on temporary // types from the control flow analysis. if len(c.flowLoopStack) == 0 { - links.resolvedSignature.set(c, result) + c.setResolvedSignature(links, result) } else { links.resolvedSignature.swap(cached) } @@ -8897,6 +8913,17 @@ func (c *Checker) getResolvedSignatureUncached(node *ast.Node, candidatesOutArra return result } +// setResolvedSignature caches the signature a call resolves to, in place of +// the marker of its resolution, which is only restored while the resolution +// is still in progress. +func (c *Checker) setResolvedSignature(links *SignatureLinks, signature *Signature) { + setAfterMarker(c, &links.resolvedSignature, signature, links, isStaleSignatureMarker) +} + +func isStaleSignatureMarker(c *Checker, links *SignatureLinks, s *Signature) bool { + return s == c.resolvingSignature && !slices.Contains(c.signaturesResolving, links) +} + func (c *Checker) resolveSignature(node *ast.Node, candidatesOutArray *[]*Signature, checkMode CheckMode) *Signature { switch node.Kind { case ast.KindCallExpression: @@ -10637,10 +10664,18 @@ func (c *Checker) contextuallyCheckFunctionExpressionOrObjectLiteralMethodUncach setFlagMemoBits(c, memoKeyOf(node, memoContextChecked), &links.flags, NodeCheckFlagsSignatureContextChecked, NodeCheckFlagsSignatureContextChecked) signature := c.getSignatureFromDeclarationUncontextual(node) contextualSignature := c.getContextualSignature(node) - if contextualSignature != nil && c.getReturnTypeFromAnnotation(node) == nil && signature.resolvedReturnType.get(c) == nil { + // The return type is inferred now, while the contextual types of the + // function's enclosing expressions are in place; a later request may + // come from where they are not. + if contextualSignature != nil && checkMode&^CheckModeTypeOnly == CheckModeNormal && c.getReturnTypeFromAnnotation(node) == nil && !c.isResolvingReturnTypeOfSignature(signature) { + c.getReturnTypeOfSignature(signature) + } else if contextualSignature != nil && c.getReturnTypeFromAnnotation(node) == nil && signature.resolvedReturnType.get(c) == nil && !c.isResolvingReturnTypeOfSignature(signature) && c.pushTypeResolution(signature, TypeSystemPropertyNameResolvedReturnType) { // resolvedReturnType is cached indefinitely, so the return type here has to be computed without CheckModeSkipContextSensitive; // otherwise anyFunctionType could leak as part of the computed (and cached) return type. returnType := c.getReturnTypeFromBody(node, checkMode&^CheckModeSkipContextSensitive) + if !c.popTypeResolution() { + returnType = c.circularReturnType(signature) + } if signature.resolvedReturnType.get(c) == nil { signature.resolvedReturnType.set(c, returnType) } @@ -10669,6 +10704,7 @@ func (c *Checker) assignContextualParameterTypesOfFunctionUncached(node *ast.Nod if links.flags&NodeCheckFlagsContextChecked == 0 { setFlagMemoBits(c, memoKeyOf(node, memoContextualParameters), &links.flags, NodeCheckFlagsContextChecked, NodeCheckFlagsContextChecked) signature := c.getSignatureFromDeclarationUncontextual(node) + c.pushTypeResolution(node, TypeSystemPropertyNameContextChecked) if c.isContextSensitive(node) { if contextualSignature != nil { inferenceContext := c.getInferenceContext(node) @@ -10698,8 +10734,11 @@ func (c *Checker) assignContextualParameterTypesOfFunctionUncached(node *ast.Nod c.inferFromAnnotatedParametersAndReturn(signature, contextualSignature, inferenceContext) } } + c.popTypeResolution() + return } } + c.observeResolutionInProgress(node, TypeSystemPropertyNameContextChecked) } func (c *Checker) checkFunctionExpressionOrObjectLiteralMethodDeferred(node *ast.Node) { @@ -10854,6 +10893,9 @@ func (c *Checker) assignContextualParameterTypes(sig *Signature, context *Signat // This signature has already has a contextual inference performed and cached on it return } + if c.logResults() { + c.logFlagMemoDiscard(func() { sig.setTypeParameters(c, nil) }) + } sig.setTypeParameters(c, context.TypeParameters()) } if context.ThisParameter() != nil { @@ -13830,7 +13872,7 @@ func (c *Checker) checkObjectLiteral(node *ast.Node, checkMode CheckMode) *Type prop.SetDeclarations(member.Declarations()) prop.SetParent(member.Parent()) prop.SetValueDeclaration(member.ValueDeclaration()) - links.resolvedType.set(c, t) + links.resolvedType.setIdentity(c, t) links.target = member member = prop if allPropertiesTable != nil { @@ -14073,15 +14115,15 @@ func (c *Checker) getSpreadType(left *Type, right *Type, symbol *ast.Symbol, obj leftTypeWithoutUndefined := c.removeMissingOrUndefinedType(leftType) rightTypeWithoutUndefined := c.removeMissingOrUndefinedType(rightType) if leftTypeWithoutUndefined == rightTypeWithoutUndefined { - links.resolvedType.set(c, leftType) + links.resolvedType.setIdentity(c, leftType) } else { - links.resolvedType.set(c, c.getUnionTypeEx([]*Type{leftType, rightTypeWithoutUndefined}, UnionReductionSubtype, nil, nil)) + links.resolvedType.setIdentity(c, c.getUnionTypeEx([]*Type{leftType, rightTypeWithoutUndefined}, UnionReductionSubtype, nil, nil)) } c.spreadLinks.Get(result).leftSpread = leftProp c.spreadLinks.Get(result).rightSpread = rightProp result.SetDeclarations(declarations) links.setNameType(c, c.valueSymbolLinks.Get(leftProp).getNameType()) - c.spreadSymbols.intern(key, result) + c.spreadSymbols.set(c, key, result) members.Set(leftProp.Name(), result) } } else { @@ -14096,13 +14138,13 @@ func (c *Checker) getSpreadType(left *Type, right *Type, symbol *ast.Symbol, obj // overrides every property of the left side. contentKey := c.getObjectTypeContentKey(symbol, flags, members, spreadIndexInfos) if existing, _ := c.objectContentTypes.get(c, contentKey); existing != nil { - c.spreadTypes.intern(key, existing) + c.spreadTypes.set(c, key, existing) return existing } spread := c.newAnonymousType(symbol, members, nil, nil, spreadIndexInfos) spread.objectFlags |= flags c.objectContentTypes.intern(contentKey, spread) - c.spreadTypes.intern(key, spread) + c.spreadTypes.set(c, key, spread) return spread } @@ -14173,9 +14215,9 @@ func (c *Checker) tryMergeUnionOfObjectTypeAndEmptyObject(t *Type, readonly bool result := c.newSymbolEx(flags, prop.Name(), prop.CheckFlags()&ast.CheckFlagsLate|core.IfElse(readonly, ast.CheckFlagsReadonly, 0)) links := c.valueSymbolLinks.Get(result) if isSetonlyAccessor { - links.resolvedType.set(c, c.undefinedType) + links.resolvedType.setIdentity(c, c.undefinedType) } else { - links.resolvedType.set(c, c.addOptionalityEx(c.getTypeOfSymbol(prop), true /*isProperty*/, true /*isOptional*/)) + links.resolvedType.setIdentity(c, c.addOptionalityEx(c.getTypeOfSymbol(prop), true /*isProperty*/, true /*isOptional*/)) } result.SetDeclarations(prop.Declarations()) links.setNameType(c, c.valueSymbolLinks.Get(prop).getNameType()) @@ -14207,14 +14249,14 @@ func (c *Checker) getSpreadSymbol(prop *ast.Symbol, readonly bool) *ast.Symbol { result := c.newSymbolEx(flags, prop.Name(), prop.CheckFlags()&ast.CheckFlagsLate|core.IfElse(readonly, ast.CheckFlagsReadonly, 0)) links := c.valueSymbolLinks.Get(result) if isSetonlyAccessor { - links.resolvedType.set(c, c.undefinedType) + links.resolvedType.setIdentity(c, c.undefinedType) } else { - links.resolvedType.set(c, c.getTypeOfSymbol(prop)) + links.resolvedType.setIdentity(c, c.getTypeOfSymbol(prop)) } result.SetDeclarations(prop.Declarations()) links.setNameType(c, c.valueSymbolLinks.Get(prop).getNameType()) c.mappedSymbolLinks.Get(result).syntheticOrigin = prop - c.spreadSymbols.intern(key, result) + c.spreadSymbols.set(c, key, result) return result } @@ -14722,7 +14764,26 @@ func (c *Checker) errorAtCurrentNode(message *diagnostics.Message, args ...any) c.reportAtCurrentNode(func(c *Checker, node *ast.Node) { c.error(node, message, args...) }) } +// reportAtCurrentNode reports an error located at whichever node's check +// reached it, so that every node reaching it reports it, as it would if it +// were checked first. Results cached from now until the current node is left +// were computed for that node, and are discarded so that other nodes +// compute them again. func (c *Checker) reportAtCurrentNode(report func(c *Checker, node *ast.Node)) { + c.reportNode(¤tNodeError{report}) +} + +func (c *Checker) reportNode(r *currentNodeError) { + c.markCurrentNodeCircular() + if c.currentNodeErrorCollectors != 0 { + c.currentNodeErrors = append(c.currentNodeErrors, r) + } + c.reportAtCurrentNodeOnce(r.report) +} + +// reportAtCurrentNodeOnce is reportAtCurrentNode for an error whose result +// is kept, so that only the node reaching it first reports it. +func (c *Checker) reportAtCurrentNodeOnce(report func(c *Checker, node *ast.Node)) { if !c.checking { // A node the computation started at is where the computation was // requested from, so it is located wherever the result is reused. @@ -14824,13 +14885,13 @@ func (c *Checker) newSymbolEx(flags ast.SymbolFlags, name string, checkFlags ast func (c *Checker) newParameter(name string, t *Type) *ast.Symbol { symbol := c.newSymbol(ast.SymbolFlagsFunctionScopedVariable, name) - c.valueSymbolLinks.Get(symbol).resolvedType.set(c, t) + c.valueSymbolLinks.Get(symbol).resolvedType.setIdentity(c, t) return symbol } func (c *Checker) newProperty(name string, t *Type) *ast.Symbol { symbol := c.newSymbol(ast.SymbolFlagsProperty, name) - c.valueSymbolLinks.Get(symbol).resolvedType.set(c, t) + c.valueSymbolLinks.Get(symbol).resolvedType.setIdentity(c, t) return symbol } @@ -16623,7 +16684,7 @@ func (c *Checker) getTypeWithSyntheticDefaultImportType(t *Type, symbol *ast.Sym anonymousSymbol := c.newSymbol(ast.SymbolFlagsTypeLiteral, ast.InternalSymbolNameType) anonymousSymbol.SetDeclarations(originalSymbol.Declarations()) defaultContainingObject := c.createDefaultPropertyWrapperForModule(symbol, originalSymbol, anonymousSymbol) - c.valueSymbolLinks.Get(anonymousSymbol).resolvedType.set(c, defaultContainingObject) + c.valueSymbolLinks.Get(anonymousSymbol).resolvedType.setIdentity(c, defaultContainingObject) if c.isValidSpreadType(t) { syntheticType = c.getSpreadType(t, defaultContainingObject, anonymousSymbol, 0 /*objectFlags*/, false /*readonly*/) } else { @@ -16696,7 +16757,7 @@ func (c *Checker) cloneTypeAsModuleType(symbol *ast.Symbol, moduleType *Type, re links.target = symbol links.originatingImport = referenceParent resolvedModuleType := c.resolveStructuredTypeMembers(moduleType) - c.valueSymbolLinks.Get(result).resolvedType.set(c, c.newAnonymousType(result, resolvedModuleType.getMembers(c), nil, nil, resolvedModuleType.getIndexInfos())) + c.valueSymbolLinks.Get(result).resolvedType.setIdentity(c, c.newAnonymousType(result, resolvedModuleType.getMembers(c), nil, nil, resolvedModuleType.getIndexInfos())) return result } @@ -17882,7 +17943,7 @@ func (c *Checker) padObjectLiteralType(t *Type, pattern *ast.Node) *Type { symbol, _ := c.paddedProperties.get(c, key) if symbol == nil { symbol = c.newSymbol(ast.SymbolFlagsProperty|ast.SymbolFlagsOptional, name) - c.valueSymbolLinks.Get(symbol).resolvedType.set(c, propType) + c.valueSymbolLinks.Get(symbol).resolvedType.setIdentity(c, propType) c.paddedProperties.intern(key, symbol) } members.Set(symbol.Name(), symbol) @@ -18390,7 +18451,7 @@ func (c *Checker) getDeclaredTypeOfClassOrInterface(symbol *ast.Symbol) *Type { if links.declaredType.get(c) == nil { kind := core.IfElse(symbol.Flags()&ast.SymbolFlagsClass != 0, ObjectFlagsClass, ObjectFlagsInterface) t := c.newObjectType(kind, symbol) - links.declaredType.set(c, t) + links.declaredType.setIdentity(c, t) outerTypeParameters := c.getOuterTypeParametersOfClassOrInterface(symbol) typeParameters := c.appendLocalTypeParametersOfClassOrInterfaceOrTypeAlias(outerTypeParameters, symbol) // A class or interface is generic if it has type parameters or a "this" type. We always give classes a "this" type @@ -19079,7 +19140,7 @@ func (c *Checker) getTypeFromObjectBindingPattern(pattern *ast.Node, includePatt text := getPropertyNameFromType(exprType) flags := ast.SymbolFlagsProperty | core.IfElse(e.Initializer() != nil, ast.SymbolFlagsOptional, 0) symbol := c.newSymbol(flags, text) - c.valueSymbolLinks.Get(symbol).resolvedType.set(c, c.getTypeFromBindingElement(e, includePatternInType, reportErrors)) + c.valueSymbolLinks.Get(symbol).resolvedType.setIdentity(c, c.getTypeFromBindingElement(e, includePatternInType, reportErrors)) members.Set(symbol.Name(), symbol) } var indexInfos []*IndexInfo @@ -19953,21 +20014,102 @@ func (c *Checker) getCombinedModifierFlagsCached(node *ast.Node) ast.ModifierFla func (c *Checker) pushTypeResolution(target TypeSystemEntity, propertyName TypeSystemPropertyName) bool { resolutionCycleStartIndex := c.findResolutionCycleStartIndex(target, propertyName) if resolutionCycleStartIndex >= 0 { - // A cycle was found - for i := resolutionCycleStartIndex; i < len(c.resolutions); i++ { - if c.resolutions[i].isTypeResolution { - c.resolutions[i].typeResolution.result = false - } - } - if !c.checking { - c.memoCycle(int(c.resolutions[resolutionCycleStartIndex].prevMemo)) - } + c.markResolutionCycle(resolutionCycleStartIndex) return false } c.beginTypeResolution(target, propertyName) return true } +// markResolutionCycle records that the type resolution entries from start to +// the top of the stack form a cycle, so each of them fails. +func (c *Checker) markResolutionCycle(start int) { + for i := start; i < len(c.resolutions); i++ { + if r := &c.resolutions[i].typeResolution; c.resolutions[i].isTypeResolution && r.result { + c.cycleParticipants = append(c.cycleParticipants, *r) + r.result = false + } + } + c.markTypeResolutionCircular(start) +} + +// observeResolutionInProgress is for computations that are skipped rather +// than failed when re-entered. Skipping still observes the incomplete +// computation, so everything on the stack since it started is in a cycle. +func (c *Checker) observeResolutionInProgress(target TypeSystemEntity, propertyName TypeSystemPropertyName) { + if start := c.findResolutionCycleStartIndex(target, propertyName); start >= 0 { + c.markResolutionCycle(start) + } +} + +// isResolutionInProgress reports whether a resolution is on the stack, for +// computations that deliberately take another path to avoid a circularity. +// The answer depends on the incomplete resolution, so results cached while it +// is in progress must not outlive it, but nothing fails. +func (c *Checker) isResolutionInProgress(target TypeSystemEntity, propertyName TypeSystemPropertyName) bool { + start := c.findResolutionCycleStartIndex(target, propertyName) + if start < 0 { + return false + } + c.markTypeResolutionCircular(start) + return true +} + +// enterCurrentNode makes node the node being checked, until the matching +// exitCurrentNode. Its type resolution delimits the results that errors +// located at node (see reportAtCurrentNode) depend on. +func (c *Checker) enterCurrentNode(node *ast.Node) savedCurrentNode { + save := savedCurrentNode{node: c.currentNode, resolution: c.currentNodeResolution} + if c.circularityStart != 0 && c.circularityStart == c.currentNodeResolution && c.typeResolutionTop == c.currentNodeResolution { + // The results discarded when the current node is left depend on errors + // located at it, so a node within it must not reuse them either. + c.endCircularity() + } + c.currentNode = node + c.beginTypeResolution(node, TypeSystemPropertyNameCurrentNode) + c.currentNodeResolution = c.typeResolutionTop + return save +} + +func (c *Checker) exitCurrentNode(save savedCurrentNode) { + debug.Assert(len(c.resolutions) == c.currentNodeResolution, "resolutions left on the stack") + c.popTypeResolution() + c.currentNode = save.node + c.currentNodeResolution = save.resolution +} + +type savedCurrentNode struct { + node *ast.Node + resolution int +} + +// markCurrentNodeCircular records that results cached until the current node +// is left depend on that node. +func (c *Checker) markCurrentNodeCircular() { + if c.currentNodeResolution != 0 { + c.extendCircularity(c.currentNodeResolution) + } +} + +// markTypeResolutionCircular records that the computations from start to the +// top of the stack observed the incomplete resolution at start without +// failing, so results cached while it is in progress are discarded when it +// finishes. +func (c *Checker) markTypeResolutionCircular(start int) { + if !c.checking { + c.memoCycle(int(c.resolutions[start].prevMemo)) + } + c.markCircular(start) +} + +// markCircular records that the computations from the resolution at start to +// the top of the stack observed the incomplete computation at start, so +// results cached while it is in progress are discarded when it finishes. +func (c *Checker) markCircular(start int) { + c.currentNodeErrorsCyclic = true + c.extendCircularity(start + 1) +} + /** * Pop an entry from the type resolution stack and return its associated result value. The result value will * be true if no circularities were detected, or false if a circularity was found. @@ -19980,6 +20122,9 @@ func (c *Checker) popTypeResolution() bool { c.typeResolutionTop = int(f.prevTypeResolution) c.resolutions[n] = resolution{} c.resolutions = c.resolutions[:n] + if c.circularityStart > n { + c.endCircularity() + } return result } @@ -20049,8 +20194,15 @@ func (c *Checker) typeResolutionHasProperty(r *TypeResolution) bool { return extra != nil && extra.writeType.peek() != nil case TypeSystemPropertyNameAliasTarget: return c.aliasSymbolLinks.Get(r.target.(*ast.Symbol)).aliasTarget.peek() != nil + case TypeSystemPropertyNameContextChecked, TypeSystemPropertyNameStructuredMembers, TypeSystemPropertyNameCurrentNode, + TypeSystemPropertyNameSimplifiedForReading, TypeSystemPropertyNameSimplifiedForWriting: + // Marked as checked or resolved on entry, so it is only on the stack + // while in progress. + return false case TypeSystemPropertyNameComputedPropertyName: return c.typeNodeLinks.Get(r.target.(*ast.Node)).resolvedType.peek() != nil + case TypeSystemPropertyNameVariances: + return c.varianceLinks.Get(r.target.(*ast.Symbol)).variances.peek() != nil } panic("Unhandled case in typeResolutionHasProperty") } @@ -20366,6 +20518,11 @@ func (c *Checker) isApplicableIndexType(source *Type, target *Type) bool { } func (c *Checker) resolveStructuredTypeMembers(t *Type) *StructuredType { + if t.objectFlags&ObjectFlagsMembersResolving != 0 { + // Resolving members may observe the type itself, whose members are + // then incomplete. + c.isResolutionInProgress(t, TypeSystemPropertyNameStructuredMembers) + } c.beginMemo(memoKeyOf(t, memoStructuredMembers)) result := c.resolveStructuredTypeMembersUncached(t) c.endMemo() @@ -20374,6 +20531,20 @@ func (c *Checker) resolveStructuredTypeMembers(t *Type) *StructuredType { func (c *Checker) resolveStructuredTypeMembersUncached(t *Type) *StructuredType { if t.objectFlags&ObjectFlagsMembersResolved == 0 { + // Many kinds of types make members available before they are + // complete, so the resolution is on the stack, but never fails. + outermost := t.objectFlags&ObjectFlagsMembersResolving == 0 + t.objectFlags |= ObjectFlagsMembersResolving + c.beginTypeResolution(t, TypeSystemPropertyNameStructuredMembers) + defer func() { + c.popTypeResolution() + if outermost { + t.objectFlags &^= ObjectFlagsMembersResolving + } + if c.logResults() { + c.logMembersDiscard(t) + } + }() switch { case t.flags&TypeFlagsObject != 0: switch { @@ -20399,6 +20570,48 @@ func (c *Checker) resolveStructuredTypeMembersUncached(t *Type) *StructuredType return t.AsStructuredType() } +// logMembersDiscard discards the members of t when the cycle in progress +// ends, like any other result cached during the cycle, so that they are +// resolved again from scratch when next requested. +// +//go:noinline +func (c *Checker) logMembersDiscard(t *Type) { + c.discardLog = append(c.discardLog, discardEntry{nil, func() { + if t.objectFlags&ObjectFlagsMembersResolving != 0 { + // An enclosing resolution of the same members sets them again. + return + } + t.objectFlags &^= ObjectFlagsMembersResolved + data := t.AsStructuredType() + data.members = nil + data.properties = nil + if data.extra != nil { + data.extra.signatures = nil + data.extra.callSignatureCount = 0 + data.extra.indexInfos = nil + } + if t.objectFlags&(ObjectFlagsClassOrInterface|ObjectFlagsReference) != 0 { + t.AsTypeReference().lazy = nil + } + }, false}) +} + +// logPropertySlotDiscard discards the property in slot index of t, filled on +// first use during a cycle, when the cycle ends. The property may be one of a +// base type whose members the cycle discards. +// +//go:noinline +func (c *Checker) logPropertySlotDiscard(t *StructuredType, lazy *LazyState, index int) { + properties := t.properties + c.discardLog = append(c.discardLog, discardEntry{nil, func() { + properties[index] = nil + lazy.propertiesResolved = false + if t.AsType().AsTypeReference().lazy == lazy { + t.members = nil + } + }, false}) +} + func (c *Checker) resolveObjectTypeMembers(t *Type) { var mapper *TypeMapper var typeParameters []*Type @@ -20636,6 +20849,9 @@ func (c *Checker) getBaseTypesUncached(t *Type) []*Type { // See https://github.com/microsoft/TypeScript/issues/16861 for an example. t.objectFlags &^= ObjectFlagsMembersResolved data.baseTypesResolved = true + if c.logResults() { + c.discardLog = append(c.discardLog, discardEntry{&data.resolvedBaseTypes.memoHeader, func() { data.baseTypesResolved = false }, false}) + } } return data.resolvedBaseTypes.get(c) } @@ -21080,6 +21296,9 @@ func (c *Checker) resolveDeclaredMembersUncached(t *Type) { if !d.declaredMembersResolved { members := c.getMembersOfSymbol(t.symbol) d.declaredMembersResolved = true + if c.logResults() { + c.logFlagMemoDiscard(func() { d.declaredMembersResolved = false }) + } c.setFlagMemo(memoKeyOf(t, memoDeclaredMembers)) d.declaredMembers = members d.declaredCallSignatures = c.getSignaturesOfSymbol(d.declaredMembers.Get(ast.InternalSymbolNameCall)) @@ -21523,20 +21742,7 @@ func (c *Checker) getReturnTypeOfSignatureUncached(sig *Signature) *Type { t = c.getOptionalType(t, false /*isProperty*/) } if !c.popTypeResolution() { - if sig.declaration != nil { - typeNode := sig.declaration.Type() - if typeNode != nil { - c.error(typeNode, diagnostics.Return_type_annotation_circularly_references_itself) - } else if c.noImplicitAny { - name := ast.GetNameOfDeclaration(sig.declaration) - if name != nil { - c.error(name, diagnostics.X_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions, scanner.DeclarationNameToString(name)) - } else { - c.error(sig.declaration, diagnostics.Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions) - } - } - } - t = c.anyType + t = c.circularReturnType(sig) } if sig.resolvedReturnType.get(c) == nil { sig.resolvedReturnType.set(c, t) @@ -21544,6 +21750,25 @@ func (c *Checker) getReturnTypeOfSignatureUncached(sig *Signature) *Type { return sig.resolvedReturnType.get(c) } +// circularReturnType reports a return type that depends on itself and returns +// the type it resolves to instead. +func (c *Checker) circularReturnType(sig *Signature) *Type { + if sig.declaration != nil { + typeNode := sig.declaration.Type() + if typeNode != nil { + c.error(typeNode, diagnostics.Return_type_annotation_circularly_references_itself) + } else if c.noImplicitAny { + name := ast.GetNameOfDeclaration(sig.declaration) + if name != nil { + c.error(name, diagnostics.X_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions, scanner.DeclarationNameToString(name)) + } else { + c.error(sig.declaration, diagnostics.Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions) + } + } + } + return c.anyType +} + func (c *Checker) getNonCircularReturnTypeOfSignature(sig *Signature) *Type { if c.isResolvingReturnTypeOfSignature(sig) { return c.anyType @@ -22487,7 +22712,7 @@ func (c *Checker) getTypeOfMappedSymbol(symbol *ast.Symbol) *Type { if links.resolvedType.get(c) == nil { mappedType := links.getContainingType() if !c.pushTypeResolution(symbol, TypeSystemPropertyNameType) { - mappedType.AsMappedType().containsError.set(c, true) + mappedType.AsMappedType().containsError.setIdentity(c, true) return c.errorType } templateType := c.getTemplateTypeFromMappedType(core.OrElse(mappedType.AsMappedType().target, mappedType)) @@ -22768,18 +22993,18 @@ func (c *Checker) combineUnionOrIntersectionParameters(left *Signature, right *S core.IfElse(isRestParam, ast.CheckFlagsRestParameter, core.IfElse(isOptional, ast.CheckFlagsOptionalParameter, 0))) links := c.valueSymbolLinks.Get(paramSymbol) if isRestParam { - links.resolvedType.set(c, c.createArrayType(combinedParamType)) + links.resolvedType.setIdentity(c, c.createArrayType(combinedParamType)) } else { - links.resolvedType.set(c, combinedParamType) + links.resolvedType.setIdentity(c, combinedParamType) } params[i] = paramSymbol } if needsExtraRestElement { restParamSymbol := c.newSymbolEx(ast.SymbolFlagsFunctionScopedVariable, "args", ast.CheckFlagsRestParameter) links := c.valueSymbolLinks.Get(restParamSymbol) - links.resolvedType.set(c, c.createArrayType(c.getTypeAtPosition(shorter, longestCount))) + links.resolvedType.setIdentity(c, c.createArrayType(c.getTypeAtPosition(shorter, longestCount))) if shorter == right { - links.resolvedType.set(c, c.instantiateType(links.resolvedType.get(c), mapper)) + links.resolvedType.setIdentity(c, c.instantiateType(links.resolvedType.get(c), mapper)) } params[longestCount] = restParamSymbol } @@ -22946,7 +23171,7 @@ func (c *Checker) getUnionOrIntersectionProperty(t *Type, name string, skipObjec cache.begin(c, name) prop := c.createUnionOrIntersectionProperty(t, name, skipObjectFunctionPropertyAugment) if prop != nil { - cache.set(c, name, prop) + cache.setIdentity(c, name, prop) } c.endMemo() return prop @@ -23103,7 +23328,7 @@ func (c *Checker) createUnionOrIntersectionProperty(containingType *Type, name s links := c.valueSymbolLinks.Get(clone) links.setContainingType(c, containingType) links.mapper = singlePropMapper - links.setWriteType(c, c.getWriteTypeOfSymbol(singleProp)) + links.setNewWriteType(c, c.getWriteTypeOfSymbol(singleProp)) return clone } if propSet.Size() == 0 { @@ -23169,15 +23394,15 @@ func (c *Checker) createUnionOrIntersectionProperty(containingType *Type, name s return result } if isUnion { - links.resolvedType.set(c, c.getUnionType(propTypes)) + links.resolvedType.setIdentity(c, c.getUnionType(propTypes)) } else { - links.resolvedType.set(c, c.getIntersectionType(propTypes)) + links.resolvedType.setIdentity(c, c.getIntersectionType(propTypes)) } if writeTypes != nil { if isUnion { - links.setWriteType(c, c.getUnionType(writeTypes)) + links.setNewWriteType(c, c.getUnionType(writeTypes)) } else { - links.setWriteType(c, c.getIntersectionType(writeTypes)) + links.setNewWriteType(c, c.getIntersectionType(writeTypes)) } } return result @@ -23260,7 +23485,7 @@ func (c *Checker) createSymbolWithType(source *ast.Symbol, t *Type) *ast.Symbol symbol.SetParent(source.Parent()) symbol.SetValueDeclaration(source.ValueDeclaration()) links := c.valueSymbolLinks.Get(symbol) - links.resolvedType.set(c, t) + links.resolvedType.setIdentity(c, t) links.target = source links.setNameType(c, c.valueSymbolLinks.Get(source).getNameType()) return symbol @@ -23733,13 +23958,23 @@ func (c *Checker) instantiateTypeWithAlias(t *Type, m *TypeMapper, alias *TypeAl tr.Instant(tracing.PhaseCheckTypes, "instantiateType_DepthLimit", map[string]any{"typeId": t.id, "instantiationDepth": len(c.instantiationStack), "instantiationCount": c.instantiationCount}) } circularTypeNames := c.getCircularTypeNames() + var message *diagnostics.Message + var args []any switch { case len(circularTypeNames) == 1: - c.errorAtCurrentNode(diagnostics.Instantiations_of_type_0_appear_infinitely_circular, circularTypeNames[0]) + message, args = diagnostics.Instantiations_of_type_0_appear_infinitely_circular, []any{circularTypeNames[0]} case len(circularTypeNames) > 1: - c.errorAtCurrentNode(diagnostics.Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0, quotedAndCommaSeparated(circularTypeNames)) + message, args = diagnostics.Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0, []any{quotedAndCommaSeparated(circularTypeNames)} default: - c.errorAtCurrentNode(diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite) + message = diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite + } + report := func(c *Checker, node *ast.Node) { c.error(node, message, args...) } + if len(c.instantiationStack) == 100 { + c.reportAtCurrentNode(report) + } else { + // The count depends on how much was already cached, so computing + // the result again elsewhere would not reliably reach it either. + c.reportAtCurrentNodeOnce(report) } return c.errorType } @@ -24042,9 +24277,10 @@ func (c *Checker) getObjectTypeInstantiation(t *Type, m *TypeMapper, alias *Type } result, _ := data.instantiations.get(c, key) if result == nil { + reports := c.startCurrentNodeErrors() data.instantiations.begin(c, key) result = instantiate(newTypeMapper(typeParameters, typeArguments)) - data.instantiations.set(c, key, result) + data.instantiations.setReported(c, key, result, c.endCurrentNodeErrors(reports)) c.endMemo() if result.flags&TypeFlagsObjectFlagsType != 0 && result.objectFlags&ObjectFlagsCouldContainTypeVariablesComputed == 0 { // if `result` is one of the object types we tried to make (it may not be, due to how `instantiateMappedType` works), we can carry forward the type variable containment check from the input type arguments @@ -24158,6 +24394,7 @@ func (c *Checker) getConditionalTypeInstantiation(t *Type, mapper *TypeMapper, f key := getConditionalTypeKey(typeArguments, alias, forConstraint) result, _ := root.instantiations.get(c, key) if result == nil { + reports := c.startCurrentNodeErrors() root.instantiations.begin(c, key) newMapper := newTypeMapper(root.outerTypeParameters, typeArguments) checkType := root.checkType @@ -24175,7 +24412,7 @@ func (c *Checker) getConditionalTypeInstantiation(t *Type, mapper *TypeMapper, f } else { result = c.getConditionalType(root, newMapper, forConstraint, alias) } - root.instantiations.set(c, key, result) + root.instantiations.setReported(c, key, result, c.endCurrentNodeErrors(reports)) c.endMemo() } return result @@ -24220,7 +24457,7 @@ func (c *Checker) instantiateMappedType(t *Type, m *TypeMapper, alias *TypeAlias return s } if d.declaration.NameType == nil { - if c.isArrayType(s) || s.flags&TypeFlagsAny != 0 && c.findResolutionCycleStartIndex(typeVariable, TypeSystemPropertyNameResolvedBaseConstraint) < 0 && c.hasArrayOrTypeTypeConstraint(typeVariable) { + if c.isArrayType(s) || s.flags&TypeFlagsAny != 0 && !c.isResolutionInProgress(typeVariable, TypeSystemPropertyNameResolvedBaseConstraint) && c.hasArrayOrTypeTypeConstraint(typeVariable) { return c.instantiateMappedArrayType(s, t, prependTypeMapping(typeVariable, s, m)) } if isTupleType(s) { @@ -24693,7 +24930,13 @@ func (c *Checker) getTypeFromTypeReference(node *ast.Node) *Type { } else if t := c.getIntendedTypeFromJSDocTypeReference(node); t != nil { links.resolvedType.set(c, t) } else { - links.resolvedType.set(c, c.getDistributedTypeParameter(node, c.getTypeReferenceType(node, c.getSymbolFromTypeReference(node)))) + t := c.getDistributedTypeParameter(node, c.getTypeReferenceType(node, c.getSymbolFromTypeReference(node))) + if t.objectFlags&ObjectFlagsReference != 0 && t.AsTypeReference().node == node { + // A deferred reference is identified by the node, so it outlives a cycle. + links.resolvedType.setIdentity(c, t) + } else { + links.resolvedType.set(c, t) + } } } return links.resolvedType.get(c) @@ -25576,7 +25819,7 @@ func (c *Checker) appendTypeParameters(typeParameters []*Type, declarations []*a func (c *Checker) getDeclaredTypeOfTypeParameter(symbol *ast.Symbol) *Type { links := c.declaredTypeLinks.Get(symbol) if links.declaredType.get(c) == nil { - links.declaredType.set(c, c.newTypeParameter(symbol)) + links.declaredType.setIdentity(c, c.newTypeParameter(symbol)) } return links.declaredType.get(c) } @@ -25589,6 +25832,7 @@ func (c *Checker) getDeclaredTypeOfTypeAlias(symbol *ast.Symbol) *Type { if !c.pushTypeResolution(symbol, TypeSystemPropertyNameDeclaredType) { return c.errorType } + reports := c.startCurrentNodeErrors() declaration := core.Find(symbol.Declarations(), ast.IsTypeOrJSTypeAliasDeclaration) typeNode := declaration.Type() t := c.getTypeFromTypeNode(typeNode) @@ -25611,9 +25855,11 @@ func (c *Checker) getDeclaredTypeOfTypeAlias(symbol *ast.Symbol) *Type { c.error(errorNode, diagnostics.Type_alias_0_circularly_references_itself, c.symbolToString(symbol)) t = c.errorType } - if links.declaredType.get(c) == nil { - links.declaredType.set(c, t) + nodeReports := c.endCurrentNodeErrors(reports) + if links.declaredType.peek() == nil { + links.declaredType.setReported(c, t, nodeReports) } + return links.declaredType.peek() } return links.declaredType.get(c) } @@ -25634,7 +25880,7 @@ func (c *Checker) getDeclaredTypeOfEnum(symbol *ast.Symbol) *Type { } else { memberType = c.createComputedEnumType(memberSymbol) } - c.declaredTypeLinks.Get(memberSymbol).declaredType.set(c, c.getFreshTypeOfLiteralType(memberType)) + c.declaredTypeLinks.Get(memberSymbol).declaredType.setIdentity(c, c.getFreshTypeOfLiteralType(memberType)) memberTypeList = append(memberTypeList, memberType) } } @@ -25650,7 +25896,7 @@ func (c *Checker) getDeclaredTypeOfEnum(symbol *ast.Symbol) *Type { enumType.flags |= TypeFlagsEnumLiteral enumType.symbol = symbol } - links.declaredType.set(c, enumType) + links.declaredType.setIdentity(c, enumType) } return links.declaredType.get(c) } @@ -25675,7 +25921,7 @@ func (c *Checker) getDeclaredTypeOfEnumMember(symbol *ast.Symbol) *Type { if !(links.declaredType.get(c) != nil) { enumType := c.getDeclaredTypeOfEnum(c.getParentOfSymbol(symbol)) if links.declaredType.get(c) == nil { - links.declaredType.set(c, enumType) + links.declaredType.setIdentity(c, enumType) } } return links.declaredType.get(c) @@ -25872,7 +26118,8 @@ func (c *Checker) getTypeFromArrayOrTupleTypeNode(node *ast.Node) *Type { if node.Kind == ast.KindTupleType && len(node.Elements()) == 0 { links.resolvedType.set(c, target) } else { - links.resolvedType.set(c, c.createDeferredTypeReference(target, node, nil /*mapper*/, nil /*alias*/)) + // The deferred reference is identified by the node, so it outlives a cycle. + links.resolvedType.setIdentity(c, c.createDeferredTypeReference(target, node, nil /*mapper*/, nil /*alias*/)) } } else { var elementTypes []*Type @@ -28014,7 +28261,7 @@ func (c *Checker) getIntersectionTypeEx(types []*Type, flags IntersectionFlags, } else { result = c.getIntersectionTypeWithContent(objectFlags|c.getPropagatingFlagsOfTypes(types /*excludeKinds*/, TypeFlagsNullable), typeSet, alias) } - c.intersectionTypes.set(c, key, result) + c.intersectionTypes.setIdentity(c, key, result) c.endMemo() } return result @@ -29317,7 +29564,11 @@ func (c *Checker) getResolvedBaseConstraintUncached(t *Type, stack []RecursionId errorNode := c.getConstraintDeclaration(t) if errorNode != nil { typeString := c.TypeToString(t) - c.reportAtCurrentNode(func(c *Checker, node *ast.Node) { + // The error is located at the constraint, not the current node, and the + // circularity is intrinsic to the declarations, so it is reported once + // and the circular result is kept. Discarding it would let a later + // computation reuse cycle participants that hide the cycle. + c.reportAtCurrentNodeOnce(func(c *Checker, node *ast.Node) { diagnostic := c.error(errorNode, diagnostics.Type_parameter_0_has_a_circular_constraint, typeString) if node != nil && !isNodeDescendantOf(errorNode, node) && !isNodeDescendantOf(node, errorNode) { diagnostic.AddRelatedInfo(NewDiagnosticForNode(node, diagnostics.Circularity_originates_in_type_at_this_location)) @@ -29595,9 +29846,9 @@ func (c *Checker) expandSignatureParametersWithTupleMembers(signature *Signature symbol := c.newSymbolEx(ast.SymbolFlagsFunctionScopedVariable, associatedNames[i], checkFlags) links := c.valueSymbolLinks.Get(symbol) if flags&ElementFlagsRest != 0 { - links.resolvedType.set(c, c.createArrayType(t)) + links.resolvedType.setIdentity(c, c.createArrayType(t)) } else { - links.resolvedType.set(c, t) + links.resolvedType.setIdentity(c, t) } expanded = append(expanded, symbol) } @@ -29773,17 +30024,26 @@ func (c *Checker) getSimplifiedIndexType(t *Type) *Type { func (c *Checker) getSimplifiedIndexedAccessType(t *Type, writing bool) *Type { key := CachedTypeKey{kind: core.IfElse(writing, CachedTypeKindIndexedAccessForWriting, CachedTypeKindIndexedAccessForReading), typeId: t.id} if cached, _ := c.cachedTypes.get(c, key); cached != nil { - return core.IfElse(cached == c.circularConstraintType, t, cached) + return cached + } + propertyName := core.IfElse(writing, TypeSystemPropertyNameSimplifiedForWriting, TypeSystemPropertyNameSimplifiedForReading) + if c.simplifyingIndexedAccess.Has(key) { + // Resolve circular references to t itself while simplifying, which + // depends on the simplification in progress. + c.isResolutionInProgress(t, propertyName) + return t } c.cachedTypes.begin(c, key) - // Resolve circular references to t itself while simplifying. - c.cachedTypes.intern(key, t) + c.simplifyingIndexedAccess.Add(key) + c.beginTypeResolution(t, propertyName) result := c.getSimplifiedIndexedAccessTypeWorker(t, writing) if result != t { // If the simplification is a union type that includes t, remove t from the type. result = c.removeType(result, t) - c.cachedTypes.set(c, key, result) } + c.cachedTypes.set(c, key, result) + c.simplifyingIndexedAccess.Delete(key) + c.popTypeResolution() c.endMemo() return result } @@ -32595,7 +32855,7 @@ func (c *Checker) getTypeFromIndexInfosOfContextualType(t *Type, name string, na func (c *Checker) isCircularMappedProperty(symbol *ast.Symbol) bool { if symbol.CheckFlags()&ast.CheckFlagsMapped != 0 { links := c.valueSymbolLinks.Get(symbol) - return links.resolvedType.get(c) == nil && c.findResolutionCycleStartIndex(symbol, TypeSystemPropertyNameType) >= 0 + return links.resolvedType.get(c) == nil && c.isResolutionInProgress(symbol, TypeSystemPropertyNameType) } return false } @@ -34045,7 +34305,7 @@ func (c *Checker) getApplicableIndexSymbol(t *Type, keyType *Type) *ast.Symbol { symbol.SetValueDeclaration(declarations[0]) symbol.SetParent(t.symbol) links := c.valueSymbolLinks.Get(symbol) - links.resolvedType.set(c, info.valueType) + links.resolvedType.setIdentity(c, info.valueType) info.indexSymbol = symbol } } diff --git a/tsc/internal/checker/checker_test.go b/tsc/internal/checker/checker_test.go index 999194133b1fe..4e5d2b2445745 100644 --- a/tsc/internal/checker/checker_test.go +++ b/tsc/internal/checker/checker_test.go @@ -586,6 +586,7 @@ var unmemoizedCacheFields = map[string]string{ "memoStore.ambientModules": unmemoizedProgram, "memoStore.memoStates": unmemoizedMemoState, "memoStore.memoPendingCount": unmemoizedMemoState, + "memoStore.memoErrorStates": unmemoizedMemoState, "memoStore.mu": unmemoizedMemoState, "memoStore.diagnostics": unmemoizedChecking, "memoStore.suggestionDiagnostics": unmemoizedChecking, diff --git a/tsc/internal/checker/inference.go b/tsc/internal/checker/inference.go index c32d7812f02c8..4b63eeb57e0a1 100644 --- a/tsc/internal/checker/inference.go +++ b/tsc/internal/checker/inference.go @@ -1254,7 +1254,7 @@ func (c *Checker) createEmptyObjectTypeFromStringLiteral(t *Type) *Type { } name := getStringLiteralValue(t) literalProp := c.newSymbol(ast.SymbolFlagsProperty, name) - c.valueSymbolLinks.Get(literalProp).resolvedType.set(c, c.anyType) + c.valueSymbolLinks.Get(literalProp).resolvedType.setIdentity(c, c.anyType) if t.symbol != nil { literalProp.SetDeclarations(t.symbol.Declarations()) literalProp.SetValueDeclaration(t.symbol.ValueDeclaration()) diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index ea0ed15b41e03..d3e80718663a7 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -69,6 +69,38 @@ const ( memoFieldCount = memoResolvedMembers + 2 ) +// A reentry says what it means to re-enter a computation in progress, which +// can only observe whatever the computation has published so far. +type reentry uint8 + +const ( + // What re-entry observes is incomplete, so the results computed while + // the outer computation is in progress are discarded when it finishes, + // and computed again from its result. This is the default. + reentryCircular reentry = iota + // The computation detects re-entry with a type resolution of its own, + // which decides the head of the cycle and what to discard. + reentryResolution + // The computation publishes a partial result before it finishes, and + // re-entry observes that partial result. Results derived from it may + // differ depending on which computation starts first. + reentryPartial +) + +// memoReentry is the re-entry policy of each kind of computation. +var memoReentry = [memoFieldCount]reentry{ + // memoCompute keeps the result that a re-entrant computation cached, + // and many cells publish an in-progress marker for re-entry to read. + memoCell: reentryPartial, + // Many kinds of types make members available before they are complete. + memoStructuredMembers: reentryPartial, + // Circular defaults are reported at the default first in program order. + memoTypeParameterDefault: reentryResolution, + // Contextual parameter typing resolves a cycle through the enclosing call. + // Its type resolution ends once the parameters are assigned. + memoContextualParameters: reentryResolution, +} + // memoKey identifies a memoized result: the address of the entity owning the // cache slot (an *ast.Node, *ast.Symbol, *Type, or *Signature) shifted left by // eight bits, plus the memoField of the slot. Packing into an integer keeps map @@ -76,6 +108,10 @@ const ( // checker store, so an address cannot be reused while its keys exist. type memoKey uint64 +func (k memoKey) field() memoField { + return memoField(k) +} + func memoKeyOf[T any](entity *T, field memoField) memoKey { // SAFETY: Only the address is kept, as an identity; it is never turned back // into a pointer except by symbol, whose entity outlives the key. @@ -116,7 +152,8 @@ func (f *memoEffects) covers(deps []*memoEffects) bool { // memoState is the memo state of one memoized result. type memoState struct { - pending *memoEffects // Effects not yet replayed by a check + pending *memoEffects // Effects not yet replayed by a check + errors []*currentNodeError // Errors the computation reported at the current node; see setReported } // memo is a cached result. Cached checker state must live in a memo so that @@ -157,12 +194,36 @@ func (m *memo[T]) get(c *Checker) T { // example, the types of binding elements assigned while resolving the type of // their declaration), the result depends on the computation setting it. func (m *memo[T]) set(c *Checker, v T) { + if c.logResults() { + m.logDiscard(c) + } m.memoValue = v if !c.checking { c.attachCell(&m.memoHeader) } } +// setAfterMarker is set for a result replacing the marker its computation put +// in place when it began. A marker put in place before a cycle began was not +// logged, so discarding the result would restore it; a restored marker that +// stale reports as no longer in progress is cleared instead. Stale is given x +// rather than capturing it so that nothing is allocated unless the set is +// logged. +func setAfterMarker[T comparable, X any](c *Checker, m *memo[T], v T, x X, stale func(*Checker, X, T) bool) { + n := len(c.discardLog) + m.set(c, v) + if len(c.discardLog) > n { + restore := c.discardLog[n].restore + c.discardLog[n].restore = func() { + restore() + if stale(c, x, m.memoValue) { + var zero T + m.memoValue = zero + } + } + } +} + // setIfChanged is set for a result that every computation needing it sets // again, such as the symbol a property access resolves to. Setting the value // it already has comes from the same computation, whose effects are already @@ -173,6 +234,46 @@ func setIfChanged[T comparable](c *Checker, m *memo[T], v T) { } } +// setIdentity is set for a result that defines the identity of what it +// caches, such as a declared type, or that is part of an entity being +// created, such as the type of a synthetic property. It is never discarded at +// the end of a cycle: discarding an identity would let a second, distinct +// result exist, and an entity can outlive the cycle in caches that are kept +// while having no way to compute its parts again. +func (m *memo[T]) setIdentity(c *Checker, v T) { + m.memoValue = v + if !c.checking { + c.attachCell(&m.memoHeader) + } +} + +// setReported is setIdentity for a result whose computation collected errors +// reported at the current node, as returned by endCurrentNodeErrors. Every +// node reusing the result reports them again, as it would had it computed the +// result itself. If computing the result elsewhere may not report them (see +// endCurrentNodeErrors), it is instead discarded with other results cached +// for the current node. +func (m *memo[T]) setReported(c *Checker, v T, r currentNodeErrors) { + if r.cyclic { + if c.logResults() { + m.logDiscard(c) + } + r.list = nil + } + m.setIdentity(c, v) + if r.list != nil || c.memoErrorStates != 0 && c.memoStates[m.key()] != nil { + c.memoState(m.key()).setErrors(c, r.list) + } +} + +//go:noinline +func (m *memo[T]) logDiscard(c *Checker) { + old := m.memoValue + c.discardLog = append(c.discardLog, discardEntry{&m.memoHeader, func() { + m.memoValue = old + }, false}) +} + // peek returns the cached result without accounting for effects. It is only // for a result whose computation is in progress, where reading it does not // observe it. @@ -276,9 +377,43 @@ func (m *memoMap[K, V]) values() iter.Seq[V] { return maps.Values(m.memoEntries) } -// set caches the result for k; see memo.set. // set caches the result for k; see memo.set. func (m *memoMap[K, V]) set(c *Checker, k K, v V) { + if c.logResults() { + m.logDiscard(c, k) + } + m.setIdentity(c, k, v) +} + +//go:noinline +func (m *memoMap[K, V]) logDiscard(c *Checker, k K) { + old, ok := m.memoEntries[k] + c.discardLog = append(c.discardLog, discardEntry{nil, func() { + if ok { + m.memoEntries[k] = old + } else { + delete(m.memoEntries, k) + } + }, false}) +} + +// setReported is setIdentity for an entry; see memo.setReported. +func (m *memoMap[K, V]) setReported(c *Checker, k K, v V, r currentNodeErrors) { + if r.cyclic { + if c.logResults() { + m.logDiscard(c, k) + } + r.list = nil + } + m.setIdentity(c, k, v) + if r.list != nil || c.memoErrorStates != 0 && m.memoStates[k] != nil { + m.state(k).setErrors(c, r.list) + } +} + +// setIdentity is set for a result that defines the identity of what it +// caches; see memo.setIdentity. +func (m *memoMap[K, V]) setIdentity(c *Checker, k K, v V) { if m.memoEntries == nil { m.memoEntries = make(map[K]V) } @@ -309,6 +444,10 @@ func (m *memoMap[K, V]) compute(c *Checker, k K, fn func() V) V { // enter starts the computation of the result for k; see beginMemo. func (m *memoMap[K, V]) begin(c *Checker, k K) { outer := m.resolvingIndex(c, k) + if outer != 0 { + // Re-entering an entry marks the cycle circular; see reentryCircular. + c.markCircular(outer - 1) + } m.resolvingKeys = append(m.resolvingKeys, k) c.beginResolution(0, m, len(m.resolvingKeys)-1) if c.checking { @@ -379,7 +518,7 @@ func (s *memoSet[K]) once(c *Checker, k K, fn func()) { // memoActive reports whether reading a cached result must account for its // effects: false in a check with nothing pending. func (c *Checker) memoActive() bool { - return !c.checking || c.memoPendingCount != 0 + return !c.checking || c.memoPendingCount|c.memoErrorStates != 0 } // beginMemo is called on entry to a memoized function whose result for this @@ -426,6 +565,16 @@ func (c *Checker) startEffects(state *memoState) { f.prevMemo = int32(c.memoTop) f.result = state f.entry = c.currentNode + if c.memoTop == 0 && c.currentNodeResolution == 0 { + // A query made outside of checking: errors located at the current + // node are located wherever checking reuses the result, so results + // they depend on are discarded once the query finishes (see + // reportAtCurrentNode), and every reuse computes them again. The + // node's resolution is entered above the computation's resolution. + f.isQuery = true + query := c.enterCurrentNode(c.currentNode) + c.resolutions[n].query = query + } c.memoTop = n + 1 } @@ -433,6 +582,11 @@ func (c *Checker) startEffects(state *memoState) { // returning it if it recorded them. func (c *Checker) stopEffects() *resolution { n := len(c.resolutions) - 1 + if c.resolutions[n].isTypeResolution { + n-- + debug.Assert(c.resolutions[n].isQuery, "resolution left on the stack") + c.exitCurrentNode(c.resolutions[n].query) + } f := &c.resolutions[n] if !f.memo { return nil @@ -472,6 +626,9 @@ func (c *Checker) attachState(state *memoState) { return } f := c.memoEffectsAt(n) + if c.logResults() { + c.logPendingDiscard(state) + } if state.pending == nil { state.pending = &memoEffects{} c.memoPendingCount++ @@ -510,6 +667,9 @@ func (c *Checker) observeState(state *memoState) bool { if state == nil { return false } + if state.errors != nil { + c.replayCurrentNodeErrors(state.errors) + } if c.checking { c.replayPending(state) return false @@ -522,6 +682,77 @@ func (c *Checker) observeState(state *memoState) bool { return true } +// A currentNodeError is an error reported at the current node; see +// reportAtCurrentNode. Replaying it reports the same *currentNodeError, so +// that reports collected more than once can be told apart from distinct ones. +type currentNodeError struct { + report func(c *Checker, node *ast.Node) +} + +type currentNodeErrorsMark struct { + errors int + cyclic bool +} + +// currentNodeErrors are the errors a computation reported at the current +// node. +type currentNodeErrors struct { + list []*currentNodeError + cyclic bool // Whether the computation observed a cycle, so computing it elsewhere may not report them +} + +// startCurrentNodeErrors starts collecting the errors a computation reports +// at the current node, to be passed to endCurrentNodeErrors when it finishes. +func (c *Checker) startCurrentNodeErrors() currentNodeErrorsMark { + c.currentNodeErrorCollectors++ + mark := currentNodeErrorsMark{len(c.currentNodeErrors), c.currentNodeErrorsCyclic} + c.currentNodeErrorsCyclic = false + return mark +} + +// endCurrentNodeErrors returns the errors reported at the current node since +// mark. +func (c *Checker) endCurrentNodeErrors(mark currentNodeErrorsMark) currentNodeErrors { + var r currentNodeErrors + for _, report := range c.currentNodeErrors[mark.errors:] { + // Reusing a result more than once reports its errors each time. + if !slices.Contains(r.list, report) { + r.list = append(r.list, report) + } + } + // Which errors a cycle reports depends on where it is entered, so they + // are only reported where the result is computed. + r.cyclic = r.list != nil && c.currentNodeErrorsCyclic + c.currentNodeErrorsCyclic = c.currentNodeErrorsCyclic || mark.cyclic + c.currentNodeErrorCollectors-- + if c.currentNodeErrorCollectors == 0 { + clear(c.currentNodeErrors) + c.currentNodeErrors = c.currentNodeErrors[:0] + c.currentNodeErrorsCyclic = false + } + return r +} + +func (s *memoState) setErrors(c *Checker, reports []*currentNodeError) { + switch { + case s.errors == nil && reports != nil: + c.memoErrorStates++ + case s.errors != nil && reports == nil: + c.memoErrorStates-- + } + s.errors = reports +} + +// replayCurrentNodeErrors reports at the current node the errors that +// computing a reused result reported at the node it was computed for. +// +//go:noinline +func (c *Checker) replayCurrentNodeErrors(reports []*currentNodeError) { + for _, r := range reports { + c.reportNode(r) + } +} + func (c *Checker) replayPending(state *memoState) { if state != nil && state.pending != nil { f := state.pending @@ -579,6 +810,9 @@ func (c *Checker) retainEffects(state *memoState, f *memoEffects) { } return } + if c.logResults() { + c.logPendingDiscard(state) + } if state.pending != nil { f.addDep(state.pending) } else { @@ -730,12 +964,66 @@ func (c *Checker) memoEffectsAt(i int) *memoEffects { return f } +// Cycles +// +// A cached result must be the result of computing it from scratch, so that +// it does not depend on which computation happened to request it first. A +// computation that observes another computation still in progress (a +// circularity) sees a provisional state, so results cached from the moment +// the cycle is detected until the outermost computation of the cycle (its +// head) finishes may differ from computing them from scratch. Those results +// are discarded when the head finishes, and are recomputed when next +// requested. The computations that were in progress when the cycle was +// detected (its participants) are kept: each of them reaches the cycle when +// computed from scratch too, so each result is the fallback for a circularity +// whichever participant is computed first. + +// Discard log +// +// Some computations run provisionally, and may have to be discarded as if +// they had never run: those in a cycle (see above). While any of them is in +// progress, what they cache is logged in the discard log, from which each +// discards to the position where it started. The discard log is +// cleared once nothing in progress can discard. + +type discardEntry struct { + memo *memoHeader // The memo restored, or nil + restore func() + effects bool // Restores the effects of a result rather than the result +} + +// logResults reports whether caching a result must be logged in the discard +// log. +func (c *Checker) logResults() bool { + return c.circularityStart != 0 +} + +// discardLogSince restores everything logged in the discard log since +// position start. +func (c *Checker) discardLogSince(start int) { + start = min(start, len(c.discardLog)) + for i := len(c.discardLog) - 1; i >= start; i-- { + c.discardLog[i].restore() + } + clear(c.discardLog[start:]) + c.discardLog = c.discardLog[:start] +} + +// trimDiscardLog clears the discard log if nothing in progress can discard. +func (c *Checker) trimDiscardLog() { + if !c.logResults() && len(c.discardLog) != 0 { + clear(c.discardLog) + c.discardLog = c.discardLog[:0] + } +} + // A flag memo is a cached result held outside a memo, so that it costs no // space of its own: bits of a flags word shared with other results, or a // field of storage allocated only when needed. It is accounted for like a // memo under a key naming its entity and field. Readers finding it cached // call observeFlagMemo; it is computed between beginMemo and endMemo for the -// key, and cached with setFlagMemoBits or setFlagMemo. +// key, and cached with setFlagMemoBits, or with setFlagMemo after logging how +// to discard it with logFlagMemoDiscard. // observeFlagMemo accounts for reading the flag memo identified by key. func (c *Checker) observeFlagMemo(key memoKey) { @@ -752,6 +1040,15 @@ func (c *Checker) setFlagMemo(key memoKey) { } } +// logFlagMemoDiscard logs how to discard the result of a flag memo in the +// discard log; the caller checks logResults so that the closure is only +// allocated when needed. +// +//go:noinline +func (c *Checker) logFlagMemoDiscard(restore func()) { + c.discardLog = append(c.discardLog, discardEntry{nil, restore, false}) +} + // objectFlagsCell returns the flags under value of t, a flag memo whose // result is cached once the computed flag is set, computing them in a // computation of their own if needed. With inProgress, the computed flag is @@ -779,10 +1076,89 @@ func (c *Checker) objectFlagsCell(t *Type, field memoField, computed ObjectFlags // setFlagMemoBits caches the bits of *p under mask as the result of the flag // memo identified by key. func setFlagMemoBits[T ~uint32](c *Checker, key memoKey, p *T, mask T, bits T) { + if c.logResults() { + old := *p & mask + c.logFlagMemoDiscard(func() { *p = *p&^mask | old }) + } *p = *p&^mask | bits&mask c.setFlagMemo(key) } +// endCircularity discards the results cached since the outermost cycle in +// progress was detected, except those of its participants. +func (c *Checker) endCircularity() { + mark := min(c.circularityMark, len(c.discardLog)) + undo := c.discardLog[mark:] + participants := c.cycleParticipants + c.circularityStart = 0 + c.cycleParticipants = nil + keep := make(map[*memoHeader]struct{}, len(participants)) + for i := range participants { + if p := c.typeResolutionMemo(&participants[i]); p != nil { + keep[p] = struct{}{} + } + } + for _, u := range slices.Backward(undo) { + if u.effects { + // A result recomputed after the cycle also replays the effects + // of the computation discarded here. + continue + } + if _, ok := keep[u.memo]; ok && u.memo != nil { + continue + } + u.restore() + } + clear(undo) + c.discardLog = c.discardLog[:mark] + c.trimDiscardLog() +} + +// extendCircularity makes the resolution at index head-1 part of the cycle in +// progress, starting one if there is none. +func (c *Checker) extendCircularity(head int) { + if c.circularityStart == 0 { + c.circularityMark = len(c.discardLog) + c.circularityStart = head + } else if head < c.circularityStart { + c.circularityStart = head + } +} + +func (f *memoEffects) truncateDeps(n int) { + for _, d := range f.deps[n:] { + if d.parent == f { + d.parent = nil + } + } + clear(f.deps[n:]) + f.deps = f.deps[:n] +} + +// logPendingDiscard logs the effects of the result in the memo state, which +// are about to change, so discarding the cycle can restore them. +// +//go:noinline +func (c *Checker) logPendingDiscard(state *memoState) { + old := state.pending + n := 0 + if old != nil { + n = len(old.deps) + } + c.discardLog = append(c.discardLog, discardEntry{effects: true, restore: func() { + switch { + case old == nil && state.pending != nil: + c.memoPendingCount-- + case old != nil && state.pending == nil: + c.memoPendingCount++ + } + state.pending = old + if old != nil && len(old.deps) > n { + old.truncateDeps(n) + } + }}) +} + // typeResolutionMemo returns the address of the memo caching the result of // a type resolution, or nil if it is not cached in a memo. func (c *Checker) typeResolutionMemo(r *TypeResolution) *memoHeader { @@ -809,6 +1185,8 @@ func (c *Checker) typeResolutionMemo(r *TypeResolution) *memoHeader { return &c.aliasSymbolLinks.Get(r.target.(*ast.Symbol)).aliasTarget.memoHeader case TypeSystemPropertyNameComputedPropertyName: return &c.typeNodeLinks.Get(r.target.(*ast.Node)).resolvedType.memoHeader + case TypeSystemPropertyNameVariances: + return &c.varianceLinks.Get(r.target.(*ast.Symbol)).variances.memoHeader } return nil } diff --git a/tsc/internal/checker/relater.go b/tsc/internal/checker/relater.go index b506908d60fd8..8fff0be29aee7 100644 --- a/tsc/internal/checker/relater.go +++ b/tsc/internal/checker/relater.go @@ -1260,6 +1260,10 @@ func (c *Checker) isDiscriminantProperty(t *Type, name string) bool { // discriminant, a flag memo. func (c *Checker) setDiscriminantFlags(prop *ast.Symbol, flags ast.CheckFlags) { const mask = ast.CheckFlagsIsDiscriminantComputed | ast.CheckFlagsIsDiscriminant + if c.logResults() { + old := prop.CheckFlags() & mask + c.logFlagMemoDiscard(func() { prop.SetCheckFlags(prop.CheckFlags()&^mask | old) }) + } prop.SetCheckFlags(prop.CheckFlags()&^mask | flags) c.setFlagMemo(memoKeyOf(prop, memoDiscriminant)) } @@ -1528,7 +1532,8 @@ func (c *Checker) getVariancesWorker(symbol *ast.Symbol, typeParameters []*Type) if len(c.varianceStack) == 0 { c.resolutionStart = len(c.resolutions) } - c.varianceStack = append(c.varianceStack, VarianceStackEntry{symbol, typeParameters}) + c.varianceStack = append(c.varianceStack, VarianceStackEntry{symbol: symbol, typeParameters: typeParameters, resolution: len(c.resolutions)}) + c.beginTypeResolution(symbol, TypeSystemPropertyNameVariances) if c.varianceMeasuring == nil { c.varianceMeasuring = make(map[*ast.Symbol]int) } @@ -1583,6 +1588,7 @@ func (c *Checker) getVariancesWorker(symbol *ast.Symbol, typeParameters []*Type) links.variances.set(c, variances) } c.varianceStack = c.varianceStack[:len(c.varianceStack)-1] + c.popTypeResolution() if c.varianceMeasuring[symbol]--; c.varianceMeasuring[symbol] == 0 { delete(c.varianceMeasuring, symbol) } @@ -1595,6 +1601,14 @@ func (c *Checker) getVariancesWorker(symbol *ast.Symbol, typeParameters []*Type) // we enter a circularity, we find the generic type with the "smallest" symbol in the circular // region of the variance stack and restart the computation from there if necessary. This // ensures stable results for circular generic types. + // Results computed since the circularity was entered observed incomplete + // variances, so they are discarded once the outermost variance computation + // of the circularity finishes. The variances themselves are kept, since the + // restart below computes them the same way from any entry point. + for i := stackIndex; i < len(c.varianceStack); i++ { + c.cycleParticipants = append(c.cycleParticipants, c.resolutions[c.varianceStack[i].resolution].typeResolution) + } + c.markTypeResolutionCircular(c.varianceStack[stackIndex].resolution) minIndex := stackIndex for i := stackIndex + 1; i < len(c.varianceStack); i++ { if c.compareSymbols(c.varianceStack[i].symbol, c.varianceStack[minIndex].symbol) < 0 { @@ -2404,7 +2418,7 @@ func (c *Checker) isResolvingReturnTypeOfSignature(signature *Signature) bool { if signature.getComposite() != nil && core.Some(signature.getComposite().signatures, c.isResolvingReturnTypeOfSignature) { return true } - return signature.resolvedReturnType.get(c) == nil && c.findResolutionCycleStartIndex(signature, TypeSystemPropertyNameResolvedReturnType) >= 0 + return signature.resolvedReturnType.get(c) == nil && c.isResolutionInProgress(signature, TypeSystemPropertyNameResolvedReturnType) } func (c *Checker) findMatchingSignatures(signatureLists [][]*Signature, signature *Signature, listIndex int) []*Signature { diff --git a/tsc/internal/checker/resolutions.go b/tsc/internal/checker/resolutions.go index ba147bc321e2c..b4d3ddd8a7be5 100644 --- a/tsc/internal/checker/resolutions.go +++ b/tsc/internal/checker/resolutions.go @@ -18,10 +18,12 @@ type resolution struct { // A query records the effects of a memoized computation, for replay by // reuse of its result; see memo.go. memo bool + isQuery bool prevMemo int32 // Checker.memoTop on entry result *memoState // Memo state of the result computed effects *memoEffects // Allocated on first use entry *ast.Node // Current node when the computation started + query savedCurrentNode // A type resolution is a computation that re-entering detects as a cycle; // see beginTypeResolution. Its other fields are those of the resolution @@ -69,6 +71,9 @@ func (c *Checker) endResolution() { } c.resolutions[n] = resolution{} c.resolutions = c.resolutions[:n] + if c.circularityStart > n { + c.endCircularity() + } } // resolvingIndex returns 1 + the index in resolutions of the outermost @@ -81,9 +86,13 @@ func (c *Checker) resolvingIndex(key memoKey) int { } // beginResolving records that the resolution about to be pushed computes key, -// unless a computation of key is already in progress. +// unless a computation of key is already in progress, in which case the new +// one re-enters it as the policy of its kind says; see memoReentry. func (c *Checker) beginResolving(key memoKey) { - if _, ok := c.resolving[key]; ok { + if i, ok := c.resolving[key]; ok { + if memoReentry[key.field()] == reentryCircular { + c.markCircular(int(i)) + } return } if c.resolving == nil { diff --git a/tsc/internal/checker/types.go b/tsc/internal/checker/types.go index 86ada6c9fb7b6..9b10af5438862 100644 --- a/tsc/internal/checker/types.go +++ b/tsc/internal/checker/types.go @@ -224,6 +224,18 @@ func (links *ValueSymbolLinks) setWriteType(c *Checker, typ *Type) { links.extra.writeType.set(c, typ) } +// setNewWriteType sets the write type of a symbol being created; see +// memo.setIdentity. +func (links *ValueSymbolLinks) setNewWriteType(c *Checker, typ *Type) { + if links.extra == nil { + if typ == nil { + return + } + links.extra = c.valueSymbolExtraArena.New() + } + links.extra.writeType.setIdentity(c, typ) +} + func (links *ValueSymbolLinks) setNameType(c *Checker, typ *Type) { if links.extra == nil { if typ == nil { @@ -683,6 +695,7 @@ const ( ObjectFlagsCouldContainTypeVariablesComputed ObjectFlags = 1 << 19 // CouldContainTypeVariables flag has been computed ObjectFlagsCouldContainTypeVariables ObjectFlags = 1 << 20 // Type could contain a type variable ObjectFlagsMembersResolved ObjectFlags = 1 << 21 // Members have been resolved + ObjectFlagsMembersResolving ObjectFlags = 1 << 30 // Members are being resolved ObjectFlagsClassOrInterface = ObjectFlagsClass | ObjectFlagsInterface ObjectFlagsRequiresWidening = ObjectFlagsContainsWideningType | ObjectFlagsContainsObjectOrArrayLiteral @@ -1180,6 +1193,9 @@ func (t *StructuredType) getPropertyAt(c *Checker, index int) *ast.Symbol { member = c.getPropertyOfType(lazy.baseTypes[memberInfo.baseIndex], memberInfo.symbol.Name()) } t.properties[index] = member + if c.logResults() { + c.logPropertySlotDiscard(t, lazy, index) + } } return member } @@ -1664,6 +1680,10 @@ func (s *Signature) getResolvedTypePredicate(c *Checker) *TypePredicate { // setResolvedTypePredicate caches the type predicate of the signature, a flag // memo; see initResolvedTypePredicate. func (s *Signature) setResolvedTypePredicate(c *Checker, predicate *TypePredicate) { + if c.logResults() { + old := s.getResolvedTypePredicate(c) + c.logFlagMemoDiscard(func() { s.initResolvedTypePredicate(c, old) }) + } s.initResolvedTypePredicate(c, predicate) c.setFlagMemo(memoKeyOf(s, memoTypePredicate)) } diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).errors.txt index 5c28d3ee0a214..23492f7603f78 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).errors.txt @@ -1,4 +1,5 @@ a.ts(2,24): error TS2716: Type parameter 'T' has a circular default. +b.ts(2,24): error TS2716: Type parameter 'U' has a circular default. ==== a.ts (1 errors) ==== @@ -8,8 +9,10 @@ a.ts(2,24): error TS2716: Type parameter 'T' has a circular default. !!! error TS2716: Type parameter 'T' has a circular default. export declare const a: A; -==== b.ts (0 errors) ==== +==== b.ts (1 errors) ==== import type { A } from "./a"; export interface B { b: U } + ~ +!!! error TS2716: Type parameter 'U' has a circular default. export declare const b: B; \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).types b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).types index 145f91d78caf3..c7a4cbd1e5e66 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).types +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).types @@ -18,5 +18,5 @@ export interface B { b: U } >b : U export declare const b: B; ->b : B> +>b : B diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=isolated).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=isolated).errors.txt new file mode 100644 index 0000000000000..23492f7603f78 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=isolated).errors.txt @@ -0,0 +1,18 @@ +a.ts(2,24): error TS2716: Type parameter 'T' has a circular default. +b.ts(2,24): error TS2716: Type parameter 'U' has a circular default. + + +==== a.ts (1 errors) ==== + import type { B } from "./b"; + export interface A { a: T } + ~ +!!! error TS2716: Type parameter 'T' has a circular default. + export declare const a: A; + +==== b.ts (1 errors) ==== + import type { A } from "./a"; + export interface B { b: U } + ~ +!!! error TS2716: Type parameter 'U' has a circular default. + export declare const b: B; + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).errors.txt index 4dee4171e029f..23492f7603f78 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).errors.txt @@ -1,9 +1,12 @@ +a.ts(2,24): error TS2716: Type parameter 'T' has a circular default. b.ts(2,24): error TS2716: Type parameter 'U' has a circular default. -==== a.ts (0 errors) ==== +==== a.ts (1 errors) ==== import type { B } from "./b"; export interface A { a: T } + ~ +!!! error TS2716: Type parameter 'T' has a circular default. export declare const a: A; ==== b.ts (1 errors) ==== diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).types b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).types index a88d998c374ec..c7a4cbd1e5e66 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).types +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).types @@ -8,7 +8,7 @@ export interface A { a: T } >a : T export declare const a: A; ->a : A> +>a : A === b.ts === import type { A } from "./a"; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).errors.txt deleted file mode 100644 index 22ee511f52182..0000000000000 --- a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).errors.txt +++ /dev/null @@ -1,22 +0,0 @@ -checkOrderLateBoundMembers.ts(6,9): error TS2300: Duplicate identifier 'foo'. -checkOrderLateBoundMembers.ts(7,5): error TS2300: Duplicate identifier 'foo'. -checkOrderLateBoundMembers.ts(8,9): error TS2300: Duplicate identifier 'foo'. - - -==== checkOrderLateBoundMembers.ts (3 errors) ==== - // Resolving the name in a computed property name looks it up in the members - // of the enclosing interface. That must not late-bind those same members, - // or the accessors would not merge with the property when asked first. - const foo = "foo" - interface I { - get [foo](): number; - ~~~~~ -!!! error TS2300: Duplicate identifier 'foo'. - foo: number; - ~~~ -!!! error TS2300: Duplicate identifier 'foo'. - set [foo](value: number); - ~~~~~ -!!! error TS2300: Duplicate identifier 'foo'. - } - \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).symbols index 5d947b8a60834..5387d7a163cae 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).symbols +++ b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).symbols @@ -11,14 +11,14 @@ interface I { >I : Symbol(I, Decl(checkOrderLateBoundMembers.ts, 3, 17)) get [foo](): number; ->[foo] : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>[foo] : Symbol(I[foo], Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) >foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) foo: number; ->foo : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>foo : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24)) set [foo](value: number); ->[foo] : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>[foo] : Symbol(I[foo], Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) >foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) >value : Symbol(value, Decl(checkOrderLateBoundMembers.ts, 7, 14)) } diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).errors.txt deleted file mode 100644 index 22ee511f52182..0000000000000 --- a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).errors.txt +++ /dev/null @@ -1,22 +0,0 @@ -checkOrderLateBoundMembers.ts(6,9): error TS2300: Duplicate identifier 'foo'. -checkOrderLateBoundMembers.ts(7,5): error TS2300: Duplicate identifier 'foo'. -checkOrderLateBoundMembers.ts(8,9): error TS2300: Duplicate identifier 'foo'. - - -==== checkOrderLateBoundMembers.ts (3 errors) ==== - // Resolving the name in a computed property name looks it up in the members - // of the enclosing interface. That must not late-bind those same members, - // or the accessors would not merge with the property when asked first. - const foo = "foo" - interface I { - get [foo](): number; - ~~~~~ -!!! error TS2300: Duplicate identifier 'foo'. - foo: number; - ~~~ -!!! error TS2300: Duplicate identifier 'foo'. - set [foo](value: number); - ~~~~~ -!!! error TS2300: Duplicate identifier 'foo'. - } - \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).symbols index 5d947b8a60834..5387d7a163cae 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).symbols +++ b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).symbols @@ -11,14 +11,14 @@ interface I { >I : Symbol(I, Decl(checkOrderLateBoundMembers.ts, 3, 17)) get [foo](): number; ->[foo] : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>[foo] : Symbol(I[foo], Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) >foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) foo: number; ->foo : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>foo : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24)) set [foo](value: number); ->[foo] : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>[foo] : Symbol(I[foo], Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) >foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) >value : Symbol(value, Decl(checkOrderLateBoundMembers.ts, 7, 14)) } diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).errors.txt deleted file mode 100644 index 22ee511f52182..0000000000000 --- a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).errors.txt +++ /dev/null @@ -1,22 +0,0 @@ -checkOrderLateBoundMembers.ts(6,9): error TS2300: Duplicate identifier 'foo'. -checkOrderLateBoundMembers.ts(7,5): error TS2300: Duplicate identifier 'foo'. -checkOrderLateBoundMembers.ts(8,9): error TS2300: Duplicate identifier 'foo'. - - -==== checkOrderLateBoundMembers.ts (3 errors) ==== - // Resolving the name in a computed property name looks it up in the members - // of the enclosing interface. That must not late-bind those same members, - // or the accessors would not merge with the property when asked first. - const foo = "foo" - interface I { - get [foo](): number; - ~~~~~ -!!! error TS2300: Duplicate identifier 'foo'. - foo: number; - ~~~ -!!! error TS2300: Duplicate identifier 'foo'. - set [foo](value: number); - ~~~~~ -!!! error TS2300: Duplicate identifier 'foo'. - } - \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).symbols index 5d947b8a60834..5387d7a163cae 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).symbols +++ b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).symbols @@ -11,14 +11,14 @@ interface I { >I : Symbol(I, Decl(checkOrderLateBoundMembers.ts, 3, 17)) get [foo](): number; ->[foo] : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>[foo] : Symbol(I[foo], Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) >foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) foo: number; ->foo : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>foo : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24)) set [foo](value: number); ->[foo] : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>[foo] : Symbol(I[foo], Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) >foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) >value : Symbol(value, Decl(checkOrderLateBoundMembers.ts, 7, 14)) } diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).errors.txt deleted file mode 100644 index 22ee511f52182..0000000000000 --- a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).errors.txt +++ /dev/null @@ -1,22 +0,0 @@ -checkOrderLateBoundMembers.ts(6,9): error TS2300: Duplicate identifier 'foo'. -checkOrderLateBoundMembers.ts(7,5): error TS2300: Duplicate identifier 'foo'. -checkOrderLateBoundMembers.ts(8,9): error TS2300: Duplicate identifier 'foo'. - - -==== checkOrderLateBoundMembers.ts (3 errors) ==== - // Resolving the name in a computed property name looks it up in the members - // of the enclosing interface. That must not late-bind those same members, - // or the accessors would not merge with the property when asked first. - const foo = "foo" - interface I { - get [foo](): number; - ~~~~~ -!!! error TS2300: Duplicate identifier 'foo'. - foo: number; - ~~~ -!!! error TS2300: Duplicate identifier 'foo'. - set [foo](value: number); - ~~~~~ -!!! error TS2300: Duplicate identifier 'foo'. - } - \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).symbols index 5d947b8a60834..5387d7a163cae 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).symbols +++ b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).symbols @@ -11,14 +11,14 @@ interface I { >I : Symbol(I, Decl(checkOrderLateBoundMembers.ts, 3, 17)) get [foo](): number; ->[foo] : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>[foo] : Symbol(I[foo], Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) >foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) foo: number; ->foo : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>foo : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24)) set [foo](value: number); ->[foo] : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>[foo] : Symbol(I[foo], Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) >foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) >value : Symbol(value, Decl(checkOrderLateBoundMembers.ts, 7, 14)) } diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).js b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).js index 433d0bfbb69b5..47ff5eb53d06e 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).js +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).js @@ -56,20 +56,13 @@ module.exports = { v: { ...M } }; //// [xb.d.ts] -declare const _exports: { - v: {}; -}; +declare const _exports: any; export = _exports; //// [mb.d.ts] export { v as pb } from "./xb"; export declare const mb = 1; //// [xa.d.ts] -declare const _exports: { - v: { - pb: {}; - mb: 1; - }; -}; +declare const _exports: any; export = _exports; //// [ma.d.ts] export { v as pa } from "./xa"; @@ -77,10 +70,7 @@ export declare const ma = 1; //// [ia.d.ts] declare const _exports: { v: { - pa: { - pb: {}; - mb: 1; - }; + pa: any; ma: 1; }; }; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).symbols index 4359b0af3b06c..913c8813bf3aa 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).symbols +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).symbols @@ -14,7 +14,6 @@ module.exports = { v: { ...M } }; === /ma.js === export { v as pa } from "./xa"; ->v : Symbol(v, Decl(xa.js, 2, 18)) >pa : Symbol(pa, Decl(ma.js, 0, 8)) export const ma = 1; @@ -22,7 +21,6 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; ->v : Symbol(v, Decl(xb.js, 2, 18)) >pb : Symbol(pb, Decl(mb.js, 0, 8)) export const mb = 1; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).types b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).types index 216ad9304dfd7..51c929a492fd4 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).types +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).types @@ -7,19 +7,19 @@ const M = /** @type {any} */ (null); >(null) : any module.exports = { v: { ...M } }; ->module.exports = { v: { ...M } } : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->module.exports : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->module : { exports: { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; }; } ->exports : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->{ v: { ...M } } : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->v : { pa: { pb: {}; mb: 1; }; ma: 1; } ->{ ...M } : { pa: { pb: {}; mb: 1; }; ma: 1; } +>module.exports = { v: { ...M } } : { v: { pa: any; ma: 1; }; } +>module.exports : { v: { pa: any; ma: 1; }; } +>module : { exports: { v: { pa: any; ma: 1; }; }; } +>exports : { v: { pa: any; ma: 1; }; } +>{ v: { ...M } } : { v: { pa: any; ma: 1; }; } +>v : { pa: any; ma: 1; } +>{ ...M } : { pa: any; ma: 1; } >M : typeof import("./ma") === /ma.js === export { v as pa } from "./xa"; ->v : { pb: {}; mb: 1; } ->pa : { pb: {}; mb: 1; } +>v : any +>pa : any export const ma = 1; >ma : 1 @@ -27,8 +27,8 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; ->v : {} ->pb : {} +>v : any +>pb : any export const mb = 1; >mb : 1 @@ -41,13 +41,13 @@ const M = /** @type {any} */ (null); >(null) : any module.exports = { v: { ...M } }; ->module.exports = { v: { ...M } } : { v: { pb: {}; mb: 1; }; } ->module.exports : { v: { pb: {}; mb: 1; }; } ->module : { exports: { v: { pb: {}; mb: 1; }; }; } ->exports : { v: { pb: {}; mb: 1; }; } ->{ v: { ...M } } : { v: { pb: {}; mb: 1; }; } ->v : { pb: {}; mb: 1; } ->{ ...M } : { pb: {}; mb: 1; } +>module.exports = { v: { ...M } } : { v: { pb: any; mb: 1; }; } +>module.exports : any +>module : { exports: any; } +>exports : any +>{ v: { ...M } } : { v: { pb: any; mb: 1; }; } +>v : { pb: any; mb: 1; } +>{ ...M } : { pb: any; mb: 1; } >M : typeof import("./mb") === /xb.js === @@ -57,12 +57,12 @@ const M = /** @type {any} */ (null); >(null) : any module.exports = { v: { ...M } }; ->module.exports = { v: { ...M } } : { v: {}; } ->module.exports : { v: {}; } ->module : { exports: { v: {}; }; } ->exports : { v: {}; } ->{ v: { ...M } } : { v: {}; } ->v : {} ->{ ...M } : {} +>module.exports = { v: { ...M } } : { v: { pa: any; ma: 1; }; } +>module.exports : any +>module : { exports: any; } +>exports : any +>{ v: { ...M } } : { v: { pa: any; ma: 1; }; } +>v : { pa: any; ma: 1; } +>{ ...M } : { pa: any; ma: 1; } >M : typeof import("./ma") diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).js b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).js index 433d0bfbb69b5..47ff5eb53d06e 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).js +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).js @@ -56,20 +56,13 @@ module.exports = { v: { ...M } }; //// [xb.d.ts] -declare const _exports: { - v: {}; -}; +declare const _exports: any; export = _exports; //// [mb.d.ts] export { v as pb } from "./xb"; export declare const mb = 1; //// [xa.d.ts] -declare const _exports: { - v: { - pb: {}; - mb: 1; - }; -}; +declare const _exports: any; export = _exports; //// [ma.d.ts] export { v as pa } from "./xa"; @@ -77,10 +70,7 @@ export declare const ma = 1; //// [ia.d.ts] declare const _exports: { v: { - pa: { - pb: {}; - mb: 1; - }; + pa: any; ma: 1; }; }; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).symbols index 4359b0af3b06c..913c8813bf3aa 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).symbols +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).symbols @@ -14,7 +14,6 @@ module.exports = { v: { ...M } }; === /ma.js === export { v as pa } from "./xa"; ->v : Symbol(v, Decl(xa.js, 2, 18)) >pa : Symbol(pa, Decl(ma.js, 0, 8)) export const ma = 1; @@ -22,7 +21,6 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; ->v : Symbol(v, Decl(xb.js, 2, 18)) >pb : Symbol(pb, Decl(mb.js, 0, 8)) export const mb = 1; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).types b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).types index 216ad9304dfd7..51c929a492fd4 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).types +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).types @@ -7,19 +7,19 @@ const M = /** @type {any} */ (null); >(null) : any module.exports = { v: { ...M } }; ->module.exports = { v: { ...M } } : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->module.exports : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->module : { exports: { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; }; } ->exports : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->{ v: { ...M } } : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->v : { pa: { pb: {}; mb: 1; }; ma: 1; } ->{ ...M } : { pa: { pb: {}; mb: 1; }; ma: 1; } +>module.exports = { v: { ...M } } : { v: { pa: any; ma: 1; }; } +>module.exports : { v: { pa: any; ma: 1; }; } +>module : { exports: { v: { pa: any; ma: 1; }; }; } +>exports : { v: { pa: any; ma: 1; }; } +>{ v: { ...M } } : { v: { pa: any; ma: 1; }; } +>v : { pa: any; ma: 1; } +>{ ...M } : { pa: any; ma: 1; } >M : typeof import("./ma") === /ma.js === export { v as pa } from "./xa"; ->v : { pb: {}; mb: 1; } ->pa : { pb: {}; mb: 1; } +>v : any +>pa : any export const ma = 1; >ma : 1 @@ -27,8 +27,8 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; ->v : {} ->pb : {} +>v : any +>pb : any export const mb = 1; >mb : 1 @@ -41,13 +41,13 @@ const M = /** @type {any} */ (null); >(null) : any module.exports = { v: { ...M } }; ->module.exports = { v: { ...M } } : { v: { pb: {}; mb: 1; }; } ->module.exports : { v: { pb: {}; mb: 1; }; } ->module : { exports: { v: { pb: {}; mb: 1; }; }; } ->exports : { v: { pb: {}; mb: 1; }; } ->{ v: { ...M } } : { v: { pb: {}; mb: 1; }; } ->v : { pb: {}; mb: 1; } ->{ ...M } : { pb: {}; mb: 1; } +>module.exports = { v: { ...M } } : { v: { pb: any; mb: 1; }; } +>module.exports : any +>module : { exports: any; } +>exports : any +>{ v: { ...M } } : { v: { pb: any; mb: 1; }; } +>v : { pb: any; mb: 1; } +>{ ...M } : { pb: any; mb: 1; } >M : typeof import("./mb") === /xb.js === @@ -57,12 +57,12 @@ const M = /** @type {any} */ (null); >(null) : any module.exports = { v: { ...M } }; ->module.exports = { v: { ...M } } : { v: {}; } ->module.exports : { v: {}; } ->module : { exports: { v: {}; }; } ->exports : { v: {}; } ->{ v: { ...M } } : { v: {}; } ->v : {} ->{ ...M } : {} +>module.exports = { v: { ...M } } : { v: { pa: any; ma: 1; }; } +>module.exports : any +>module : { exports: any; } +>exports : any +>{ v: { ...M } } : { v: { pa: any; ma: 1; }; } +>v : { pa: any; ma: 1; } +>{ ...M } : { pa: any; ma: 1; } >M : typeof import("./ma") diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).js b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).js index 433d0bfbb69b5..47ff5eb53d06e 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).js +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).js @@ -56,20 +56,13 @@ module.exports = { v: { ...M } }; //// [xb.d.ts] -declare const _exports: { - v: {}; -}; +declare const _exports: any; export = _exports; //// [mb.d.ts] export { v as pb } from "./xb"; export declare const mb = 1; //// [xa.d.ts] -declare const _exports: { - v: { - pb: {}; - mb: 1; - }; -}; +declare const _exports: any; export = _exports; //// [ma.d.ts] export { v as pa } from "./xa"; @@ -77,10 +70,7 @@ export declare const ma = 1; //// [ia.d.ts] declare const _exports: { v: { - pa: { - pb: {}; - mb: 1; - }; + pa: any; ma: 1; }; }; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).symbols index 4359b0af3b06c..913c8813bf3aa 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).symbols +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).symbols @@ -14,7 +14,6 @@ module.exports = { v: { ...M } }; === /ma.js === export { v as pa } from "./xa"; ->v : Symbol(v, Decl(xa.js, 2, 18)) >pa : Symbol(pa, Decl(ma.js, 0, 8)) export const ma = 1; @@ -22,7 +21,6 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; ->v : Symbol(v, Decl(xb.js, 2, 18)) >pb : Symbol(pb, Decl(mb.js, 0, 8)) export const mb = 1; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).types b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).types index 216ad9304dfd7..51c929a492fd4 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).types +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).types @@ -7,19 +7,19 @@ const M = /** @type {any} */ (null); >(null) : any module.exports = { v: { ...M } }; ->module.exports = { v: { ...M } } : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->module.exports : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->module : { exports: { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; }; } ->exports : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->{ v: { ...M } } : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->v : { pa: { pb: {}; mb: 1; }; ma: 1; } ->{ ...M } : { pa: { pb: {}; mb: 1; }; ma: 1; } +>module.exports = { v: { ...M } } : { v: { pa: any; ma: 1; }; } +>module.exports : { v: { pa: any; ma: 1; }; } +>module : { exports: { v: { pa: any; ma: 1; }; }; } +>exports : { v: { pa: any; ma: 1; }; } +>{ v: { ...M } } : { v: { pa: any; ma: 1; }; } +>v : { pa: any; ma: 1; } +>{ ...M } : { pa: any; ma: 1; } >M : typeof import("./ma") === /ma.js === export { v as pa } from "./xa"; ->v : { pb: {}; mb: 1; } ->pa : { pb: {}; mb: 1; } +>v : any +>pa : any export const ma = 1; >ma : 1 @@ -27,8 +27,8 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; ->v : {} ->pb : {} +>v : any +>pb : any export const mb = 1; >mb : 1 @@ -41,13 +41,13 @@ const M = /** @type {any} */ (null); >(null) : any module.exports = { v: { ...M } }; ->module.exports = { v: { ...M } } : { v: { pb: {}; mb: 1; }; } ->module.exports : { v: { pb: {}; mb: 1; }; } ->module : { exports: { v: { pb: {}; mb: 1; }; }; } ->exports : { v: { pb: {}; mb: 1; }; } ->{ v: { ...M } } : { v: { pb: {}; mb: 1; }; } ->v : { pb: {}; mb: 1; } ->{ ...M } : { pb: {}; mb: 1; } +>module.exports = { v: { ...M } } : { v: { pb: any; mb: 1; }; } +>module.exports : any +>module : { exports: any; } +>exports : any +>{ v: { ...M } } : { v: { pb: any; mb: 1; }; } +>v : { pb: any; mb: 1; } +>{ ...M } : { pb: any; mb: 1; } >M : typeof import("./mb") === /xb.js === @@ -57,12 +57,12 @@ const M = /** @type {any} */ (null); >(null) : any module.exports = { v: { ...M } }; ->module.exports = { v: { ...M } } : { v: {}; } ->module.exports : { v: {}; } ->module : { exports: { v: {}; }; } ->exports : { v: {}; } ->{ v: { ...M } } : { v: {}; } ->v : {} ->{ ...M } : {} +>module.exports = { v: { ...M } } : { v: { pa: any; ma: 1; }; } +>module.exports : any +>module : { exports: any; } +>exports : any +>{ v: { ...M } } : { v: { pa: any; ma: 1; }; } +>v : { pa: any; ma: 1; } +>{ ...M } : { pa: any; ma: 1; } >M : typeof import("./ma") diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).js b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).js index 433d0bfbb69b5..47ff5eb53d06e 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).js +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).js @@ -56,20 +56,13 @@ module.exports = { v: { ...M } }; //// [xb.d.ts] -declare const _exports: { - v: {}; -}; +declare const _exports: any; export = _exports; //// [mb.d.ts] export { v as pb } from "./xb"; export declare const mb = 1; //// [xa.d.ts] -declare const _exports: { - v: { - pb: {}; - mb: 1; - }; -}; +declare const _exports: any; export = _exports; //// [ma.d.ts] export { v as pa } from "./xa"; @@ -77,10 +70,7 @@ export declare const ma = 1; //// [ia.d.ts] declare const _exports: { v: { - pa: { - pb: {}; - mb: 1; - }; + pa: any; ma: 1; }; }; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).symbols index 4359b0af3b06c..913c8813bf3aa 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).symbols +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).symbols @@ -14,7 +14,6 @@ module.exports = { v: { ...M } }; === /ma.js === export { v as pa } from "./xa"; ->v : Symbol(v, Decl(xa.js, 2, 18)) >pa : Symbol(pa, Decl(ma.js, 0, 8)) export const ma = 1; @@ -22,7 +21,6 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; ->v : Symbol(v, Decl(xb.js, 2, 18)) >pb : Symbol(pb, Decl(mb.js, 0, 8)) export const mb = 1; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).types index 216ad9304dfd7..51c929a492fd4 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).types +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).types @@ -7,19 +7,19 @@ const M = /** @type {any} */ (null); >(null) : any module.exports = { v: { ...M } }; ->module.exports = { v: { ...M } } : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->module.exports : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->module : { exports: { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; }; } ->exports : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->{ v: { ...M } } : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->v : { pa: { pb: {}; mb: 1; }; ma: 1; } ->{ ...M } : { pa: { pb: {}; mb: 1; }; ma: 1; } +>module.exports = { v: { ...M } } : { v: { pa: any; ma: 1; }; } +>module.exports : { v: { pa: any; ma: 1; }; } +>module : { exports: { v: { pa: any; ma: 1; }; }; } +>exports : { v: { pa: any; ma: 1; }; } +>{ v: { ...M } } : { v: { pa: any; ma: 1; }; } +>v : { pa: any; ma: 1; } +>{ ...M } : { pa: any; ma: 1; } >M : typeof import("./ma") === /ma.js === export { v as pa } from "./xa"; ->v : { pb: {}; mb: 1; } ->pa : { pb: {}; mb: 1; } +>v : any +>pa : any export const ma = 1; >ma : 1 @@ -27,8 +27,8 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; ->v : {} ->pb : {} +>v : any +>pb : any export const mb = 1; >mb : 1 @@ -41,13 +41,13 @@ const M = /** @type {any} */ (null); >(null) : any module.exports = { v: { ...M } }; ->module.exports = { v: { ...M } } : { v: { pb: {}; mb: 1; }; } ->module.exports : { v: { pb: {}; mb: 1; }; } ->module : { exports: { v: { pb: {}; mb: 1; }; }; } ->exports : { v: { pb: {}; mb: 1; }; } ->{ v: { ...M } } : { v: { pb: {}; mb: 1; }; } ->v : { pb: {}; mb: 1; } ->{ ...M } : { pb: {}; mb: 1; } +>module.exports = { v: { ...M } } : { v: { pb: any; mb: 1; }; } +>module.exports : any +>module : { exports: any; } +>exports : any +>{ v: { ...M } } : { v: { pb: any; mb: 1; }; } +>v : { pb: any; mb: 1; } +>{ ...M } : { pb: any; mb: 1; } >M : typeof import("./mb") === /xb.js === @@ -57,12 +57,12 @@ const M = /** @type {any} */ (null); >(null) : any module.exports = { v: { ...M } }; ->module.exports = { v: { ...M } } : { v: {}; } ->module.exports : { v: {}; } ->module : { exports: { v: {}; }; } ->exports : { v: {}; } ->{ v: { ...M } } : { v: {}; } ->v : {} ->{ ...M } : {} +>module.exports = { v: { ...M } } : { v: { pa: any; ma: 1; }; } +>module.exports : any +>module : { exports: any; } +>exports : any +>{ v: { ...M } } : { v: { pa: any; ma: 1; }; } +>v : { pa: any; ma: 1; } +>{ ...M } : { pa: any; ma: 1; } >M : typeof import("./ma") diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).errors.txt index 735d4e676a17d..a547413430b10 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=default).errors.txt @@ -1,4 +1,7 @@ +a.ts(2,12): error TS2589: Type instantiation is excessively deep and possibly infinite. a.ts(2,15): error TS2589: Type instantiation is excessively deep and possibly infinite. +b.ts(2,12): error TS2589: Type instantiation is excessively deep and possibly infinite. +b.ts(2,15): error TS2589: Type instantiation is excessively deep and possibly infinite. ==== lib.ts (0 errors) ==== @@ -9,15 +12,21 @@ a.ts(2,15): error TS2589: Type instantiation is excessively deep and possibly in export type Recur = N extends 0 ? S : Recur, `${S}_${S}`>; -==== a.ts (1 errors) ==== +==== a.ts (2 errors) ==== import { Recur } from "./lib"; export let a: Recur<5, "a">; + ~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. ~~~~~~~~~~~~~ !!! error TS2589: Type instantiation is excessively deep and possibly infinite. -==== b.ts (0 errors) ==== +==== b.ts (2 errors) ==== import { Recur } from "./lib"; export let b: Recur<5, "a">; + ~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. + ~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. ==== c.ts (0 errors) ==== class T { diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).errors.txt index 6e370b78d30f9..a547413430b10 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=reverse).errors.txt @@ -1,3 +1,6 @@ +a.ts(2,12): error TS2589: Type instantiation is excessively deep and possibly infinite. +a.ts(2,15): error TS2589: Type instantiation is excessively deep and possibly infinite. +b.ts(2,12): error TS2589: Type instantiation is excessively deep and possibly infinite. b.ts(2,15): error TS2589: Type instantiation is excessively deep and possibly infinite. @@ -9,13 +12,19 @@ b.ts(2,15): error TS2589: Type instantiation is excessively deep and possibly in export type Recur = N extends 0 ? S : Recur, `${S}_${S}`>; -==== a.ts (0 errors) ==== +==== a.ts (2 errors) ==== import { Recur } from "./lib"; export let a: Recur<5, "a">; + ~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. + ~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. -==== b.ts (1 errors) ==== +==== b.ts (2 errors) ==== import { Recur } from "./lib"; export let b: Recur<5, "a">; + ~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. ~~~~~~~~~~~~~ !!! error TS2589: Type instantiation is excessively deep and possibly infinite. diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).errors.txt index 735d4e676a17d..a547413430b10 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/checkOrderStableInstantiationErrors(checkorder=typesfirst).errors.txt @@ -1,4 +1,7 @@ +a.ts(2,12): error TS2589: Type instantiation is excessively deep and possibly infinite. a.ts(2,15): error TS2589: Type instantiation is excessively deep and possibly infinite. +b.ts(2,12): error TS2589: Type instantiation is excessively deep and possibly infinite. +b.ts(2,15): error TS2589: Type instantiation is excessively deep and possibly infinite. ==== lib.ts (0 errors) ==== @@ -9,15 +12,21 @@ a.ts(2,15): error TS2589: Type instantiation is excessively deep and possibly in export type Recur = N extends 0 ? S : Recur, `${S}_${S}`>; -==== a.ts (1 errors) ==== +==== a.ts (2 errors) ==== import { Recur } from "./lib"; export let a: Recur<5, "a">; + ~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. ~~~~~~~~~~~~~ !!! error TS2589: Type instantiation is excessively deep and possibly infinite. -==== b.ts (0 errors) ==== +==== b.ts (2 errors) ==== import { Recur } from "./lib"; export let b: Recur<5, "a">; + ~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. + ~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. ==== c.ts (0 errors) ==== class T { diff --git a/tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=typesfirst).types index e6b4d1fca90ca..2b01358a33dca 100644 --- a/tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=typesfirst).types +++ b/tsc/testdata/baselines/reference/compiler/circularAccessorAnnotations(checkorder=typesfirst).types @@ -2,23 +2,23 @@ === circularAccessorAnnotations.ts === declare const c1: { ->c1 : { readonly foo: any; } +>c1 : { readonly foo: typeof c1.foo; } get foo(): typeof c1.foo; >foo : any >c1.foo : any ->c1 : { readonly foo: any; } +>c1 : { readonly foo: typeof c1.foo; } >foo : any } declare const c2: { ->c2 : { foo: any; } +>c2 : { foo: typeof c2.foo; } set foo(value: typeof c2.foo); >foo : any >value : any >c2.foo : any ->c2 : { foo: any; } +>c2 : { foo: typeof c2.foo; } >foo : any } diff --git a/tsc/testdata/baselines/reference/compiler/circularIndexedPropertyInstantiation.errors.txt b/tsc/testdata/baselines/reference/compiler/circularIndexedPropertyInstantiation.errors.txt index 3322a7ea25b66..1d225438007a0 100644 --- a/tsc/testdata/baselines/reference/compiler/circularIndexedPropertyInstantiation.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/circularIndexedPropertyInstantiation.errors.txt @@ -1,12 +1,15 @@ +circularIndexedPropertyInstantiation.ts(4,5): error TS5114: Instantiations of type 'Foo' appear infinitely circular. circularIndexedPropertyInstantiation.ts(4,9): error TS5114: Instantiations of type 'Foo' appear infinitely circular. circularIndexedPropertyInstantiation.ts(5,13): error TS2344: Type '"false"' does not satisfy the constraint '"true"'. -==== circularIndexedPropertyInstantiation.ts (2 errors) ==== +==== circularIndexedPropertyInstantiation.ts (3 errors) ==== // Repro from #14837 type Foo = { "true": Foo> }[T]; let f1: Foo<"true", {}>; + ~~ +!!! error TS5114: Instantiations of type 'Foo' appear infinitely circular. ~~~~~~~~~~~~~~~ !!! error TS5114: Instantiations of type 'Foo' appear infinitely circular. let f2: Foo<"false", {}>; diff --git a/tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=default).errors.txt b/tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=default).errors.txt index 8d568d19a5373..61ac052a41c80 100644 --- a/tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=default).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=default).errors.txt @@ -1,7 +1,8 @@ circularInlineMappedGenericTupleTypeNoCrash.ts(11,12): error TS2589: Type instantiation is excessively deep and possibly infinite. +circularInlineMappedGenericTupleTypeNoCrash.ts(11,60): error TS2589: Type instantiation is excessively deep and possibly infinite. -==== circularInlineMappedGenericTupleTypeNoCrash.ts (1 errors) ==== +==== circularInlineMappedGenericTupleTypeNoCrash.ts (2 errors) ==== class Foo { public readonly elements: { [P in keyof Elements]: { bar: Elements[P] } }; @@ -14,6 +15,8 @@ circularInlineMappedGenericTupleTypeNoCrash.ts(11,12): error TS2589: Type instan public add(): Foo<[...Elements, "abc"]> { return new Foo<[...Elements, "abc"]>(...this.elements, { bar: "abc" }); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. + ~~~~~~~~~~~~~~ !!! error TS2589: Type instantiation is excessively deep and possibly infinite. } } diff --git a/tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=typesfirst).errors.txt index 8d568d19a5373..61ac052a41c80 100644 --- a/tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=typesfirst).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/circularInlineMappedGenericTupleTypeNoCrash(checkorder=typesfirst).errors.txt @@ -1,7 +1,8 @@ circularInlineMappedGenericTupleTypeNoCrash.ts(11,12): error TS2589: Type instantiation is excessively deep and possibly infinite. +circularInlineMappedGenericTupleTypeNoCrash.ts(11,60): error TS2589: Type instantiation is excessively deep and possibly infinite. -==== circularInlineMappedGenericTupleTypeNoCrash.ts (1 errors) ==== +==== circularInlineMappedGenericTupleTypeNoCrash.ts (2 errors) ==== class Foo { public readonly elements: { [P in keyof Elements]: { bar: Elements[P] } }; @@ -14,6 +15,8 @@ circularInlineMappedGenericTupleTypeNoCrash.ts(11,12): error TS2589: Type instan public add(): Foo<[...Elements, "abc"]> { return new Foo<[...Elements, "abc"]>(...this.elements, { bar: "abc" }); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. + ~~~~~~~~~~~~~~ !!! error TS2589: Type instantiation is excessively deep and possibly infinite. } } diff --git a/tsc/testdata/baselines/reference/compiler/circularReferenceInReturnType2.types b/tsc/testdata/baselines/reference/compiler/circularReferenceInReturnType2.types index 4dbb229f1a8ba..1a6dae9f5f0df 100644 --- a/tsc/testdata/baselines/reference/compiler/circularReferenceInReturnType2.types +++ b/tsc/testdata/baselines/reference/compiler/circularReferenceInReturnType2.types @@ -94,12 +94,12 @@ const A = object()({ fields: () => ({ >fields : () => any >() => ({ a: field({ type: A, resolve() { return { foo: 100, }; }, }), }) : () => any ->({ a: field({ type: A, resolve() { return { foo: 100, }; }, }), }) : { a: Field; } ->{ a: field({ type: A, resolve() { return { foo: 100, }; }, }), } : { a: Field; } +>({ a: field({ type: A, resolve() { return { foo: 100, }; }, }), }) : { a: Field; } +>{ a: field({ type: A, resolve() { return { foo: 100, }; }, }), } : { a: Field; } a: field({ ->a : Field ->field({ type: A, resolve() { return { foo: 100, }; }, }) : Field +>a : Field +>field({ type: A, resolve() { return { foo: 100, }; }, }) : Field >field : , Key extends string>(field: FieldFuncArgs) => Field >{ type: A, resolve() { return { foo: 100, }; }, } : { type: any; resolve(): { foo: number; }; } diff --git a/tsc/testdata/baselines/reference/compiler/contextualCheckInDiscardedCycle.symbols b/tsc/testdata/baselines/reference/compiler/contextualCheckInDiscardedCycle.symbols new file mode 100644 index 0000000000000..3169a3c3cbd08 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/contextualCheckInDiscardedCycle.symbols @@ -0,0 +1,150 @@ +//// [tests/cases/compiler/contextualCheckInDiscardedCycle.ts] //// + +=== returnTypeCycle.ts === +// Callbacks contextually checked while a cycle is in progress are checked +// again once it is discarded, with their contextual parameter types. + +declare function useCallback(callback: T): T; +>useCallback : Symbol(useCallback, Decl(returnTypeCycle.ts, 0, 0)) +>T : Symbol(T, Decl(returnTypeCycle.ts, 3, 29)) +>Function : Symbol(Function, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.decorators.d.ts, --, --)) +>callback : Symbol(callback, Decl(returnTypeCycle.ts, 3, 49)) +>T : Symbol(T, Decl(returnTypeCycle.ts, 3, 29)) +>T : Symbol(T, Decl(returnTypeCycle.ts, 3, 29)) + +declare function refreshAll(options: { ids: string[]; extra: T }): Promise; +>refreshAll : Symbol(refreshAll, Decl(returnTypeCycle.ts, 3, 65)) +>T : Symbol(T, Decl(returnTypeCycle.ts, 4, 28)) +>options : Symbol(options, Decl(returnTypeCycle.ts, 4, 31)) +>ids : Symbol(ids, Decl(returnTypeCycle.ts, 4, 41)) +>extra : Symbol(extra, Decl(returnTypeCycle.ts, 4, 56)) +>T : Symbol(T, Decl(returnTypeCycle.ts, 4, 28)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +>T : Symbol(T, Decl(returnTypeCycle.ts, 4, 28)) + +interface View { +>View : Symbol(View, Decl(returnTypeCycle.ts, 4, 81)) + + refresh: (force?: boolean) => Promise; +>refresh : Symbol(View.refresh, Decl(returnTypeCycle.ts, 6, 16)) +>force : Symbol(force, Decl(returnTypeCycle.ts, 7, 14)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +} + +declare const items: { id: string }[]; +>items : Symbol(items, Decl(returnTypeCycle.ts, 10, 13)) +>id : Symbol(id, Decl(returnTypeCycle.ts, 10, 22)) + +function useView(): View { +>useView : Symbol(useView, Decl(returnTypeCycle.ts, 10, 38)) +>View : Symbol(View, Decl(returnTypeCycle.ts, 4, 81)) + + const refresh = useCallback((force?: boolean) => +>refresh : Symbol(refresh, Decl(returnTypeCycle.ts, 13, 9)) +>useCallback : Symbol(useCallback, Decl(returnTypeCycle.ts, 0, 0)) +>force : Symbol(force, Decl(returnTypeCycle.ts, 13, 33)) + + refreshAll({ +>refreshAll : Symbol(refreshAll, Decl(returnTypeCycle.ts, 3, 65)) + + ids: items.map(({ id }) => id), +>ids : Symbol(ids, Decl(returnTypeCycle.ts, 14, 20)) +>items.map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) +>items : Symbol(items, Decl(returnTypeCycle.ts, 10, 13)) +>map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) +>id : Symbol(id, Decl(returnTypeCycle.ts, 15, 29)) +>id : Symbol(id, Decl(returnTypeCycle.ts, 15, 29)) + + extra: 1, +>extra : Symbol(extra, Decl(returnTypeCycle.ts, 15, 43)) + + })); + return { refresh }; +>refresh : Symbol(refresh, Decl(returnTypeCycle.ts, 18, 12)) +} + +=== yieldOperandCycle.ts === +interface Eff { +>Eff : Symbol(Eff, Decl(yieldOperandCycle.ts, 0, 0)) +>A : Symbol(A, Decl(yieldOperandCycle.ts, 0, 14)) +>E : Symbol(E, Decl(yieldOperandCycle.ts, 0, 16)) + + [Symbol.iterator](): Generator, A, any>; +>[Symbol.iterator] : Symbol(Eff[Symbol.iterator], Decl(yieldOperandCycle.ts, 0, 21)) +>Symbol.iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) +>Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2019.symbol.d.ts, --, --)) +>iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) +>Generator : Symbol(Generator, Decl(lib.es2015.generator.d.ts, --, --)) +>Eff : Symbol(Eff, Decl(yieldOperandCycle.ts, 0, 0)) +>A : Symbol(A, Decl(yieldOperandCycle.ts, 0, 14)) +>E : Symbol(E, Decl(yieldOperandCycle.ts, 0, 16)) +>A : Symbol(A, Decl(yieldOperandCycle.ts, 0, 14)) + + pipe(f: (self: Eff) => B): B; +>pipe : Symbol(Eff.pipe, Decl(yieldOperandCycle.ts, 1, 54)) +>B : Symbol(B, Decl(yieldOperandCycle.ts, 2, 9)) +>f : Symbol(f, Decl(yieldOperandCycle.ts, 2, 12)) +>self : Symbol(self, Decl(yieldOperandCycle.ts, 2, 16)) +>Eff : Symbol(Eff, Decl(yieldOperandCycle.ts, 0, 0)) +>A : Symbol(A, Decl(yieldOperandCycle.ts, 0, 14)) +>E : Symbol(E, Decl(yieldOperandCycle.ts, 0, 16)) +>B : Symbol(B, Decl(yieldOperandCycle.ts, 2, 9)) +>B : Symbol(B, Decl(yieldOperandCycle.ts, 2, 9)) +} +declare function mapError(f: (e: E) => E2): (self: Eff) => Eff; +>mapError : Symbol(mapError, Decl(yieldOperandCycle.ts, 3, 1)) +>E : Symbol(E, Decl(yieldOperandCycle.ts, 4, 26)) +>E2 : Symbol(E2, Decl(yieldOperandCycle.ts, 4, 28)) +>f : Symbol(f, Decl(yieldOperandCycle.ts, 4, 33)) +>e : Symbol(e, Decl(yieldOperandCycle.ts, 4, 37)) +>E : Symbol(E, Decl(yieldOperandCycle.ts, 4, 26)) +>E2 : Symbol(E2, Decl(yieldOperandCycle.ts, 4, 28)) +>A : Symbol(A, Decl(yieldOperandCycle.ts, 4, 52)) +>self : Symbol(self, Decl(yieldOperandCycle.ts, 4, 55)) +>Eff : Symbol(Eff, Decl(yieldOperandCycle.ts, 0, 0)) +>A : Symbol(A, Decl(yieldOperandCycle.ts, 4, 52)) +>E : Symbol(E, Decl(yieldOperandCycle.ts, 4, 26)) +>Eff : Symbol(Eff, Decl(yieldOperandCycle.ts, 0, 0)) +>A : Symbol(A, Decl(yieldOperandCycle.ts, 4, 52)) +>E2 : Symbol(E2, Decl(yieldOperandCycle.ts, 4, 28)) + +declare function fn(body: (input: number) => Generator): (input: number) => Eff; +>fn : Symbol(fn, Decl(yieldOperandCycle.ts, 4, 86)) +>Y : Symbol(Y, Decl(yieldOperandCycle.ts, 5, 20)) +>R : Symbol(R, Decl(yieldOperandCycle.ts, 5, 22)) +>body : Symbol(body, Decl(yieldOperandCycle.ts, 5, 26)) +>input : Symbol(input, Decl(yieldOperandCycle.ts, 5, 33)) +>Generator : Symbol(Generator, Decl(lib.es2015.generator.d.ts, --, --)) +>Y : Symbol(Y, Decl(yieldOperandCycle.ts, 5, 20)) +>R : Symbol(R, Decl(yieldOperandCycle.ts, 5, 22)) +>input : Symbol(input, Decl(yieldOperandCycle.ts, 5, 75)) +>Eff : Symbol(Eff, Decl(yieldOperandCycle.ts, 0, 0)) +>R : Symbol(R, Decl(yieldOperandCycle.ts, 5, 22)) + +declare function make(s: T): T; +>make : Symbol(make, Decl(yieldOperandCycle.ts, 5, 107)) +>T : Symbol(T, Decl(yieldOperandCycle.ts, 6, 22)) +>s : Symbol(s, Decl(yieldOperandCycle.ts, 6, 40)) +>T : Symbol(T, Decl(yieldOperandCycle.ts, 6, 22)) +>T : Symbol(T, Decl(yieldOperandCycle.ts, 6, 22)) + +declare const uuid: Eff; +>uuid : Symbol(uuid, Decl(yieldOperandCycle.ts, 7, 13)) +>Eff : Symbol(Eff, Decl(yieldOperandCycle.ts, 0, 0)) +>Error : Symbol(Error, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2022.error.d.ts, --, --)) + +fn(function* (input) { +>fn : Symbol(fn, Decl(yieldOperandCycle.ts, 4, 86)) +>input : Symbol(input, Decl(yieldOperandCycle.ts, 9, 14)) + + make(yield* uuid.pipe(mapError((cause) => ({ cause })))); +>make : Symbol(make, Decl(yieldOperandCycle.ts, 5, 107)) +>uuid.pipe : Symbol(Eff.pipe, Decl(yieldOperandCycle.ts, 1, 54)) +>uuid : Symbol(uuid, Decl(yieldOperandCycle.ts, 7, 13)) +>pipe : Symbol(Eff.pipe, Decl(yieldOperandCycle.ts, 1, 54)) +>mapError : Symbol(mapError, Decl(yieldOperandCycle.ts, 3, 1)) +>cause : Symbol(cause, Decl(yieldOperandCycle.ts, 10, 36)) +>cause : Symbol(cause, Decl(yieldOperandCycle.ts, 10, 48)) + +}); + diff --git a/tsc/testdata/baselines/reference/compiler/contextualCheckInDiscardedCycle.types b/tsc/testdata/baselines/reference/compiler/contextualCheckInDiscardedCycle.types new file mode 100644 index 0000000000000..7506ea748391e --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/contextualCheckInDiscardedCycle.types @@ -0,0 +1,117 @@ +//// [tests/cases/compiler/contextualCheckInDiscardedCycle.ts] //// + +=== returnTypeCycle.ts === +// Callbacks contextually checked while a cycle is in progress are checked +// again once it is discarded, with their contextual parameter types. + +declare function useCallback(callback: T): T; +>useCallback : (callback: T) => T +>callback : T + +declare function refreshAll(options: { ids: string[]; extra: T }): Promise; +>refreshAll : (options: { ids: string[]; extra: T; }) => Promise +>options : { ids: string[]; extra: T; } +>ids : string[] +>extra : T + +interface View { + refresh: (force?: boolean) => Promise; +>refresh : (force?: boolean) => Promise +>force : boolean | undefined +} + +declare const items: { id: string }[]; +>items : { id: string; }[] +>id : string + +function useView(): View { +>useView : () => View + + const refresh = useCallback((force?: boolean) => +>refresh : (force?: boolean) => Promise +>useCallback((force?: boolean) => refreshAll({ ids: items.map(({ id }) => id), extra: 1, })) : (force?: boolean) => Promise +>useCallback : (callback: T) => T +>(force?: boolean) => refreshAll({ ids: items.map(({ id }) => id), extra: 1, }) : (force?: boolean) => Promise +>force : boolean | undefined + + refreshAll({ +>refreshAll({ ids: items.map(({ id }) => id), extra: 1, }) : Promise +>refreshAll : (options: { ids: string[]; extra: T; }) => Promise +>{ ids: items.map(({ id }) => id), extra: 1, } : { ids: string[]; extra: number; } + + ids: items.map(({ id }) => id), +>ids : string[] +>items.map(({ id }) => id) : string[] +>items.map : (callbackfn: (value: { id: string; }, index: number, array: { id: string; }[]) => U, thisArg?: any) => U[] +>items : { id: string; }[] +>map : (callbackfn: (value: { id: string; }, index: number, array: { id: string; }[]) => U, thisArg?: any) => U[] +>({ id }) => id : ({ id }: { id: string; }) => string +>id : string +>id : string + + extra: 1, +>extra : number +>1 : 1 + + })); + return { refresh }; +>{ refresh } : { refresh: (force?: boolean) => Promise; } +>refresh : (force?: boolean) => Promise +} + +=== yieldOperandCycle.ts === +interface Eff { + [Symbol.iterator](): Generator, A, any>; +>[Symbol.iterator] : () => Generator, A, any> +>Symbol.iterator : unique symbol +>Symbol : SymbolConstructor +>iterator : unique symbol + + pipe(f: (self: Eff) => B): B; +>pipe : (f: (self: Eff) => B) => B +>f : (self: Eff) => B +>self : Eff +} +declare function mapError(f: (e: E) => E2): (self: Eff) => Eff; +>mapError : (f: (e: E) => E2) => (self: Eff) => Eff +>f : (e: E) => E2 +>e : E +>self : Eff + +declare function fn(body: (input: number) => Generator): (input: number) => Eff; +>fn : (body: (input: number) => Generator) => (input: number) => Eff +>body : (input: number) => Generator +>input : number +>input : number + +declare function make(s: T): T; +>make : (s: T) => T +>s : T + +declare const uuid: Eff; +>uuid : Eff + +fn(function* (input) { +>fn(function* (input) { make(yield* uuid.pipe(mapError((cause) => ({ cause }))));}) : (input: number) => Eff +>fn : (body: (input: number) => Generator) => (input: number) => Eff +>function* (input) { make(yield* uuid.pipe(mapError((cause) => ({ cause }))));} : (input: number) => Generator, void, any> +>input : number + + make(yield* uuid.pipe(mapError((cause) => ({ cause })))); +>make(yield* uuid.pipe(mapError((cause) => ({ cause })))) : string +>make : (s: T) => T +>yield* uuid.pipe(mapError((cause) => ({ cause }))) : string +>uuid.pipe(mapError((cause) => ({ cause }))) : Eff +>uuid.pipe : (f: (self: Eff) => B) => B +>uuid : Eff +>pipe : (f: (self: Eff) => B) => B +>mapError((cause) => ({ cause })) : (self: Eff) => Eff +>mapError : (f: (e: E) => E2) => (self: Eff) => Eff +>(cause) => ({ cause }) : (cause: Error) => { cause: Error; } +>cause : Error +>({ cause }) : { cause: Error; } +>{ cause } : { cause: Error; } +>cause : Error + +}); + diff --git a/tsc/testdata/baselines/reference/compiler/contextualCheckReentryAfterParameters.symbols b/tsc/testdata/baselines/reference/compiler/contextualCheckReentryAfterParameters.symbols new file mode 100644 index 0000000000000..695dd85162edd --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/contextualCheckReentryAfterParameters.symbols @@ -0,0 +1,181 @@ +//// [tests/cases/compiler/contextualCheckReentryAfterParameters.ts] //// + +=== contextualCheckReentryAfterParameters.ts === +// Instantiating the type predicate inside the nested callback re-enters the +// contextual check of the enclosing functions through their outer type +// parameters. That must not discard the parameter types assigned to them. + +type Surface = { id: string; kind: "file"; path: string } | { id: string; kind: "terminal" }; +>Surface : Symbol(Surface, Decl(contextualCheckReentryAfterParameters.ts, 0, 0)) +>id : Symbol(id, Decl(contextualCheckReentryAfterParameters.ts, 4, 16)) +>kind : Symbol(kind, Decl(contextualCheckReentryAfterParameters.ts, 4, 28)) +>path : Symbol(path, Decl(contextualCheckReentryAfterParameters.ts, 4, 42)) +>id : Symbol(id, Decl(contextualCheckReentryAfterParameters.ts, 4, 61)) +>kind : Symbol(kind, Decl(contextualCheckReentryAfterParameters.ts, 4, 73)) + +interface Panel { +>Panel : Symbol(Panel, Decl(contextualCheckReentryAfterParameters.ts, 4, 93)) + + surfaces: Surface[]; +>surfaces : Symbol(Panel.surfaces, Decl(contextualCheckReentryAfterParameters.ts, 5, 17)) +>Surface : Symbol(Surface, Decl(contextualCheckReentryAfterParameters.ts, 0, 0)) +} +interface Store { +>Store : Symbol(Store, Decl(contextualCheckReentryAfterParameters.ts, 7, 1)) + + panel: Panel; +>panel : Symbol(Store.panel, Decl(contextualCheckReentryAfterParameters.ts, 8, 17)) +>Panel : Symbol(Panel, Decl(contextualCheckReentryAfterParameters.ts, 4, 93)) + + openFile: (path: string) => void; +>openFile : Symbol(Store.openFile, Decl(contextualCheckReentryAfterParameters.ts, 9, 17)) +>path : Symbol(path, Decl(contextualCheckReentryAfterParameters.ts, 10, 15)) + + close: (id: string) => void; +>close : Symbol(Store.close, Decl(contextualCheckReentryAfterParameters.ts, 10, 37)) +>id : Symbol(id, Decl(contextualCheckReentryAfterParameters.ts, 11, 12)) +} +type Creator = (set: (update: (state: T) => Partial) => void) => T; +>Creator : Symbol(Creator, Decl(contextualCheckReentryAfterParameters.ts, 12, 1)) +>T : Symbol(T, Decl(contextualCheckReentryAfterParameters.ts, 13, 13)) +>set : Symbol(set, Decl(contextualCheckReentryAfterParameters.ts, 13, 19)) +>update : Symbol(update, Decl(contextualCheckReentryAfterParameters.ts, 13, 25)) +>state : Symbol(state, Decl(contextualCheckReentryAfterParameters.ts, 13, 34)) +>T : Symbol(T, Decl(contextualCheckReentryAfterParameters.ts, 13, 13)) +>Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --)) +>T : Symbol(T, Decl(contextualCheckReentryAfterParameters.ts, 13, 13)) +>T : Symbol(T, Decl(contextualCheckReentryAfterParameters.ts, 13, 13)) + +declare function create(init: Creator): T; +>create : Symbol(create, Decl(contextualCheckReentryAfterParameters.ts, 13, 73)) +>T : Symbol(T, Decl(contextualCheckReentryAfterParameters.ts, 14, 24)) +>init : Symbol(init, Decl(contextualCheckReentryAfterParameters.ts, 14, 27)) +>Creator : Symbol(Creator, Decl(contextualCheckReentryAfterParameters.ts, 12, 1)) +>T : Symbol(T, Decl(contextualCheckReentryAfterParameters.ts, 14, 24)) +>T : Symbol(T, Decl(contextualCheckReentryAfterParameters.ts, 14, 24)) + +declare function wrap(init: Creator): Creator; +>wrap : Symbol(wrap, Decl(contextualCheckReentryAfterParameters.ts, 14, 48)) +>T : Symbol(T, Decl(contextualCheckReentryAfterParameters.ts, 15, 22)) +>init : Symbol(init, Decl(contextualCheckReentryAfterParameters.ts, 15, 25)) +>Creator : Symbol(Creator, Decl(contextualCheckReentryAfterParameters.ts, 12, 1)) +>T : Symbol(T, Decl(contextualCheckReentryAfterParameters.ts, 15, 22)) +>Creator : Symbol(Creator, Decl(contextualCheckReentryAfterParameters.ts, 12, 1)) +>T : Symbol(T, Decl(contextualCheckReentryAfterParameters.ts, 15, 22)) + +const update = (state: Store, updater: (current: Panel) => Panel): Partial => ({ panel: updater(state.panel) }); +>update : Symbol(update, Decl(contextualCheckReentryAfterParameters.ts, 17, 5)) +>state : Symbol(state, Decl(contextualCheckReentryAfterParameters.ts, 17, 16)) +>Store : Symbol(Store, Decl(contextualCheckReentryAfterParameters.ts, 7, 1)) +>updater : Symbol(updater, Decl(contextualCheckReentryAfterParameters.ts, 17, 29)) +>current : Symbol(current, Decl(contextualCheckReentryAfterParameters.ts, 17, 40)) +>Panel : Symbol(Panel, Decl(contextualCheckReentryAfterParameters.ts, 4, 93)) +>Panel : Symbol(Panel, Decl(contextualCheckReentryAfterParameters.ts, 4, 93)) +>Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --)) +>Store : Symbol(Store, Decl(contextualCheckReentryAfterParameters.ts, 7, 1)) +>panel : Symbol(panel, Decl(contextualCheckReentryAfterParameters.ts, 17, 87)) +>updater : Symbol(updater, Decl(contextualCheckReentryAfterParameters.ts, 17, 29)) +>state.panel : Symbol(Store.panel, Decl(contextualCheckReentryAfterParameters.ts, 8, 17)) +>state : Symbol(state, Decl(contextualCheckReentryAfterParameters.ts, 17, 16)) +>panel : Symbol(Store.panel, Decl(contextualCheckReentryAfterParameters.ts, 8, 17)) + +export const store = create(wrap((set) => ({ +>store : Symbol(store, Decl(contextualCheckReentryAfterParameters.ts, 19, 12)) +>create : Symbol(create, Decl(contextualCheckReentryAfterParameters.ts, 13, 73)) +>Store : Symbol(Store, Decl(contextualCheckReentryAfterParameters.ts, 7, 1)) +>wrap : Symbol(wrap, Decl(contextualCheckReentryAfterParameters.ts, 14, 48)) +>set : Symbol(set, Decl(contextualCheckReentryAfterParameters.ts, 19, 41)) + + panel: { surfaces: [] }, +>panel : Symbol(panel, Decl(contextualCheckReentryAfterParameters.ts, 19, 51)) +>surfaces : Symbol(surfaces, Decl(contextualCheckReentryAfterParameters.ts, 20, 12)) + + openFile: (path) => +>openFile : Symbol(openFile, Decl(contextualCheckReentryAfterParameters.ts, 20, 28)) +>path : Symbol(path, Decl(contextualCheckReentryAfterParameters.ts, 21, 15)) + + set((state) => +>set : Symbol(set, Decl(contextualCheckReentryAfterParameters.ts, 19, 41)) +>state : Symbol(state, Decl(contextualCheckReentryAfterParameters.ts, 22, 13)) + + update(state, (current) => { +>update : Symbol(update, Decl(contextualCheckReentryAfterParameters.ts, 17, 5)) +>state : Symbol(state, Decl(contextualCheckReentryAfterParameters.ts, 22, 13)) +>current : Symbol(current, Decl(contextualCheckReentryAfterParameters.ts, 23, 27)) + + const existing = current.surfaces.find( +>existing : Symbol(existing, Decl(contextualCheckReentryAfterParameters.ts, 24, 21)) +>current.surfaces.find : Symbol(Array.find, Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --)) +>current.surfaces : Symbol(Panel.surfaces, Decl(contextualCheckReentryAfterParameters.ts, 5, 17)) +>current : Symbol(current, Decl(contextualCheckReentryAfterParameters.ts, 23, 27)) +>surfaces : Symbol(Panel.surfaces, Decl(contextualCheckReentryAfterParameters.ts, 5, 17)) +>find : Symbol(Array.find, Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --)) + + (surface): surface is Extract => surface.kind === "file" && surface.path === path, +>surface : Symbol(surface, Decl(contextualCheckReentryAfterParameters.ts, 25, 21)) +>surface : Symbol(surface, Decl(contextualCheckReentryAfterParameters.ts, 25, 21)) +>Extract : Symbol(Extract, Decl(lib.es5.d.ts, --, --)) +>Surface : Symbol(Surface, Decl(contextualCheckReentryAfterParameters.ts, 0, 0)) +>kind : Symbol(kind, Decl(contextualCheckReentryAfterParameters.ts, 25, 60)) +>surface.kind : Symbol(kind, Decl(contextualCheckReentryAfterParameters.ts, 4, 28), Decl(contextualCheckReentryAfterParameters.ts, 4, 73)) +>surface : Symbol(surface, Decl(contextualCheckReentryAfterParameters.ts, 25, 21)) +>kind : Symbol(kind, Decl(contextualCheckReentryAfterParameters.ts, 4, 28), Decl(contextualCheckReentryAfterParameters.ts, 4, 73)) +>surface.path : Symbol(path, Decl(contextualCheckReentryAfterParameters.ts, 4, 42)) +>surface : Symbol(surface, Decl(contextualCheckReentryAfterParameters.ts, 25, 21)) +>path : Symbol(path, Decl(contextualCheckReentryAfterParameters.ts, 4, 42)) +>path : Symbol(path, Decl(contextualCheckReentryAfterParameters.ts, 21, 15)) + + ); + return existing ? current : { surfaces: [...current.surfaces, { id: path, kind: "file", path }] }; +>existing : Symbol(existing, Decl(contextualCheckReentryAfterParameters.ts, 24, 21)) +>current : Symbol(current, Decl(contextualCheckReentryAfterParameters.ts, 23, 27)) +>surfaces : Symbol(surfaces, Decl(contextualCheckReentryAfterParameters.ts, 27, 45)) +>current.surfaces : Symbol(Panel.surfaces, Decl(contextualCheckReentryAfterParameters.ts, 5, 17)) +>current : Symbol(current, Decl(contextualCheckReentryAfterParameters.ts, 23, 27)) +>surfaces : Symbol(Panel.surfaces, Decl(contextualCheckReentryAfterParameters.ts, 5, 17)) +>id : Symbol(id, Decl(contextualCheckReentryAfterParameters.ts, 27, 79)) +>path : Symbol(path, Decl(contextualCheckReentryAfterParameters.ts, 21, 15)) +>kind : Symbol(kind, Decl(contextualCheckReentryAfterParameters.ts, 27, 89)) +>path : Symbol(path, Decl(contextualCheckReentryAfterParameters.ts, 27, 103)) + + }) + ), + close: (id) => +>close : Symbol(close, Decl(contextualCheckReentryAfterParameters.ts, 29, 10)) +>id : Symbol(id, Decl(contextualCheckReentryAfterParameters.ts, 30, 12)) + + set((state) => +>set : Symbol(set, Decl(contextualCheckReentryAfterParameters.ts, 19, 41)) +>state : Symbol(state, Decl(contextualCheckReentryAfterParameters.ts, 31, 13)) + + update(state, (current) => { +>update : Symbol(update, Decl(contextualCheckReentryAfterParameters.ts, 17, 5)) +>state : Symbol(state, Decl(contextualCheckReentryAfterParameters.ts, 31, 13)) +>current : Symbol(current, Decl(contextualCheckReentryAfterParameters.ts, 32, 27)) + + const index = current.surfaces.findIndex((entry) => entry.id === id); +>index : Symbol(index, Decl(contextualCheckReentryAfterParameters.ts, 33, 21)) +>current.surfaces.findIndex : Symbol(Array.findIndex, Decl(lib.es2015.core.d.ts, --, --)) +>current.surfaces : Symbol(Panel.surfaces, Decl(contextualCheckReentryAfterParameters.ts, 5, 17)) +>current : Symbol(current, Decl(contextualCheckReentryAfterParameters.ts, 32, 27)) +>surfaces : Symbol(Panel.surfaces, Decl(contextualCheckReentryAfterParameters.ts, 5, 17)) +>findIndex : Symbol(Array.findIndex, Decl(lib.es2015.core.d.ts, --, --)) +>entry : Symbol(entry, Decl(contextualCheckReentryAfterParameters.ts, 33, 58)) +>entry.id : Symbol(id, Decl(contextualCheckReentryAfterParameters.ts, 4, 16), Decl(contextualCheckReentryAfterParameters.ts, 4, 61)) +>entry : Symbol(entry, Decl(contextualCheckReentryAfterParameters.ts, 33, 58)) +>id : Symbol(id, Decl(contextualCheckReentryAfterParameters.ts, 4, 16), Decl(contextualCheckReentryAfterParameters.ts, 4, 61)) +>id : Symbol(id, Decl(contextualCheckReentryAfterParameters.ts, 30, 12)) + + return { surfaces: current.surfaces.slice(index) }; +>surfaces : Symbol(surfaces, Decl(contextualCheckReentryAfterParameters.ts, 34, 24)) +>current.surfaces.slice : Symbol(Array.slice, Decl(lib.es5.d.ts, --, --)) +>current.surfaces : Symbol(Panel.surfaces, Decl(contextualCheckReentryAfterParameters.ts, 5, 17)) +>current : Symbol(current, Decl(contextualCheckReentryAfterParameters.ts, 32, 27)) +>surfaces : Symbol(Panel.surfaces, Decl(contextualCheckReentryAfterParameters.ts, 5, 17)) +>slice : Symbol(Array.slice, Decl(lib.es5.d.ts, --, --)) +>index : Symbol(index, Decl(contextualCheckReentryAfterParameters.ts, 33, 21)) + + }) + ), +}))); + diff --git a/tsc/testdata/baselines/reference/compiler/contextualCheckReentryAfterParameters.types b/tsc/testdata/baselines/reference/compiler/contextualCheckReentryAfterParameters.types new file mode 100644 index 0000000000000..0fcb1000bcab9 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/contextualCheckReentryAfterParameters.types @@ -0,0 +1,190 @@ +//// [tests/cases/compiler/contextualCheckReentryAfterParameters.ts] //// + +=== contextualCheckReentryAfterParameters.ts === +// Instantiating the type predicate inside the nested callback re-enters the +// contextual check of the enclosing functions through their outer type +// parameters. That must not discard the parameter types assigned to them. + +type Surface = { id: string; kind: "file"; path: string } | { id: string; kind: "terminal" }; +>Surface : Surface +>id : string +>kind : "file" +>path : string +>id : string +>kind : "terminal" + +interface Panel { + surfaces: Surface[]; +>surfaces : Surface[] +} +interface Store { + panel: Panel; +>panel : Panel + + openFile: (path: string) => void; +>openFile : (path: string) => void +>path : string + + close: (id: string) => void; +>close : (id: string) => void +>id : string +} +type Creator = (set: (update: (state: T) => Partial) => void) => T; +>Creator : Creator +>set : (update: (state: T) => Partial) => void +>update : (state: T) => Partial +>state : T + +declare function create(init: Creator): T; +>create : (init: Creator) => T +>init : Creator + +declare function wrap(init: Creator): Creator; +>wrap : (init: Creator) => Creator +>init : Creator + +const update = (state: Store, updater: (current: Panel) => Panel): Partial => ({ panel: updater(state.panel) }); +>update : (state: Store, updater: (current: Panel) => Panel) => Partial +>(state: Store, updater: (current: Panel) => Panel): Partial => ({ panel: updater(state.panel) }) : (state: Store, updater: (current: Panel) => Panel) => Partial +>state : Store +>updater : (current: Panel) => Panel +>current : Panel +>({ panel: updater(state.panel) }) : { panel: Panel; } +>{ panel: updater(state.panel) } : { panel: Panel; } +>panel : Panel +>updater(state.panel) : Panel +>updater : (current: Panel) => Panel +>state.panel : Panel +>state : Store +>panel : Panel + +export const store = create(wrap((set) => ({ +>store : Store +>create(wrap((set) => ({ panel: { surfaces: [] }, openFile: (path) => set((state) => update(state, (current) => { const existing = current.surfaces.find( (surface): surface is Extract => surface.kind === "file" && surface.path === path, ); return existing ? current : { surfaces: [...current.surfaces, { id: path, kind: "file", path }] }; }) ), close: (id) => set((state) => update(state, (current) => { const index = current.surfaces.findIndex((entry) => entry.id === id); return { surfaces: current.surfaces.slice(index) }; }) ),}))) : Store +>create : (init: Creator) => T +>wrap((set) => ({ panel: { surfaces: [] }, openFile: (path) => set((state) => update(state, (current) => { const existing = current.surfaces.find( (surface): surface is Extract => surface.kind === "file" && surface.path === path, ); return existing ? current : { surfaces: [...current.surfaces, { id: path, kind: "file", path }] }; }) ), close: (id) => set((state) => update(state, (current) => { const index = current.surfaces.findIndex((entry) => entry.id === id); return { surfaces: current.surfaces.slice(index) }; }) ),})) : Creator +>wrap : (init: Creator) => Creator +>(set) => ({ panel: { surfaces: [] }, openFile: (path) => set((state) => update(state, (current) => { const existing = current.surfaces.find( (surface): surface is Extract => surface.kind === "file" && surface.path === path, ); return existing ? current : { surfaces: [...current.surfaces, { id: path, kind: "file", path }] }; }) ), close: (id) => set((state) => update(state, (current) => { const index = current.surfaces.findIndex((entry) => entry.id === id); return { surfaces: current.surfaces.slice(index) }; }) ),}) : (set: (update: (state: Store) => Partial) => void) => { panel: { surfaces: never[]; }; openFile: (path: string) => void; close: (id: string) => void; } +>set : (update: (state: Store) => Partial) => void +>({ panel: { surfaces: [] }, openFile: (path) => set((state) => update(state, (current) => { const existing = current.surfaces.find( (surface): surface is Extract => surface.kind === "file" && surface.path === path, ); return existing ? current : { surfaces: [...current.surfaces, { id: path, kind: "file", path }] }; }) ), close: (id) => set((state) => update(state, (current) => { const index = current.surfaces.findIndex((entry) => entry.id === id); return { surfaces: current.surfaces.slice(index) }; }) ),}) : { panel: { surfaces: never[]; }; openFile: (path: string) => void; close: (id: string) => void; } +>{ panel: { surfaces: [] }, openFile: (path) => set((state) => update(state, (current) => { const existing = current.surfaces.find( (surface): surface is Extract => surface.kind === "file" && surface.path === path, ); return existing ? current : { surfaces: [...current.surfaces, { id: path, kind: "file", path }] }; }) ), close: (id) => set((state) => update(state, (current) => { const index = current.surfaces.findIndex((entry) => entry.id === id); return { surfaces: current.surfaces.slice(index) }; }) ),} : { panel: { surfaces: never[]; }; openFile: (path: string) => void; close: (id: string) => void; } + + panel: { surfaces: [] }, +>panel : { surfaces: never[]; } +>{ surfaces: [] } : { surfaces: never[]; } +>surfaces : never[] +>[] : never[] + + openFile: (path) => +>openFile : (path: string) => void +>(path) => set((state) => update(state, (current) => { const existing = current.surfaces.find( (surface): surface is Extract => surface.kind === "file" && surface.path === path, ); return existing ? current : { surfaces: [...current.surfaces, { id: path, kind: "file", path }] }; }) ) : (path: string) => void +>path : string + + set((state) => +>set((state) => update(state, (current) => { const existing = current.surfaces.find( (surface): surface is Extract => surface.kind === "file" && surface.path === path, ); return existing ? current : { surfaces: [...current.surfaces, { id: path, kind: "file", path }] }; }) ) : void +>set : (update: (state: Store) => Partial) => void +>(state) => update(state, (current) => { const existing = current.surfaces.find( (surface): surface is Extract => surface.kind === "file" && surface.path === path, ); return existing ? current : { surfaces: [...current.surfaces, { id: path, kind: "file", path }] }; }) : (state: Store) => Partial +>state : Store + + update(state, (current) => { +>update(state, (current) => { const existing = current.surfaces.find( (surface): surface is Extract => surface.kind === "file" && surface.path === path, ); return existing ? current : { surfaces: [...current.surfaces, { id: path, kind: "file", path }] }; }) : Partial +>update : (state: Store, updater: (current: Panel) => Panel) => Partial +>state : Store +>(current) => { const existing = current.surfaces.find( (surface): surface is Extract => surface.kind === "file" && surface.path === path, ); return existing ? current : { surfaces: [...current.surfaces, { id: path, kind: "file", path }] }; } : (current: Panel) => Panel +>current : Panel + + const existing = current.surfaces.find( +>existing : { id: string; kind: "file"; path: string; } | undefined +>current.surfaces.find( (surface): surface is Extract => surface.kind === "file" && surface.path === path, ) : { id: string; kind: "file"; path: string; } | undefined +>current.surfaces.find : { (predicate: (value: Surface, index: number, obj: Surface[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: Surface, index: number, obj: Surface[]) => unknown, thisArg?: any): Surface | undefined; } +>current.surfaces : Surface[] +>current : Panel +>surfaces : Surface[] +>find : { (predicate: (value: Surface, index: number, obj: Surface[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: Surface, index: number, obj: Surface[]) => unknown, thisArg?: any): Surface | undefined; } + + (surface): surface is Extract => surface.kind === "file" && surface.path === path, +>(surface): surface is Extract => surface.kind === "file" && surface.path === path : (surface: Surface) => surface is Extract +>surface : Surface +>kind : "file" +>surface.kind === "file" && surface.path === path : boolean +>surface.kind === "file" : boolean +>surface.kind : "file" | "terminal" +>surface : Surface +>kind : "file" | "terminal" +>"file" : "file" +>surface.path === path : boolean +>surface.path : string +>surface : { id: string; kind: "file"; path: string; } +>path : string +>path : string + + ); + return existing ? current : { surfaces: [...current.surfaces, { id: path, kind: "file", path }] }; +>existing ? current : { surfaces: [...current.surfaces, { id: path, kind: "file", path }] } : Panel +>existing : { id: string; kind: "file"; path: string; } | undefined +>current : Panel +>{ surfaces: [...current.surfaces, { id: path, kind: "file", path }] } : { surfaces: Surface[]; } +>surfaces : Surface[] +>[...current.surfaces, { id: path, kind: "file", path }] : Surface[] +>...current.surfaces : Surface +>current.surfaces : Surface[] +>current : Panel +>surfaces : Surface[] +>{ id: path, kind: "file", path } : { id: string; kind: "file"; path: string; } +>id : string +>path : string +>kind : "file" +>"file" : "file" +>path : string + + }) + ), + close: (id) => +>close : (id: string) => void +>(id) => set((state) => update(state, (current) => { const index = current.surfaces.findIndex((entry) => entry.id === id); return { surfaces: current.surfaces.slice(index) }; }) ) : (id: string) => void +>id : string + + set((state) => +>set((state) => update(state, (current) => { const index = current.surfaces.findIndex((entry) => entry.id === id); return { surfaces: current.surfaces.slice(index) }; }) ) : void +>set : (update: (state: Store) => Partial) => void +>(state) => update(state, (current) => { const index = current.surfaces.findIndex((entry) => entry.id === id); return { surfaces: current.surfaces.slice(index) }; }) : (state: Store) => Partial +>state : Store + + update(state, (current) => { +>update(state, (current) => { const index = current.surfaces.findIndex((entry) => entry.id === id); return { surfaces: current.surfaces.slice(index) }; }) : Partial +>update : (state: Store, updater: (current: Panel) => Panel) => Partial +>state : Store +>(current) => { const index = current.surfaces.findIndex((entry) => entry.id === id); return { surfaces: current.surfaces.slice(index) }; } : (current: Panel) => { surfaces: Surface[]; } +>current : Panel + + const index = current.surfaces.findIndex((entry) => entry.id === id); +>index : number +>current.surfaces.findIndex((entry) => entry.id === id) : number +>current.surfaces.findIndex : (predicate: (value: Surface, index: number, obj: Surface[]) => unknown, thisArg?: any) => number +>current.surfaces : Surface[] +>current : Panel +>surfaces : Surface[] +>findIndex : (predicate: (value: Surface, index: number, obj: Surface[]) => unknown, thisArg?: any) => number +>(entry) => entry.id === id : (entry: Surface) => boolean +>entry : Surface +>entry.id === id : boolean +>entry.id : string +>entry : Surface +>id : string +>id : string + + return { surfaces: current.surfaces.slice(index) }; +>{ surfaces: current.surfaces.slice(index) } : { surfaces: Surface[]; } +>surfaces : Surface[] +>current.surfaces.slice(index) : Surface[] +>current.surfaces.slice : (start?: number, end?: number) => Surface[] +>current.surfaces : Surface[] +>current : Panel +>surfaces : Surface[] +>slice : (start?: number, end?: number) => Surface[] +>index : number + + }) + ), +}))); + diff --git a/tsc/testdata/baselines/reference/compiler/contextualReturnTypeInSpreadArgument.js b/tsc/testdata/baselines/reference/compiler/contextualReturnTypeInSpreadArgument.js new file mode 100644 index 0000000000000..ca1d3b91449da --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/contextualReturnTypeInSpreadArgument.js @@ -0,0 +1,36 @@ +//// [tests/cases/compiler/contextualReturnTypeInSpreadArgument.ts] //// + +//// [contextualReturnTypeInSpreadArgument.ts] +enum Kind { A, B } + +interface ItemA { kind: Kind.A; name: string } +interface ItemB { kind: Kind.B; size: number } +type Item = ItemA | ItemB; + +declare function create(options: { items?: () => readonly Item[]; label: string }): void; + +function test(flag: boolean) { + create({ + label: "x", + ...(flag ? {} : { + items: () => [{ kind: Kind.A, name: "a" }], + }), + }); +} + + +//// [contextualReturnTypeInSpreadArgument.js] +"use strict"; +var Kind; +(function (Kind) { + Kind[Kind["A"] = 0] = "A"; + Kind[Kind["B"] = 1] = "B"; +})(Kind || (Kind = {})); +function test(flag) { + create({ + label: "x", + ...(flag ? {} : { + items: () => [{ kind: Kind.A, name: "a" }], + }), + }); +} diff --git a/tsc/testdata/baselines/reference/compiler/contextualReturnTypeInSpreadArgument.symbols b/tsc/testdata/baselines/reference/compiler/contextualReturnTypeInSpreadArgument.symbols new file mode 100644 index 0000000000000..0802a21d1a19b --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/contextualReturnTypeInSpreadArgument.symbols @@ -0,0 +1,59 @@ +//// [tests/cases/compiler/contextualReturnTypeInSpreadArgument.ts] //// + +=== contextualReturnTypeInSpreadArgument.ts === +enum Kind { A, B } +>Kind : Symbol(Kind, Decl(contextualReturnTypeInSpreadArgument.ts, 0, 0)) +>A : Symbol(Kind.A, Decl(contextualReturnTypeInSpreadArgument.ts, 0, 11)) +>B : Symbol(Kind.B, Decl(contextualReturnTypeInSpreadArgument.ts, 0, 14)) + +interface ItemA { kind: Kind.A; name: string } +>ItemA : Symbol(ItemA, Decl(contextualReturnTypeInSpreadArgument.ts, 0, 18)) +>kind : Symbol(ItemA.kind, Decl(contextualReturnTypeInSpreadArgument.ts, 2, 17)) +>Kind : Symbol(Kind, Decl(contextualReturnTypeInSpreadArgument.ts, 0, 0)) +>A : Symbol(Kind.A, Decl(contextualReturnTypeInSpreadArgument.ts, 0, 11)) +>name : Symbol(ItemA.name, Decl(contextualReturnTypeInSpreadArgument.ts, 2, 31)) + +interface ItemB { kind: Kind.B; size: number } +>ItemB : Symbol(ItemB, Decl(contextualReturnTypeInSpreadArgument.ts, 2, 46)) +>kind : Symbol(ItemB.kind, Decl(contextualReturnTypeInSpreadArgument.ts, 3, 17)) +>Kind : Symbol(Kind, Decl(contextualReturnTypeInSpreadArgument.ts, 0, 0)) +>B : Symbol(Kind.B, Decl(contextualReturnTypeInSpreadArgument.ts, 0, 14)) +>size : Symbol(ItemB.size, Decl(contextualReturnTypeInSpreadArgument.ts, 3, 31)) + +type Item = ItemA | ItemB; +>Item : Symbol(Item, Decl(contextualReturnTypeInSpreadArgument.ts, 3, 46)) +>ItemA : Symbol(ItemA, Decl(contextualReturnTypeInSpreadArgument.ts, 0, 18)) +>ItemB : Symbol(ItemB, Decl(contextualReturnTypeInSpreadArgument.ts, 2, 46)) + +declare function create(options: { items?: () => readonly Item[]; label: string }): void; +>create : Symbol(create, Decl(contextualReturnTypeInSpreadArgument.ts, 4, 26)) +>options : Symbol(options, Decl(contextualReturnTypeInSpreadArgument.ts, 6, 24)) +>items : Symbol(items, Decl(contextualReturnTypeInSpreadArgument.ts, 6, 34)) +>Item : Symbol(Item, Decl(contextualReturnTypeInSpreadArgument.ts, 3, 46)) +>label : Symbol(label, Decl(contextualReturnTypeInSpreadArgument.ts, 6, 65)) + +function test(flag: boolean) { +>test : Symbol(test, Decl(contextualReturnTypeInSpreadArgument.ts, 6, 89)) +>flag : Symbol(flag, Decl(contextualReturnTypeInSpreadArgument.ts, 8, 14)) + + create({ +>create : Symbol(create, Decl(contextualReturnTypeInSpreadArgument.ts, 4, 26)) + + label: "x", +>label : Symbol(label, Decl(contextualReturnTypeInSpreadArgument.ts, 9, 12)) + + ...(flag ? {} : { +>flag : Symbol(flag, Decl(contextualReturnTypeInSpreadArgument.ts, 8, 14)) + + items: () => [{ kind: Kind.A, name: "a" }], +>items : Symbol(items, Decl(contextualReturnTypeInSpreadArgument.ts, 11, 25)) +>kind : Symbol(kind, Decl(contextualReturnTypeInSpreadArgument.ts, 12, 27)) +>Kind.A : Symbol(Kind.A, Decl(contextualReturnTypeInSpreadArgument.ts, 0, 11)) +>Kind : Symbol(Kind, Decl(contextualReturnTypeInSpreadArgument.ts, 0, 0)) +>A : Symbol(Kind.A, Decl(contextualReturnTypeInSpreadArgument.ts, 0, 11)) +>name : Symbol(name, Decl(contextualReturnTypeInSpreadArgument.ts, 12, 41)) + + }), + }); +} + diff --git a/tsc/testdata/baselines/reference/compiler/contextualReturnTypeInSpreadArgument.types b/tsc/testdata/baselines/reference/compiler/contextualReturnTypeInSpreadArgument.types new file mode 100644 index 0000000000000..6c1780590bad8 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/contextualReturnTypeInSpreadArgument.types @@ -0,0 +1,63 @@ +//// [tests/cases/compiler/contextualReturnTypeInSpreadArgument.ts] //// + +=== contextualReturnTypeInSpreadArgument.ts === +enum Kind { A, B } +>Kind : Kind +>A : Kind.A +>B : Kind.B + +interface ItemA { kind: Kind.A; name: string } +>kind : Kind.A +>Kind : any +>name : string + +interface ItemB { kind: Kind.B; size: number } +>kind : Kind.B +>Kind : any +>size : number + +type Item = ItemA | ItemB; +>Item : Item + +declare function create(options: { items?: () => readonly Item[]; label: string }): void; +>create : (options: { items?: () => readonly Item[]; label: string; }) => void +>options : { items?: () => readonly Item[]; label: string; } +>items : (() => readonly Item[]) | undefined +>label : string + +function test(flag: boolean) { +>test : (flag: boolean) => void +>flag : boolean + + create({ +>create({ label: "x", ...(flag ? {} : { items: () => [{ kind: Kind.A, name: "a" }], }), }) : void +>create : (options: { items?: () => readonly Item[]; label: string; }) => void +>{ label: "x", ...(flag ? {} : { items: () => [{ kind: Kind.A, name: "a" }], }), } : { label: string; items?: (() => { kind: Kind.A; name: string; }[]) | undefined; } + + label: "x", +>label : string +>"x" : "x" + + ...(flag ? {} : { +>(flag ? {} : { items: () => [{ kind: Kind.A, name: "a" }], }) : {} | { items: () => { kind: Kind.A; name: string; }[]; } +>flag ? {} : { items: () => [{ kind: Kind.A, name: "a" }], } : {} | { items: () => { kind: Kind.A; name: string; }[]; } +>flag : boolean +>{} : {} +>{ items: () => [{ kind: Kind.A, name: "a" }], } : { items: () => { kind: Kind.A; name: string; }[]; } + + items: () => [{ kind: Kind.A, name: "a" }], +>items : () => { kind: Kind.A; name: string; }[] +>() => [{ kind: Kind.A, name: "a" }] : () => { kind: Kind.A; name: string; }[] +>[{ kind: Kind.A, name: "a" }] : { kind: Kind.A; name: string; }[] +>{ kind: Kind.A, name: "a" } : { kind: Kind.A; name: string; } +>kind : Kind.A +>Kind.A : Kind.A +>Kind : typeof Kind +>A : Kind.A +>name : string +>"a" : "a" + + }), + }); +} + diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitExternalModuleContainerIndexDeclarationOrder.js b/tsc/testdata/baselines/reference/compiler/declarationEmitExternalModuleContainerIndexDeclarationOrder.js index 935e9baeed1ad..c43a610ffef9d 100644 --- a/tsc/testdata/baselines/reference/compiler/declarationEmitExternalModuleContainerIndexDeclarationOrder.js +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitExternalModuleContainerIndexDeclarationOrder.js @@ -77,5 +77,7 @@ export declare const obsA: { v: 0; }; export declare const obsB: { + pa: 0; + readonly ma: 1; v: 0; }; diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitExternalModuleContainerIndexDeclarationOrder.types b/tsc/testdata/baselines/reference/compiler/declarationEmitExternalModuleContainerIndexDeclarationOrder.types index f7cb243d2a23e..ed5fe02f28302 100644 --- a/tsc/testdata/baselines/reference/compiler/declarationEmitExternalModuleContainerIndexDeclarationOrder.types +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitExternalModuleContainerIndexDeclarationOrder.types @@ -26,8 +26,8 @@ export const obsA = expand(); >expand : () => { [K in keyof X]: X[K]; } export const obsB = expand(); ->obsB : { v: 0; } ->expand() : { v: 0; } +>obsB : { pa: 0; readonly ma: 1; v: 0; } +>expand() : { pa: 0; readonly ma: 1; v: 0; } >expand : () => { [K in keyof X]: X[K]; } === /ambient.d.ts === diff --git a/tsc/testdata/baselines/reference/compiler/duplicateIdentifierChecks.errors.txt b/tsc/testdata/baselines/reference/compiler/duplicateIdentifierChecks.errors.txt index 8ee196cc83acb..6ccaadce52d68 100644 --- a/tsc/testdata/baselines/reference/compiler/duplicateIdentifierChecks.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/duplicateIdentifierChecks.errors.txt @@ -71,20 +71,15 @@ duplicateIdentifierChecks.ts(140,9): error TS2300: Duplicate identifier 'x'. duplicateIdentifierChecks.ts(146,9): error TS2300: Duplicate identifier '[foo]'. duplicateIdentifierChecks.ts(147,5): error TS2300: Duplicate identifier '[foo]'. duplicateIdentifierChecks.ts(148,9): error TS2300: Duplicate identifier '[foo]'. -duplicateIdentifierChecks.ts(152,9): error TS2300: Duplicate identifier 'foo'. -duplicateIdentifierChecks.ts(153,5): error TS2300: Duplicate identifier 'foo'. -duplicateIdentifierChecks.ts(154,9): error TS2300: Duplicate identifier 'foo'. duplicateIdentifierChecks.ts(158,9): error TS2300: Duplicate identifier '[foo]'. duplicateIdentifierChecks.ts(159,9): error TS2300: Duplicate identifier '[foo]'. duplicateIdentifierChecks.ts(160,9): error TS2300: Duplicate identifier '[foo]'. -duplicateIdentifierChecks.ts(164,5): error TS2300: Duplicate identifier 'foo'. -duplicateIdentifierChecks.ts(165,5): error TS2300: Duplicate identifier 'foo'. duplicateIdentifierChecks.ts(169,5): error TS2300: Duplicate identifier 'foo'. duplicateIdentifierChecks.ts(170,5): error TS2300: Duplicate identifier 'foo'. -duplicateIdentifierChecks.ts(171,5): error TS2300: Duplicate identifier 'foo'. +duplicateIdentifierChecks.ts(171,5): error TS2300: Duplicate identifier '[foo]'. duplicateIdentifierChecks.ts(175,5): error TS2300: Duplicate identifier 'foo'. -duplicateIdentifierChecks.ts(176,5): error TS2300: Duplicate identifier 'foo'. -duplicateIdentifierChecks.ts(177,5): error TS2300: Duplicate identifier 'foo'. +duplicateIdentifierChecks.ts(176,5): error TS2300: Duplicate identifier '[foo]'. +duplicateIdentifierChecks.ts(177,5): error TS2300: Duplicate identifier '[foo]'. duplicateIdentifierChecks.ts(181,9): error TS2300: Duplicate identifier '[foo]'. duplicateIdentifierChecks.ts(182,5): error TS2300: Duplicate identifier '[foo]'. duplicateIdentifierChecks.ts(183,9): error TS2300: Duplicate identifier '[foo]'. @@ -102,7 +97,7 @@ duplicateIdentifierChecks.ts(208,5): error TS2300: Duplicate identifier '[sym]'. duplicateIdentifierChecks.ts(209,9): error TS2300: Duplicate identifier '[sym]'. -==== duplicateIdentifierChecks.ts (102 errors) ==== +==== duplicateIdentifierChecks.ts (97 errors) ==== // Every member declaration in the following should produce a duplicate identifier error. interface I1 { @@ -401,14 +396,8 @@ duplicateIdentifierChecks.ts(209,9): error TS2300: Duplicate identifier '[sym]'. interface I11 { get [foo](): number; - ~~~~~ -!!! error TS2300: Duplicate identifier 'foo'. foo: number; - ~~~ -!!! error TS2300: Duplicate identifier 'foo'. set [foo](value: number); - ~~~~~ -!!! error TS2300: Duplicate identifier 'foo'. } interface I12 { @@ -429,11 +418,7 @@ duplicateIdentifierChecks.ts(209,9): error TS2300: Duplicate identifier '[sym]'. interface I13 { foo: number; - ~~~ -!!! error TS2300: Duplicate identifier 'foo'. [foo]: number; - ~~~~~ -!!! error TS2300: Duplicate identifier 'foo'. } interface I14 { @@ -445,7 +430,7 @@ duplicateIdentifierChecks.ts(209,9): error TS2300: Duplicate identifier '[sym]'. !!! error TS2300: Duplicate identifier 'foo'. [foo]: number; ~~~~~ -!!! error TS2300: Duplicate identifier 'foo'. +!!! error TS2300: Duplicate identifier '[foo]'. } interface I15 { @@ -454,10 +439,10 @@ duplicateIdentifierChecks.ts(209,9): error TS2300: Duplicate identifier '[sym]'. !!! error TS2300: Duplicate identifier 'foo'. [foo]: number; ~~~~~ -!!! error TS2300: Duplicate identifier 'foo'. +!!! error TS2300: Duplicate identifier '[foo]'. [foo]: number; ~~~~~ -!!! error TS2300: Duplicate identifier 'foo'. +!!! error TS2300: Duplicate identifier '[foo]'. } declare class C10 { diff --git a/tsc/testdata/baselines/reference/compiler/duplicateIdentifierChecks.symbols b/tsc/testdata/baselines/reference/compiler/duplicateIdentifierChecks.symbols index ee4b6c5df85f7..a4a9f345f0020 100644 --- a/tsc/testdata/baselines/reference/compiler/duplicateIdentifierChecks.symbols +++ b/tsc/testdata/baselines/reference/compiler/duplicateIdentifierChecks.symbols @@ -354,14 +354,14 @@ interface I11 { >I11 : Symbol(I11, Decl(duplicateIdentifierChecks.ts, 148, 1)) get [foo](): number; ->[foo] : Symbol(I11.foo, Decl(duplicateIdentifierChecks.ts, 151, 24), Decl(duplicateIdentifierChecks.ts, 150, 15), Decl(duplicateIdentifierChecks.ts, 152, 16)) +>[foo] : Symbol(I11[foo], Decl(duplicateIdentifierChecks.ts, 150, 15), Decl(duplicateIdentifierChecks.ts, 152, 16)) >foo : Symbol(foo, Decl(duplicateIdentifierChecks.ts, 142, 5)) foo: number; ->foo : Symbol(I11.foo, Decl(duplicateIdentifierChecks.ts, 151, 24), Decl(duplicateIdentifierChecks.ts, 150, 15), Decl(duplicateIdentifierChecks.ts, 152, 16)) +>foo : Symbol(I11.foo, Decl(duplicateIdentifierChecks.ts, 151, 24)) set [foo](value: number); ->[foo] : Symbol(I11.foo, Decl(duplicateIdentifierChecks.ts, 151, 24), Decl(duplicateIdentifierChecks.ts, 150, 15), Decl(duplicateIdentifierChecks.ts, 152, 16)) +>[foo] : Symbol(I11[foo], Decl(duplicateIdentifierChecks.ts, 150, 15), Decl(duplicateIdentifierChecks.ts, 152, 16)) >foo : Symbol(foo, Decl(duplicateIdentifierChecks.ts, 142, 5)) >value : Symbol(value, Decl(duplicateIdentifierChecks.ts, 153, 14)) } @@ -386,10 +386,10 @@ interface I13 { >I13 : Symbol(I13, Decl(duplicateIdentifierChecks.ts, 160, 1)) foo: number; ->foo : Symbol(I13.foo, Decl(duplicateIdentifierChecks.ts, 162, 15), Decl(duplicateIdentifierChecks.ts, 163, 16)) +>foo : Symbol(I13.foo, Decl(duplicateIdentifierChecks.ts, 162, 15)) [foo]: number; ->[foo] : Symbol(I13.foo, Decl(duplicateIdentifierChecks.ts, 162, 15), Decl(duplicateIdentifierChecks.ts, 163, 16)) +>[foo] : Symbol(I13[foo], Decl(duplicateIdentifierChecks.ts, 163, 16)) >foo : Symbol(foo, Decl(duplicateIdentifierChecks.ts, 142, 5)) } @@ -397,13 +397,13 @@ interface I14 { >I14 : Symbol(I14, Decl(duplicateIdentifierChecks.ts, 165, 1)) foo: number; ->foo : Symbol(I14.foo, Decl(duplicateIdentifierChecks.ts, 167, 15), Decl(duplicateIdentifierChecks.ts, 168, 16), Decl(duplicateIdentifierChecks.ts, 169, 16)) +>foo : Symbol(I14.foo, Decl(duplicateIdentifierChecks.ts, 167, 15), Decl(duplicateIdentifierChecks.ts, 168, 16)) foo: number; ->foo : Symbol(I14.foo, Decl(duplicateIdentifierChecks.ts, 167, 15), Decl(duplicateIdentifierChecks.ts, 168, 16), Decl(duplicateIdentifierChecks.ts, 169, 16)) +>foo : Symbol(I14.foo, Decl(duplicateIdentifierChecks.ts, 167, 15), Decl(duplicateIdentifierChecks.ts, 168, 16)) [foo]: number; ->[foo] : Symbol(I14.foo, Decl(duplicateIdentifierChecks.ts, 167, 15), Decl(duplicateIdentifierChecks.ts, 168, 16), Decl(duplicateIdentifierChecks.ts, 169, 16)) +>[foo] : Symbol(I14[foo], Decl(duplicateIdentifierChecks.ts, 169, 16)) >foo : Symbol(foo, Decl(duplicateIdentifierChecks.ts, 142, 5)) } @@ -411,14 +411,14 @@ interface I15 { >I15 : Symbol(I15, Decl(duplicateIdentifierChecks.ts, 171, 1)) foo: number; ->foo : Symbol(I15.foo, Decl(duplicateIdentifierChecks.ts, 173, 15), Decl(duplicateIdentifierChecks.ts, 174, 16), Decl(duplicateIdentifierChecks.ts, 175, 18)) +>foo : Symbol(I15.foo, Decl(duplicateIdentifierChecks.ts, 173, 15)) [foo]: number; ->[foo] : Symbol(I15.foo, Decl(duplicateIdentifierChecks.ts, 173, 15), Decl(duplicateIdentifierChecks.ts, 174, 16), Decl(duplicateIdentifierChecks.ts, 175, 18)) +>[foo] : Symbol(I15[foo], Decl(duplicateIdentifierChecks.ts, 174, 16), Decl(duplicateIdentifierChecks.ts, 175, 18)) >foo : Symbol(foo, Decl(duplicateIdentifierChecks.ts, 142, 5)) [foo]: number; ->[foo] : Symbol(I15.foo, Decl(duplicateIdentifierChecks.ts, 173, 15), Decl(duplicateIdentifierChecks.ts, 174, 16), Decl(duplicateIdentifierChecks.ts, 175, 18)) +>[foo] : Symbol(I15[foo], Decl(duplicateIdentifierChecks.ts, 174, 16), Decl(duplicateIdentifierChecks.ts, 175, 18)) >foo : Symbol(foo, Decl(duplicateIdentifierChecks.ts, 142, 5)) } diff --git a/tsc/testdata/baselines/reference/compiler/dynamicNamesErrors.errors.txt b/tsc/testdata/baselines/reference/compiler/dynamicNamesErrors.errors.txt index e656bedf2af57..e9240517ec9a4 100644 --- a/tsc/testdata/baselines/reference/compiler/dynamicNamesErrors.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/dynamicNamesErrors.errors.txt @@ -1,5 +1,3 @@ -dynamicNamesErrors.ts(5,5): error TS2300: Duplicate identifier '1'. -dynamicNamesErrors.ts(6,5): error TS2300: Duplicate identifier '1'. dynamicNamesErrors.ts(18,5): error TS2300: Duplicate identifier '[c0]'. dynamicNamesErrors.ts(19,5): error TS2300: Duplicate identifier '[c0]'. dynamicNamesErrors.ts(19,5): error TS2717: Subsequent property declarations must have the same type. Property '[c1]' must be of type 'number', but here has type 'string'. @@ -12,17 +10,13 @@ dynamicNamesErrors.ts(25,1): error TS2322: Type 'T1' is not assignable to type ' dynamicNamesErrors.ts(43,5): error TS2564: Property '[x]' has no initializer and is not definitely assigned in the constructor. -==== dynamicNamesErrors.ts (8 errors) ==== +==== dynamicNamesErrors.ts (6 errors) ==== const c0 = "1"; const c1 = 1; interface T0 { [c0]: number; - ~~~~ -!!! error TS2300: Duplicate identifier '1'. 1: number; - ~ -!!! error TS2300: Duplicate identifier '1'. } interface T1 { diff --git a/tsc/testdata/baselines/reference/compiler/dynamicNamesErrors.symbols b/tsc/testdata/baselines/reference/compiler/dynamicNamesErrors.symbols index a690a6a1c06df..7d6b050bd5254 100644 --- a/tsc/testdata/baselines/reference/compiler/dynamicNamesErrors.symbols +++ b/tsc/testdata/baselines/reference/compiler/dynamicNamesErrors.symbols @@ -11,11 +11,11 @@ interface T0 { >T0 : Symbol(T0, Decl(dynamicNamesErrors.ts, 1, 13)) [c0]: number; ->[c0] : Symbol(T0[1], Decl(dynamicNamesErrors.ts, 4, 17), Decl(dynamicNamesErrors.ts, 3, 14)) +>[c0] : Symbol(T0[c0], Decl(dynamicNamesErrors.ts, 3, 14)) >c0 : Symbol(c0, Decl(dynamicNamesErrors.ts, 0, 5)) 1: number; ->1 : Symbol(T0[1], Decl(dynamicNamesErrors.ts, 4, 17), Decl(dynamicNamesErrors.ts, 3, 14)) +>1 : Symbol(T0[1], Decl(dynamicNamesErrors.ts, 4, 17)) } interface T1 { diff --git a/tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.errors.txt b/tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.errors.txt index e8f245821e6fa..bafe2d1546822 100644 --- a/tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.errors.txt @@ -1,8 +1,9 @@ file.js(4,11): error TS7022: 'pixel' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. file.js(4,19): error TS7053: Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{ skip: any; }'. +file.js(5,24): error TS7053: Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{ skip: any; }'. -==== file.js (2 errors) ==== +==== file.js (3 errors) ==== /** @param {any} axis @param {any} value */ function updateElements(axis, value) { const properties = {}; @@ -12,5 +13,7 @@ file.js(4,19): error TS7053: Element implicitly has an 'any' type because expres ~~~~~~~~~~~~~~~~ !!! error TS7053: Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{ skip: any; }'. const otherPixel = properties[axis] = value; + ~~~~~~~~~~~~~~~~ +!!! error TS7053: Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{ skip: any; }'. properties.skip = isNaN(pixel) || isNaN(otherPixel); } \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/keyofGenericExtendingClassDoubleLayer.errors.txt b/tsc/testdata/baselines/reference/compiler/keyofGenericExtendingClassDoubleLayer.errors.txt index 9808b4f1f9122..5babffc1080a2 100644 --- a/tsc/testdata/baselines/reference/compiler/keyofGenericExtendingClassDoubleLayer.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/keyofGenericExtendingClassDoubleLayer.errors.txt @@ -1,9 +1,10 @@ keyofGenericExtendingClassDoubleLayer.ts(2,12): error TS2564: Property 'createdAt' has no initializer and is not definitely assigned in the constructor. keyofGenericExtendingClassDoubleLayer.ts(9,7): error TS5115: Instantiations of the following types appear infinitely circular: 'Model', 'ModelAttributes', 'Exclude'. keyofGenericExtendingClassDoubleLayer.ts(10,12): error TS2564: Property 'age' has no initializer and is not definitely assigned in the constructor. +keyofGenericExtendingClassDoubleLayer.ts(13,13): error TS5115: Instantiations of the following types appear infinitely circular: 'Model', 'ModelAttributes', 'Exclude'. -==== keyofGenericExtendingClassDoubleLayer.ts (3 errors) ==== +==== keyofGenericExtendingClassDoubleLayer.ts (4 errors) ==== class Model { public createdAt: Date; ~~~~~~~~~ @@ -23,6 +24,8 @@ keyofGenericExtendingClassDoubleLayer.ts(10,12): error TS2564: Property 'age' ha toJson() { let x: keyof this = 'createdAt'; + ~ +!!! error TS5115: Instantiations of the following types appear infinitely circular: 'Model', 'ModelAttributes', 'Exclude'. } } \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=default).errors.txt b/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=default).errors.txt index a1b033edf54ba..b908bb32df049 100644 --- a/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=default).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=default).errors.txt @@ -1,12 +1,15 @@ +limitDeepInstantiations.ts(4,5): error TS5114: Instantiations of type 'Foo' appear infinitely circular. limitDeepInstantiations.ts(4,9): error TS5114: Instantiations of type 'Foo' appear infinitely circular. limitDeepInstantiations.ts(5,13): error TS2344: Type '"false"' does not satisfy the constraint '"true"'. -==== limitDeepInstantiations.ts (2 errors) ==== +==== limitDeepInstantiations.ts (3 errors) ==== // Repro from #14837 type Foo = { "true": Foo> }[T]; let f1: Foo<"true", {}>; + ~~ +!!! error TS5114: Instantiations of type 'Foo' appear infinitely circular. ~~~~~~~~~~~~~~~ !!! error TS5114: Instantiations of type 'Foo' appear infinitely circular. let f2: Foo<"false", {}>; diff --git a/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=typesfirst).errors.txt index a1b033edf54ba..b908bb32df049 100644 --- a/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=typesfirst).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/limitDeepInstantiations(checkorder=typesfirst).errors.txt @@ -1,12 +1,15 @@ +limitDeepInstantiations.ts(4,5): error TS5114: Instantiations of type 'Foo' appear infinitely circular. limitDeepInstantiations.ts(4,9): error TS5114: Instantiations of type 'Foo' appear infinitely circular. limitDeepInstantiations.ts(5,13): error TS2344: Type '"false"' does not satisfy the constraint '"true"'. -==== limitDeepInstantiations.ts (2 errors) ==== +==== limitDeepInstantiations.ts (3 errors) ==== // Repro from #14837 type Foo = { "true": Foo> }[T]; let f1: Foo<"true", {}>; + ~~ +!!! error TS5114: Instantiations of type 'Foo' appear infinitely circular. ~~~~~~~~~~~~~~~ !!! error TS5114: Instantiations of type 'Foo' appear infinitely circular. let f2: Foo<"false", {}>; diff --git a/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.errors.txt b/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.errors.txt deleted file mode 100644 index f9e0d6ab4eac5..0000000000000 --- a/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.errors.txt +++ /dev/null @@ -1,64 +0,0 @@ -/main.ts(7,32): error TS2339: Property 'mb' does not exist on type '{}'. - - -==== /main.ts (1 errors) ==== - import * as idx from "./index"; - const all = { ...idx }; - import * as MA from "./ma"; - import * as MB from "./mb"; - export const fromA = MA.pa; - export const fromB = MB.pb; - export const checkA: 1 = MA.pa.mb; - ~~ -!!! error TS2339: Property 'mb' does not exist on type '{}'. - export const checkB: 1 = MB.pb.ma; - -==== /ma.js (0 errors) ==== - export { v as pa } from "./xa"; - export const ma = 1; - -==== /mb.js (0 errors) ==== - export { v as pb } from "./xb"; - export const mb = 1; - -==== /xa.js (0 errors) ==== - /** @type {typeof import("./mb")} */ - const M = /** @type {any} */ (null); - const o = { v: { ...M } }; - module.exports = o; - -==== /xb.js (0 errors) ==== - /** @type {typeof import("./ma")} */ - const M = /** @type {any} */ (null); - const o = { v: { ...M } }; - module.exports = o; - -==== /ia.js (0 errors) ==== - /** @type {typeof import("./ma")} */ - const M = /** @type {any} */ (null); - const o = { v: { ...M } }; - module.exports = o; - -==== /ib.js (0 errors) ==== - /** @type {typeof import("./mb")} */ - const M = /** @type {any} */ (null); - const o = { v: { ...M } }; - module.exports = o; - -==== /star.js (0 errors) ==== - export { v as a } from "./ia"; - -==== /index.js (0 errors) ==== - export { v as b } from "./ib"; - export * from "./star"; - export const f1 = 1; - export const f2 = 2; - export const f3 = 3; - export const f4 = 4; - export const f5 = 5; - export const f6 = 6; - export const f7 = 7; - export const f8 = 8; - export const f9 = 9; - export const f10 = 10; - \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.js b/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.js index b99218d5bfd65..00c3b7c128c67 100644 --- a/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.js +++ b/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.js @@ -184,20 +184,13 @@ exports.checkB = MB.pb.ma; //// [xa.d.ts] export = o; -declare const o: { - v: {}; -}; +declare const o: any; //// [ma.d.ts] export { v as pa } from "./xa"; export declare const ma = 1; //// [xb.d.ts] export = o; -declare const o: { - v: { - pa: {}; - ma: 1; - }; -}; +declare const o: any; //// [mb.d.ts] export { v as pb } from "./xb"; export declare const mb = 1; @@ -205,10 +198,7 @@ export declare const mb = 1; export = o; declare const o: { v: { - pb: { - pa: {}; - ma: 1; - }; + pb: any; mb: 1; }; }; @@ -216,7 +206,7 @@ declare const o: { export = o; declare const o: { v: { - pa: {}; + pa: any; ma: 1; }; }; @@ -236,10 +226,7 @@ export declare const f8 = 8; export declare const f9 = 9; export declare const f10 = 10; //// [main.d.ts] -export declare const fromA: {}; -export declare const fromB: { - pa: {}; - ma: 1; -}; +export declare const fromA: any; +export declare const fromB: any; export declare const checkA: 1; export declare const checkB: 1; diff --git a/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.symbols b/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.symbols index 4f7c5a9b9f1d4..aecc0b5b94015 100644 --- a/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.symbols +++ b/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.symbols @@ -34,15 +34,12 @@ export const checkA: 1 = MA.pa.mb; export const checkB: 1 = MB.pb.ma; >checkB : Symbol(checkB, Decl(main.ts, 7, 12)) ->MB.pb.ma : Symbol(ma, Decl(ma.js, 1, 12)) >MB.pb : Symbol(MB.pb, Decl(mb.js, 0, 8)) >MB : Symbol(MB, Decl(main.ts, 3, 6)) >pb : Symbol(MB.pb, Decl(mb.js, 0, 8)) ->ma : Symbol(ma, Decl(ma.js, 1, 12)) === /ma.js === export { v as pa } from "./xa"; ->v : Symbol(v, Decl(xa.js, 2, 11)) >pa : Symbol(pa, Decl(ma.js, 0, 8)) export const ma = 1; @@ -50,7 +47,6 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; ->v : Symbol(v, Decl(xb.js, 2, 11)) >pb : Symbol(pb, Decl(mb.js, 0, 8)) export const mb = 1; diff --git a/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.types b/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.types index 0153880cec8d7..7be52850fe46c 100644 --- a/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.types +++ b/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.types @@ -5,8 +5,8 @@ import * as idx from "./index"; >idx : typeof idx const all = { ...idx }; ->all : { a: { pa: {}; ma: 1; }; b: { pb: { pa: {}; ma: 1; }; mb: 1; }; f1: 1; f2: 2; f3: 3; f4: 4; f5: 5; f6: 6; f7: 7; f8: 8; f9: 9; f10: 10; } ->{ ...idx } : { a: { pa: {}; ma: 1; }; b: { pb: { pa: {}; ma: 1; }; mb: 1; }; f1: 1; f2: 2; f3: 3; f4: 4; f5: 5; f6: 6; f7: 7; f8: 8; f9: 9; f10: 10; } +>all : { a: { pa: any; ma: 1; }; b: { pb: any; mb: 1; }; f1: 1; f2: 2; f3: 3; f4: 4; f5: 5; f6: 6; f7: 7; f8: 8; f9: 9; f10: 10; } +>{ ...idx } : { a: { pa: any; ma: 1; }; b: { pb: any; mb: 1; }; f1: 1; f2: 2; f3: 3; f4: 4; f5: 5; f6: 6; f7: 7; f8: 8; f9: 9; f10: 10; } >idx : typeof idx import * as MA from "./ma"; @@ -16,37 +16,37 @@ import * as MB from "./mb"; >MB : typeof MB export const fromA = MA.pa; ->fromA : {} ->MA.pa : {} +>fromA : error +>MA.pa : error >MA : typeof MA ->pa : {} +>pa : any export const fromB = MB.pb; ->fromB : { pa: {}; ma: 1; } ->MB.pb : { pa: {}; ma: 1; } +>fromB : error +>MB.pb : error >MB : typeof MB ->pb : { pa: {}; ma: 1; } +>pb : any export const checkA: 1 = MA.pa.mb; >checkA : 1 ->MA.pa.mb : any ->MA.pa : {} +>MA.pa.mb : error +>MA.pa : any >MA : typeof MA ->pa : {} +>pa : any >mb : any export const checkB: 1 = MB.pb.ma; >checkB : 1 ->MB.pb.ma : 1 ->MB.pb : { pa: {}; ma: 1; } +>MB.pb.ma : error +>MB.pb : any >MB : typeof MB ->pb : { pa: {}; ma: 1; } ->ma : 1 +>pb : any +>ma : any === /ma.js === export { v as pa } from "./xa"; ->v : {} ->pa : {} +>v : any +>pa : any export const ma = 1; >ma : 1 @@ -54,8 +54,8 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; ->v : { pa: {}; ma: 1; } ->pb : { pa: {}; ma: 1; } +>v : any +>pb : any export const mb = 1; >mb : 1 @@ -68,18 +68,18 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : { v: {}; } ->{ v: { ...M } } : { v: {}; } ->v : {} ->{ ...M } : {} +>o : any +>{ v: { ...M } } : { v: { pb: any; mb: 1; }; } +>v : { pb: any; mb: 1; } +>{ ...M } : { pb: any; mb: 1; } >M : typeof import("./mb") module.exports = o; ->module.exports = o : { v: {}; } ->module.exports : { v: {}; } ->module : { exports: { v: {}; }; } ->exports : { v: {}; } ->o : { v: {}; } +>module.exports = o : any +>module.exports : any +>module : { exports: any; } +>exports : any +>o : any === /xb.js === /** @type {typeof import("./ma")} */ @@ -88,18 +88,18 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : { v: { pa: {}; ma: 1; }; } ->{ v: { ...M } } : { v: { pa: {}; ma: 1; }; } ->v : { pa: {}; ma: 1; } ->{ ...M } : { pa: {}; ma: 1; } +>o : any +>{ v: { ...M } } : { v: { pa: any; ma: 1; }; } +>v : { pa: any; ma: 1; } +>{ ...M } : { pa: any; ma: 1; } >M : typeof import("./ma") module.exports = o; ->module.exports = o : { v: { pa: {}; ma: 1; }; } ->module.exports : { v: { pa: {}; ma: 1; }; } ->module : { exports: { v: { pa: {}; ma: 1; }; }; } ->exports : { v: { pa: {}; ma: 1; }; } ->o : { v: { pa: {}; ma: 1; }; } +>module.exports = o : any +>module.exports : any +>module : { exports: any; } +>exports : any +>o : any === /ia.js === /** @type {typeof import("./ma")} */ @@ -108,18 +108,18 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : { v: { pa: {}; ma: 1; }; } ->{ v: { ...M } } : { v: { pa: {}; ma: 1; }; } ->v : { pa: {}; ma: 1; } ->{ ...M } : { pa: {}; ma: 1; } +>o : { v: { pa: any; ma: 1; }; } +>{ v: { ...M } } : { v: { pa: any; ma: 1; }; } +>v : { pa: any; ma: 1; } +>{ ...M } : { pa: any; ma: 1; } >M : typeof import("./ma") module.exports = o; ->module.exports = o : { v: { pa: {}; ma: 1; }; } ->module.exports : { v: { pa: {}; ma: 1; }; } ->module : { exports: { v: { pa: {}; ma: 1; }; }; } ->exports : { v: { pa: {}; ma: 1; }; } ->o : { v: { pa: {}; ma: 1; }; } +>module.exports = o : { v: { pa: any; ma: 1; }; } +>module.exports : { v: { pa: any; ma: 1; }; } +>module : { exports: { v: { pa: any; ma: 1; }; }; } +>exports : { v: { pa: any; ma: 1; }; } +>o : { v: { pa: any; ma: 1; }; } === /ib.js === /** @type {typeof import("./mb")} */ @@ -128,28 +128,28 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } ->{ v: { ...M } } : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } ->v : { pb: { pa: {}; ma: 1; }; mb: 1; } ->{ ...M } : { pb: { pa: {}; ma: 1; }; mb: 1; } +>o : { v: { pb: any; mb: 1; }; } +>{ v: { ...M } } : { v: { pb: any; mb: 1; }; } +>v : { pb: any; mb: 1; } +>{ ...M } : { pb: any; mb: 1; } >M : typeof import("./mb") module.exports = o; ->module.exports = o : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } ->module.exports : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } ->module : { exports: { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; }; } ->exports : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } ->o : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } +>module.exports = o : { v: { pb: any; mb: 1; }; } +>module.exports : { v: { pb: any; mb: 1; }; } +>module : { exports: { v: { pb: any; mb: 1; }; }; } +>exports : { v: { pb: any; mb: 1; }; } +>o : { v: { pb: any; mb: 1; }; } === /star.js === export { v as a } from "./ia"; ->v : { pa: {}; ma: 1; } ->a : { pa: {}; ma: 1; } +>v : { pa: any; ma: 1; } +>a : { pa: any; ma: 1; } === /index.js === export { v as b } from "./ib"; ->v : { pb: { pa: {}; ma: 1; }; mb: 1; } ->b : { pb: { pa: {}; ma: 1; }; mb: 1; } +>v : { pb: any; mb: 1; } +>b : { pb: any; mb: 1; } export * from "./star"; export const f1 = 1; diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitExportEqualsQualifiedNameOrder.js b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitExportEqualsQualifiedNameOrder.js index 2413425ee0027..613464e8a9ce9 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitExportEqualsQualifiedNameOrder.js +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitExportEqualsQualifiedNameOrder.js @@ -78,5 +78,7 @@ export declare const obsA: { v: 0; }; export declare const obsB: { + pa: 0; + readonly ma: 1; v: 0; }; diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitExportEqualsQualifiedNameOrder.types b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitExportEqualsQualifiedNameOrder.types index 6e3734d808ac2..d2fb088ff22ab 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitExportEqualsQualifiedNameOrder.types +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitExportEqualsQualifiedNameOrder.types @@ -22,8 +22,8 @@ export const obsA = expand(); >oxa : O export const obsB = expand(); ->obsB : { v: 0; } ->expand() : { v: 0; } +>obsB : { pa: 0; readonly ma: 1; v: 0; } +>expand() : { pa: 0; readonly ma: 1; v: 0; } >expand : () => { [K in keyof X]: X[K]; } >oxb : O diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitExternalModuleContainerIndexOrder.js b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitExternalModuleContainerIndexOrder.js index b04d7f8d88c86..06233f3cd3615 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitExternalModuleContainerIndexOrder.js +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitExternalModuleContainerIndexOrder.js @@ -77,5 +77,7 @@ export declare const obsA: { v: 0; }; export declare const obsB: { + pa: 0; + readonly ma: 1; v: 0; }; diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitExternalModuleContainerIndexOrder.types b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitExternalModuleContainerIndexOrder.types index 351c0f5869478..236cd6a2af6c0 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitExternalModuleContainerIndexOrder.types +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitExternalModuleContainerIndexOrder.types @@ -26,8 +26,8 @@ export const obsA = expand(); >expand : () => { [K in keyof X]: X[K]; } export const obsB = expand(); ->obsB : { v: 0; } ->expand() : { v: 0; } +>obsB : { pa: 0; readonly ma: 1; v: 0; } +>expand() : { pa: 0; readonly ma: 1; v: 0; } >expand : () => { [K in keyof X]: X[K]; } === /ambient.d.ts === diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitLateBoundIndexSignatureSiblingsOrder.js b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitLateBoundIndexSignatureSiblingsOrder.js index da41b8a0dc439..09f23b9e441c9 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitLateBoundIndexSignatureSiblingsOrder.js +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitLateBoundIndexSignatureSiblingsOrder.js @@ -90,6 +90,8 @@ export declare const obsA: { v: 0; }; export declare const obsB: { + pa: 0; + readonly ma: 1; v: 0; }; export {}; diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitLateBoundIndexSignatureSiblingsOrder.types b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitLateBoundIndexSignatureSiblingsOrder.types index 9ca145132f072..a3e841f76db76 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitLateBoundIndexSignatureSiblingsOrder.types +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitLateBoundIndexSignatureSiblingsOrder.types @@ -82,8 +82,8 @@ export const obsA = expand(); >oxa : O export const obsB = expand(); ->obsB : { v: 0; } ->expand() : { v: 0; } +>obsB : { pa: 0; readonly ma: 1; v: 0; } +>expand() : { pa: 0; readonly ma: 1; v: 0; } >expand : () => { [K in keyof X]: X[K]; } >oxb : O diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitRenamedExportOrder.js b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitRenamedExportOrder.js index ea5bdabd550b2..593f5c6192e79 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitRenamedExportOrder.js +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitRenamedExportOrder.js @@ -75,5 +75,7 @@ export declare const obsA: { v: 0; }; export declare const obsB: { + pa: 0; + readonly ma: 1; v: 0; }; diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitRenamedExportOrder.types b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitRenamedExportOrder.types index ad400806b641d..59c394c4943b9 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitRenamedExportOrder.types +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitRenamedExportOrder.types @@ -21,8 +21,8 @@ export const obsA = expand(); >oxa : O export const obsB = expand(); ->obsB : { v: 0; } ->expand() : { v: 0; } +>obsB : { pa: 0; readonly ma: 1; v: 0; } +>expand() : { pa: 0; readonly ma: 1; v: 0; } >expand : () => { [K in keyof X]: X[K]; } >oxb : O diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.js b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.js index 9d0b0d5c36d1b..498f2e8c5a4e6 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.js +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.js @@ -145,29 +145,57 @@ exports.c = 1; //// [xb.d.ts] export = o; -declare const o: { - v: { - pa: {}; - ma: 1; - }; -}; +declare const o: any; //// [mb.d.ts] export { v as pb } from "./xb"; export declare const mb = 1; //// [xa.d.ts] export = o; -declare const o: { - v: {}; -}; +declare const o: any; //// [ma.d.ts] export { v as pa } from "./xa"; export declare const ma = 1; //// [a.d.ts] -export declare const fromA: {}; +export declare const fromA: any; //// [b.d.ts] -export declare const fromB: { - pa: {}; - ma: 1; -}; +export declare const fromB: any; //// [c.d.ts] export declare const c = 1; + + +//// [DtsFileErrors] + + +/out/ma.d.ts(1,10): error TS2305: Module '"./xa"' has no exported member 'v'. +/out/mb.d.ts(1,10): error TS2305: Module '"./xb"' has no exported member 'v'. + + +==== /out/ma.d.ts (1 errors) ==== + export { v as pa } from "./xa"; + ~ +!!! error TS2305: Module '"./xa"' has no exported member 'v'. + export declare const ma = 1; + +==== /out/mb.d.ts (1 errors) ==== + export { v as pb } from "./xb"; + ~ +!!! error TS2305: Module '"./xb"' has no exported member 'v'. + export declare const mb = 1; + +==== /out/xa.d.ts (0 errors) ==== + export = o; + declare const o: any; + +==== /out/xb.d.ts (0 errors) ==== + export = o; + declare const o: any; + +==== /out/a.d.ts (0 errors) ==== + export declare const fromA: any; + +==== /out/b.d.ts (0 errors) ==== + export declare const fromB: any; + +==== /out/c.d.ts (0 errors) ==== + export declare const c = 1; + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.symbols b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.symbols index b400eedf066bc..fbfd54c051a3a 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.symbols +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.symbols @@ -2,7 +2,6 @@ === /ma.js === export { v as pa } from "./xa"; ->v : Symbol(v, Decl(xa.js, 2, 11)) >pa : Symbol(pa, Decl(ma.js, 0, 8)) export const ma = 1; @@ -10,7 +9,6 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; ->v : Symbol(v, Decl(xb.js, 2, 11)) >pb : Symbol(pb, Decl(mb.js, 0, 8)) export const mb = 1; diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.types b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.types index 07b1f23ab8990..b139db84af158 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.types +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.types @@ -2,8 +2,8 @@ === /ma.js === export { v as pa } from "./xa"; ->v : {} ->pa : {} +>v : any +>pa : any export const ma = 1; >ma : 1 @@ -11,8 +11,8 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; ->v : { pa: {}; ma: 1; } ->pb : { pa: {}; ma: 1; } +>v : any +>pb : any export const mb = 1; >mb : 1 @@ -25,18 +25,18 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : { v: {}; } ->{ v: { ...M } } : { v: {}; } ->v : {} ->{ ...M } : {} +>o : any +>{ v: { ...M } } : { v: { pb: any; mb: 1; }; } +>v : { pb: any; mb: 1; } +>{ ...M } : { pb: any; mb: 1; } >M : typeof import("./mb") module.exports = o; ->module.exports = o : { v: {}; } ->module.exports : { v: {}; } ->module : { exports: { v: {}; }; } ->exports : { v: {}; } ->o : { v: {}; } +>module.exports = o : any +>module.exports : any +>module : { exports: any; } +>exports : any +>o : any === /xb.js === /** @type {typeof import("./ma")} */ @@ -45,38 +45,38 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : { v: { pa: {}; ma: 1; }; } ->{ v: { ...M } } : { v: { pa: {}; ma: 1; }; } ->v : { pa: {}; ma: 1; } ->{ ...M } : { pa: {}; ma: 1; } +>o : any +>{ v: { ...M } } : { v: { pa: any; ma: 1; }; } +>v : { pa: any; ma: 1; } +>{ ...M } : { pa: any; ma: 1; } >M : typeof import("./ma") module.exports = o; ->module.exports = o : { v: { pa: {}; ma: 1; }; } ->module.exports : { v: { pa: {}; ma: 1; }; } ->module : { exports: { v: { pa: {}; ma: 1; }; }; } ->exports : { v: { pa: {}; ma: 1; }; } ->o : { v: { pa: {}; ma: 1; }; } +>module.exports = o : any +>module.exports : any +>module : { exports: any; } +>exports : any +>o : any === /a.ts === import * as MA from "./ma"; >MA : typeof MA export const fromA = MA.pa; ->fromA : {} ->MA.pa : {} +>fromA : error +>MA.pa : error >MA : typeof MA ->pa : {} +>pa : any === /b.ts === import * as MB from "./mb"; >MB : typeof MB export const fromB = MB.pb; ->fromB : { pa: {}; ma: 1; } ->MB.pb : { pa: {}; ma: 1; } +>fromB : error +>MB.pb : error >MB : typeof MB ->pb : { pa: {}; ma: 1; } +>pb : any === /c.ts === export const c = 1; diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitUmdGlobalAliasesOrder.js b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitUmdGlobalAliasesOrder.js index f297255bfad65..0cd47efb71bf9 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitUmdGlobalAliasesOrder.js +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitUmdGlobalAliasesOrder.js @@ -139,5 +139,7 @@ declare const obsA: { v: 0; }; declare const obsB: { + pa: 0; + readonly ma: 1; v: 0; }; diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitUmdGlobalAliasesOrder.types b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitUmdGlobalAliasesOrder.types index cb6e79ef1518c..64131b7405d04 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitUmdGlobalAliasesOrder.types +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitUmdGlobalAliasesOrder.types @@ -34,8 +34,8 @@ const obsA = expand(); >oxa : O const obsB = expand(); ->obsB : { v: 0; } ->expand() : { v: 0; } +>obsB : { pa: 0; readonly ma: 1; v: 0; } +>expand() : { pa: 0; readonly ma: 1; v: 0; } >expand : () => { [K in keyof X]: X[K]; } >oxb : O diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitVariableMatchesInScopeOrder.js b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitVariableMatchesInScopeOrder.js index 30a76df171c66..b4b3b1191b09c 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitVariableMatchesInScopeOrder.js +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitVariableMatchesInScopeOrder.js @@ -55,5 +55,7 @@ export declare const obsA: { v: 0; }; export declare const obsB: { + pa: 0; + readonly ma: 1; v: 0; }; diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitVariableMatchesInScopeOrder.types b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitVariableMatchesInScopeOrder.types index 2e41e20ad32be..74c433948a034 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitVariableMatchesInScopeOrder.types +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitVariableMatchesInScopeOrder.types @@ -19,8 +19,8 @@ export const obsA = expand(); >oxa : O export const obsB = expand(); ->obsB : { v: 0; } ->expand() : { v: 0; } +>obsB : { pa: 0; readonly ma: 1; v: 0; } +>expand() : { pa: 0; readonly ma: 1; v: 0; } >expand : () => { [K in keyof X]: X[K]; } >oxb : O diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsExportStarCollisionOrder.errors.txt b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsExportStarCollisionOrder.errors.txt index a2ecba905fe18..62a7166294745 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsExportStarCollisionOrder.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsExportStarCollisionOrder.errors.txt @@ -1,5 +1,5 @@ /main.ts(7,14): error TS2322: Type '{ pb: 0; readonly mb: 1; v: 0; }' is not assignable to type 'never'. -/main.ts(8,14): error TS2322: Type '{ v: 0; }' is not assignable to type 'never'. +/main.ts(8,14): error TS2322: Type '{ pa: 0; readonly ma: 1; v: 0; }' is not assignable to type 'never'. ==== /main.ts (2 errors) ==== @@ -14,7 +14,7 @@ !!! error TS2322: Type '{ pb: 0; readonly mb: 1; v: 0; }' is not assignable to type 'never'. export const obsB: never = expand(); ~~~~ -!!! error TS2322: Type '{ v: 0; }' is not assignable to type 'never'. +!!! error TS2322: Type '{ pa: 0; readonly ma: 1; v: 0; }' is not assignable to type 'never'. ==== /ambient.d.ts (0 errors) ==== declare module "ma" { diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsExportStarCollisionOrder.types b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsExportStarCollisionOrder.types index 925b972b915c6..b42d11f662f49 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsExportStarCollisionOrder.types +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsExportStarCollisionOrder.types @@ -26,7 +26,7 @@ export const obsA: never = expand(); export const obsB: never = expand(); >obsB : never ->expand() : { v: 0; } +>expand() : { pa: 0; readonly ma: 1; v: 0; } >expand : () => { [K in keyof X]: X[K]; } >oxb : O diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsExportStarDeclarationCollisionOrder.errors.txt b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsExportStarDeclarationCollisionOrder.errors.txt index a05bda29acf17..45ba492a4b355 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsExportStarDeclarationCollisionOrder.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsExportStarDeclarationCollisionOrder.errors.txt @@ -1,5 +1,5 @@ /main.ts(7,14): error TS2322: Type '{ pb: 0; readonly mb: 1; v: 0; }' is not assignable to type 'never'. -/main.ts(8,14): error TS2322: Type '{ v: 0; }' is not assignable to type 'never'. +/main.ts(8,14): error TS2322: Type '{ pa: 0; readonly ma: 1; v: 0; }' is not assignable to type 'never'. ==== /main.ts (2 errors) ==== @@ -14,7 +14,7 @@ !!! error TS2322: Type '{ pb: 0; readonly mb: 1; v: 0; }' is not assignable to type 'never'. export const obsB: never = expand(); ~~~~ -!!! error TS2322: Type '{ v: 0; }' is not assignable to type 'never'. +!!! error TS2322: Type '{ pa: 0; readonly ma: 1; v: 0; }' is not assignable to type 'never'. ==== /ambient.d.ts (0 errors) ==== declare module "ma" { diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsExportStarDeclarationCollisionOrder.types b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsExportStarDeclarationCollisionOrder.types index 58541f8aa49ff..101b6db6c4dee 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsExportStarDeclarationCollisionOrder.types +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsExportStarDeclarationCollisionOrder.types @@ -26,7 +26,7 @@ export const obsA: never = expand(); export const obsB: never = expand(); >obsB : never ->expand() : { v: 0; } +>expand() : { pa: 0; readonly ma: 1; v: 0; } >expand : () => { [K in keyof X]: X[K]; } >oxb : O diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.errors.txt b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.errors.txt deleted file mode 100644 index fb286e6d925c7..0000000000000 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.errors.txt +++ /dev/null @@ -1,61 +0,0 @@ -/main.ts(8,32): error TS2339: Property 'ma' does not exist on type '{}'. - - -==== /main.ts (1 errors) ==== - import * as idx from "./index"; - const all = { ...idx }; - import * as MA from "./ma"; - import * as MB from "./mb"; - export const fromA = MA.pa; - export const fromB = MB.pb; - export const checkA: 1 = MA.pa.mb; - export const checkB: 1 = MB.pb.ma; - ~~ -!!! error TS2339: Property 'ma' does not exist on type '{}'. - -==== /ma.js (0 errors) ==== - export { v as pa } from "./xa"; - export const ma = 1; - -==== /mb.js (0 errors) ==== - export { v as pb } from "./xb"; - export const mb = 1; - -==== /xa.js (0 errors) ==== - /** @type {typeof import("./mb")} */ - const M = /** @type {any} */ (null); - const o = { v: { ...M } }; - module.exports = o; - -==== /xb.js (0 errors) ==== - /** @type {typeof import("./ma")} */ - const M = /** @type {any} */ (null); - const o = { v: { ...M } }; - module.exports = o; - -==== /ia.js (0 errors) ==== - /** @type {typeof import("./ma")} */ - const M = /** @type {any} */ (null); - const o = { v: { ...M } }; - module.exports = o; - -==== /ib.js (0 errors) ==== - /** @type {typeof import("./mb")} */ - const M = /** @type {any} */ (null); - const o = { v: { ...M } }; - module.exports = o; - -==== /index.js (0 errors) ==== - export { v as a } from "./ia"; - export { v as b } from "./ib"; - export const f1 = 1; - export const f2 = 2; - export const f3 = 3; - export const f4 = 4; - export const f5 = 5; - export const f6 = 6; - export const f7 = 7; - export const f8 = 8; - export const f9 = 9; - export const f10 = 10; - \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.js b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.js index 85b0024d3067d..0685700e160d6 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.js +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.js @@ -162,20 +162,13 @@ exports.checkB = MB.pb.ma; //// [xb.d.ts] export = o; -declare const o: { - v: {}; -}; +declare const o: any; //// [mb.d.ts] export { v as pb } from "./xb"; export declare const mb = 1; //// [xa.d.ts] export = o; -declare const o: { - v: { - pb: {}; - mb: 1; - }; -}; +declare const o: any; //// [ma.d.ts] export { v as pa } from "./xa"; export declare const ma = 1; @@ -183,10 +176,7 @@ export declare const ma = 1; export = o; declare const o: { v: { - pa: { - pb: {}; - mb: 1; - }; + pa: any; ma: 1; }; }; @@ -194,7 +184,7 @@ declare const o: { export = o; declare const o: { v: { - pb: {}; + pb: any; mb: 1; }; }; @@ -212,10 +202,7 @@ export declare const f8 = 8; export declare const f9 = 9; export declare const f10 = 10; //// [main.d.ts] -export declare const fromA: { - pb: {}; - mb: 1; -}; -export declare const fromB: {}; +export declare const fromA: any; +export declare const fromB: any; export declare const checkA: 1; export declare const checkB: 1; diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.symbols b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.symbols index aaa25b0469d2f..7e1526484f1de 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.symbols +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.symbols @@ -28,11 +28,9 @@ export const fromB = MB.pb; export const checkA: 1 = MA.pa.mb; >checkA : Symbol(checkA, Decl(main.ts, 6, 12)) ->MA.pa.mb : Symbol(mb, Decl(mb.js, 1, 12)) >MA.pa : Symbol(MA.pa, Decl(ma.js, 0, 8)) >MA : Symbol(MA, Decl(main.ts, 2, 6)) >pa : Symbol(MA.pa, Decl(ma.js, 0, 8)) ->mb : Symbol(mb, Decl(mb.js, 1, 12)) export const checkB: 1 = MB.pb.ma; >checkB : Symbol(checkB, Decl(main.ts, 7, 12)) @@ -42,7 +40,6 @@ export const checkB: 1 = MB.pb.ma; === /ma.js === export { v as pa } from "./xa"; ->v : Symbol(v, Decl(xa.js, 2, 11)) >pa : Symbol(pa, Decl(ma.js, 0, 8)) export const ma = 1; @@ -50,7 +47,6 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; ->v : Symbol(v, Decl(xb.js, 2, 11)) >pb : Symbol(pb, Decl(mb.js, 0, 8)) export const mb = 1; diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.types b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.types index 753e075741287..8176a758903e3 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.types +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.types @@ -5,8 +5,8 @@ import * as idx from "./index"; >idx : typeof idx const all = { ...idx }; ->all : { a: { pa: { pb: {}; mb: 1; }; ma: 1; }; b: { pb: {}; mb: 1; }; f1: 1; f2: 2; f3: 3; f4: 4; f5: 5; f6: 6; f7: 7; f8: 8; f9: 9; f10: 10; } ->{ ...idx } : { a: { pa: { pb: {}; mb: 1; }; ma: 1; }; b: { pb: {}; mb: 1; }; f1: 1; f2: 2; f3: 3; f4: 4; f5: 5; f6: 6; f7: 7; f8: 8; f9: 9; f10: 10; } +>all : { a: { pa: any; ma: 1; }; b: { pb: any; mb: 1; }; f1: 1; f2: 2; f3: 3; f4: 4; f5: 5; f6: 6; f7: 7; f8: 8; f9: 9; f10: 10; } +>{ ...idx } : { a: { pa: any; ma: 1; }; b: { pb: any; mb: 1; }; f1: 1; f2: 2; f3: 3; f4: 4; f5: 5; f6: 6; f7: 7; f8: 8; f9: 9; f10: 10; } >idx : typeof idx import * as MA from "./ma"; @@ -16,37 +16,37 @@ import * as MB from "./mb"; >MB : typeof MB export const fromA = MA.pa; ->fromA : { pb: {}; mb: 1; } ->MA.pa : { pb: {}; mb: 1; } +>fromA : error +>MA.pa : error >MA : typeof MA ->pa : { pb: {}; mb: 1; } +>pa : any export const fromB = MB.pb; ->fromB : {} ->MB.pb : {} +>fromB : error +>MB.pb : error >MB : typeof MB ->pb : {} +>pb : any export const checkA: 1 = MA.pa.mb; >checkA : 1 ->MA.pa.mb : 1 ->MA.pa : { pb: {}; mb: 1; } +>MA.pa.mb : error +>MA.pa : any >MA : typeof MA ->pa : { pb: {}; mb: 1; } ->mb : 1 +>pa : any +>mb : any export const checkB: 1 = MB.pb.ma; >checkB : 1 ->MB.pb.ma : any ->MB.pb : {} +>MB.pb.ma : error +>MB.pb : any >MB : typeof MB ->pb : {} +>pb : any >ma : any === /ma.js === export { v as pa } from "./xa"; ->v : { pb: {}; mb: 1; } ->pa : { pb: {}; mb: 1; } +>v : any +>pa : any export const ma = 1; >ma : 1 @@ -54,8 +54,8 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; ->v : {} ->pb : {} +>v : any +>pb : any export const mb = 1; >mb : 1 @@ -68,18 +68,18 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : { v: { pb: {}; mb: 1; }; } ->{ v: { ...M } } : { v: { pb: {}; mb: 1; }; } ->v : { pb: {}; mb: 1; } ->{ ...M } : { pb: {}; mb: 1; } +>o : any +>{ v: { ...M } } : { v: { pb: any; mb: 1; }; } +>v : { pb: any; mb: 1; } +>{ ...M } : { pb: any; mb: 1; } >M : typeof import("./mb") module.exports = o; ->module.exports = o : { v: { pb: {}; mb: 1; }; } ->module.exports : { v: { pb: {}; mb: 1; }; } ->module : { exports: { v: { pb: {}; mb: 1; }; }; } ->exports : { v: { pb: {}; mb: 1; }; } ->o : { v: { pb: {}; mb: 1; }; } +>module.exports = o : any +>module.exports : any +>module : { exports: any; } +>exports : any +>o : any === /xb.js === /** @type {typeof import("./ma")} */ @@ -88,18 +88,18 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : { v: {}; } ->{ v: { ...M } } : { v: {}; } ->v : {} ->{ ...M } : {} +>o : any +>{ v: { ...M } } : { v: { pa: any; ma: 1; }; } +>v : { pa: any; ma: 1; } +>{ ...M } : { pa: any; ma: 1; } >M : typeof import("./ma") module.exports = o; ->module.exports = o : { v: {}; } ->module.exports : { v: {}; } ->module : { exports: { v: {}; }; } ->exports : { v: {}; } ->o : { v: {}; } +>module.exports = o : any +>module.exports : any +>module : { exports: any; } +>exports : any +>o : any === /ia.js === /** @type {typeof import("./ma")} */ @@ -108,18 +108,18 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->{ v: { ...M } } : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->v : { pa: { pb: {}; mb: 1; }; ma: 1; } ->{ ...M } : { pa: { pb: {}; mb: 1; }; ma: 1; } +>o : { v: { pa: any; ma: 1; }; } +>{ v: { ...M } } : { v: { pa: any; ma: 1; }; } +>v : { pa: any; ma: 1; } +>{ ...M } : { pa: any; ma: 1; } >M : typeof import("./ma") module.exports = o; ->module.exports = o : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->module.exports : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->module : { exports: { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; }; } ->exports : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->o : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } +>module.exports = o : { v: { pa: any; ma: 1; }; } +>module.exports : { v: { pa: any; ma: 1; }; } +>module : { exports: { v: { pa: any; ma: 1; }; }; } +>exports : { v: { pa: any; ma: 1; }; } +>o : { v: { pa: any; ma: 1; }; } === /ib.js === /** @type {typeof import("./mb")} */ @@ -128,27 +128,27 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : { v: { pb: {}; mb: 1; }; } ->{ v: { ...M } } : { v: { pb: {}; mb: 1; }; } ->v : { pb: {}; mb: 1; } ->{ ...M } : { pb: {}; mb: 1; } +>o : { v: { pb: any; mb: 1; }; } +>{ v: { ...M } } : { v: { pb: any; mb: 1; }; } +>v : { pb: any; mb: 1; } +>{ ...M } : { pb: any; mb: 1; } >M : typeof import("./mb") module.exports = o; ->module.exports = o : { v: { pb: {}; mb: 1; }; } ->module.exports : { v: { pb: {}; mb: 1; }; } ->module : { exports: { v: { pb: {}; mb: 1; }; }; } ->exports : { v: { pb: {}; mb: 1; }; } ->o : { v: { pb: {}; mb: 1; }; } +>module.exports = o : { v: { pb: any; mb: 1; }; } +>module.exports : { v: { pb: any; mb: 1; }; } +>module : { exports: { v: { pb: any; mb: 1; }; }; } +>exports : { v: { pb: any; mb: 1; }; } +>o : { v: { pb: any; mb: 1; }; } === /index.js === export { v as a } from "./ia"; ->v : { pa: { pb: {}; mb: 1; }; ma: 1; } ->a : { pa: { pb: {}; mb: 1; }; ma: 1; } +>v : { pa: any; ma: 1; } +>a : { pa: any; ma: 1; } export { v as b } from "./ib"; ->v : { pb: {}; mb: 1; } ->b : { pb: {}; mb: 1; } +>v : { pb: any; mb: 1; } +>b : { pb: any; mb: 1; } export const f1 = 1; >f1 : 1 diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.errors.txt b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.errors.txt deleted file mode 100644 index 408176b1c59d1..0000000000000 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.errors.txt +++ /dev/null @@ -1,77 +0,0 @@ -/main.ts(8,32): error TS2339: Property 'ma' does not exist on type '{}'. - - -==== /main.ts (1 errors) ==== - import * as idx from "./d"; - const all = { ...idx }; - import * as MA from "./ma"; - import * as MB from "./mb"; - export const fromA = MA.pa; - export const fromB = MB.pb; - export const checkA: 1 = MA.pa.mb; - export const checkB: 1 = MB.pb.ma; - ~~ -!!! error TS2339: Property 'ma' does not exist on type '{}'. - -==== /ma.js (0 errors) ==== - export { v as pa } from "./xa"; - export const ma = 1; - -==== /mb.js (0 errors) ==== - export { v as pb } from "./xb"; - export const mb = 1; - -==== /xa.js (0 errors) ==== - /** @type {typeof import("./mb")} */ - const M = /** @type {any} */ (null); - const o = { v: { ...M } }; - module.exports = o; - -==== /xb.js (0 errors) ==== - /** @type {typeof import("./ma")} */ - const M = /** @type {any} */ (null); - const o = { v: { ...M } }; - module.exports = o; - -==== /ia.js (0 errors) ==== - /** @type {typeof import("./ma")} */ - const M = /** @type {any} */ (null); - const o = { v: { ...M } }; - module.exports = o; - -==== /ib.js (0 errors) ==== - /** @type {typeof import("./mb")} */ - const M = /** @type {any} */ (null); - const o = { v: { ...M } }; - module.exports = o; - -==== /ia2.d.ts (0 errors) ==== - export { v } from "./ia"; - export type v = number; - -==== /ib2.d.ts (0 errors) ==== - export { v } from "./ib"; - export type v = number; - -==== /index.d.ts (0 errors) ==== - export { v as a } from "./ia2"; - export { v as b } from "./ib2"; - export const f1: 1; - export const f2: 2; - export const f3: 3; - export const f4: 4; - export const f5: 5; - export const f6: 6; - export const f7: 7; - export const f8: 8; - export const f9: 9; - export const f10: 10; - -==== /index2.d.ts (0 errors) ==== - export { v as a } from "./ia2"; - export { v as b } from "./ib2"; - -==== /d.d.ts (0 errors) ==== - export * from "./index"; - export * from "./index2"; - \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.js b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.js index beb6f57cf711b..16451214413ab 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.js +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.js @@ -160,20 +160,13 @@ exports.checkB = MB.pb.ma; //// [xb.d.ts] export = o; -declare const o: { - v: {}; -}; +declare const o: any; //// [mb.d.ts] export { v as pb } from "./xb"; export declare const mb = 1; //// [xa.d.ts] export = o; -declare const o: { - v: { - pb: {}; - mb: 1; - }; -}; +declare const o: any; //// [ma.d.ts] export { v as pa } from "./xa"; export declare const ma = 1; @@ -181,10 +174,7 @@ export declare const ma = 1; export = o; declare const o: { v: { - pa: { - pb: {}; - mb: 1; - }; + pa: any; ma: 1; }; }; @@ -192,15 +182,12 @@ declare const o: { export = o; declare const o: { v: { - pb: {}; + pb: any; mb: 1; }; }; //// [main.d.ts] -export declare const fromA: { - pb: {}; - mb: 1; -}; -export declare const fromB: {}; +export declare const fromA: any; +export declare const fromB: any; export declare const checkA: 1; export declare const checkB: 1; diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.symbols b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.symbols index e737ff2cbfb8a..9e37f17fe0dc2 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.symbols +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.symbols @@ -28,11 +28,9 @@ export const fromB = MB.pb; export const checkA: 1 = MA.pa.mb; >checkA : Symbol(checkA, Decl(main.ts, 6, 12)) ->MA.pa.mb : Symbol(mb, Decl(mb.js, 1, 12)) >MA.pa : Symbol(MA.pa, Decl(ma.js, 0, 8)) >MA : Symbol(MA, Decl(main.ts, 2, 6)) >pa : Symbol(MA.pa, Decl(ma.js, 0, 8)) ->mb : Symbol(mb, Decl(mb.js, 1, 12)) export const checkB: 1 = MB.pb.ma; >checkB : Symbol(checkB, Decl(main.ts, 7, 12)) @@ -42,7 +40,6 @@ export const checkB: 1 = MB.pb.ma; === /ma.js === export { v as pa } from "./xa"; ->v : Symbol(v, Decl(xa.js, 2, 11)) >pa : Symbol(pa, Decl(ma.js, 0, 8)) export const ma = 1; @@ -50,7 +47,6 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; ->v : Symbol(v, Decl(xb.js, 2, 11)) >pb : Symbol(pb, Decl(mb.js, 0, 8)) export const mb = 1; diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.types b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.types index 53a815348e451..561dc63d54bb8 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.types +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.types @@ -5,8 +5,8 @@ import * as idx from "./d"; >idx : typeof idx const all = { ...idx }; ->all : { a: { pa: { pb: {}; mb: 1; }; ma: 1; }; b: { pb: {}; mb: 1; }; f1: 1; f2: 2; f3: 3; f4: 4; f5: 5; f6: 6; f7: 7; f8: 8; f9: 9; f10: 10; } ->{ ...idx } : { a: { pa: { pb: {}; mb: 1; }; ma: 1; }; b: { pb: {}; mb: 1; }; f1: 1; f2: 2; f3: 3; f4: 4; f5: 5; f6: 6; f7: 7; f8: 8; f9: 9; f10: 10; } +>all : { a: { pa: any; ma: 1; }; b: { pb: any; mb: 1; }; f1: 1; f2: 2; f3: 3; f4: 4; f5: 5; f6: 6; f7: 7; f8: 8; f9: 9; f10: 10; } +>{ ...idx } : { a: { pa: any; ma: 1; }; b: { pb: any; mb: 1; }; f1: 1; f2: 2; f3: 3; f4: 4; f5: 5; f6: 6; f7: 7; f8: 8; f9: 9; f10: 10; } >idx : typeof idx import * as MA from "./ma"; @@ -16,37 +16,37 @@ import * as MB from "./mb"; >MB : typeof MB export const fromA = MA.pa; ->fromA : { pb: {}; mb: 1; } ->MA.pa : { pb: {}; mb: 1; } +>fromA : error +>MA.pa : error >MA : typeof MA ->pa : { pb: {}; mb: 1; } +>pa : any export const fromB = MB.pb; ->fromB : {} ->MB.pb : {} +>fromB : error +>MB.pb : error >MB : typeof MB ->pb : {} +>pb : any export const checkA: 1 = MA.pa.mb; >checkA : 1 ->MA.pa.mb : 1 ->MA.pa : { pb: {}; mb: 1; } +>MA.pa.mb : error +>MA.pa : any >MA : typeof MA ->pa : { pb: {}; mb: 1; } ->mb : 1 +>pa : any +>mb : any export const checkB: 1 = MB.pb.ma; >checkB : 1 ->MB.pb.ma : any ->MB.pb : {} +>MB.pb.ma : error +>MB.pb : any >MB : typeof MB ->pb : {} +>pb : any >ma : any === /ma.js === export { v as pa } from "./xa"; ->v : { pb: {}; mb: 1; } ->pa : { pb: {}; mb: 1; } +>v : any +>pa : any export const ma = 1; >ma : 1 @@ -54,8 +54,8 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; ->v : {} ->pb : {} +>v : any +>pb : any export const mb = 1; >mb : 1 @@ -68,18 +68,18 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : { v: { pb: {}; mb: 1; }; } ->{ v: { ...M } } : { v: { pb: {}; mb: 1; }; } ->v : { pb: {}; mb: 1; } ->{ ...M } : { pb: {}; mb: 1; } +>o : any +>{ v: { ...M } } : { v: { pb: any; mb: 1; }; } +>v : { pb: any; mb: 1; } +>{ ...M } : { pb: any; mb: 1; } >M : typeof import("./mb") module.exports = o; ->module.exports = o : { v: { pb: {}; mb: 1; }; } ->module.exports : { v: { pb: {}; mb: 1; }; } ->module : { exports: { v: { pb: {}; mb: 1; }; }; } ->exports : { v: { pb: {}; mb: 1; }; } ->o : { v: { pb: {}; mb: 1; }; } +>module.exports = o : any +>module.exports : any +>module : { exports: any; } +>exports : any +>o : any === /xb.js === /** @type {typeof import("./ma")} */ @@ -88,18 +88,18 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : { v: {}; } ->{ v: { ...M } } : { v: {}; } ->v : {} ->{ ...M } : {} +>o : any +>{ v: { ...M } } : { v: { pa: any; ma: 1; }; } +>v : { pa: any; ma: 1; } +>{ ...M } : { pa: any; ma: 1; } >M : typeof import("./ma") module.exports = o; ->module.exports = o : { v: {}; } ->module.exports : { v: {}; } ->module : { exports: { v: {}; }; } ->exports : { v: {}; } ->o : { v: {}; } +>module.exports = o : any +>module.exports : any +>module : { exports: any; } +>exports : any +>o : any === /ia.js === /** @type {typeof import("./ma")} */ @@ -108,18 +108,18 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->{ v: { ...M } } : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->v : { pa: { pb: {}; mb: 1; }; ma: 1; } ->{ ...M } : { pa: { pb: {}; mb: 1; }; ma: 1; } +>o : { v: { pa: any; ma: 1; }; } +>{ v: { ...M } } : { v: { pa: any; ma: 1; }; } +>v : { pa: any; ma: 1; } +>{ ...M } : { pa: any; ma: 1; } >M : typeof import("./ma") module.exports = o; ->module.exports = o : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->module.exports : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->module : { exports: { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; }; } ->exports : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } ->o : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } +>module.exports = o : { v: { pa: any; ma: 1; }; } +>module.exports : { v: { pa: any; ma: 1; }; } +>module : { exports: { v: { pa: any; ma: 1; }; }; } +>exports : { v: { pa: any; ma: 1; }; } +>o : { v: { pa: any; ma: 1; }; } === /ib.js === /** @type {typeof import("./mb")} */ @@ -128,41 +128,41 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : { v: { pb: {}; mb: 1; }; } ->{ v: { ...M } } : { v: { pb: {}; mb: 1; }; } ->v : { pb: {}; mb: 1; } ->{ ...M } : { pb: {}; mb: 1; } +>o : { v: { pb: any; mb: 1; }; } +>{ v: { ...M } } : { v: { pb: any; mb: 1; }; } +>v : { pb: any; mb: 1; } +>{ ...M } : { pb: any; mb: 1; } >M : typeof import("./mb") module.exports = o; ->module.exports = o : { v: { pb: {}; mb: 1; }; } ->module.exports : { v: { pb: {}; mb: 1; }; } ->module : { exports: { v: { pb: {}; mb: 1; }; }; } ->exports : { v: { pb: {}; mb: 1; }; } ->o : { v: { pb: {}; mb: 1; }; } +>module.exports = o : { v: { pb: any; mb: 1; }; } +>module.exports : { v: { pb: any; mb: 1; }; } +>module : { exports: { v: { pb: any; mb: 1; }; }; } +>exports : { v: { pb: any; mb: 1; }; } +>o : { v: { pb: any; mb: 1; }; } === /ia2.d.ts === export { v } from "./ia"; ->v : { pa: { pb: {}; mb: 1; }; ma: 1; } +>v : { pa: any; ma: 1; } export type v = number; >v : number === /ib2.d.ts === export { v } from "./ib"; ->v : { pb: {}; mb: 1; } +>v : { pb: any; mb: 1; } export type v = number; >v : number === /index.d.ts === export { v as a } from "./ia2"; ->v : { pa: { pb: {}; mb: 1; }; ma: 1; } ->a : { pa: { pb: {}; mb: 1; }; ma: 1; } +>v : { pa: any; ma: 1; } +>a : { pa: any; ma: 1; } export { v as b } from "./ib2"; ->v : { pb: {}; mb: 1; } ->b : { pb: {}; mb: 1; } +>v : { pb: any; mb: 1; } +>b : { pb: any; mb: 1; } export const f1: 1; >f1 : 1 @@ -196,12 +196,12 @@ export const f10: 10; === /index2.d.ts === export { v as a } from "./ia2"; ->v : { pa: { pb: {}; mb: 1; }; ma: 1; } ->a : { pa: { pb: {}; mb: 1; }; ma: 1; } +>v : { pa: any; ma: 1; } +>a : { pa: any; ma: 1; } export { v as b } from "./ib2"; ->v : { pb: {}; mb: 1; } ->b : { pb: {}; mb: 1; } +>v : { pb: any; mb: 1; } +>b : { pb: any; mb: 1; } === /d.d.ts === diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNonExportedMemberOrder.errors.txt b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNonExportedMemberOrder.errors.txt index aba9bd814f87b..9d0c5d89f5be4 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNonExportedMemberOrder.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNonExportedMemberOrder.errors.txt @@ -1,6 +1,6 @@ /main.ts(2,10): error TS2459: Module '"mt"' declares 'zz' locally, but it is not exported. /main.ts(6,14): error TS2322: Type '{ pb: 0; readonly mb: 1; v: 0; }' is not assignable to type 'never'. -/main.ts(7,14): error TS2322: Type '{ v: 0; }' is not assignable to type 'never'. +/main.ts(7,14): error TS2322: Type '{ pa: 0; readonly ma: 1; v: 0; }' is not assignable to type 'never'. ==== /main.ts (3 errors) ==== @@ -17,7 +17,7 @@ !!! error TS2322: Type '{ pb: 0; readonly mb: 1; v: 0; }' is not assignable to type 'never'. export const obsB: never = expand(); ~~~~ -!!! error TS2322: Type '{ v: 0; }' is not assignable to type 'never'. +!!! error TS2322: Type '{ pa: 0; readonly ma: 1; v: 0; }' is not assignable to type 'never'. ==== /ambient.d.ts (0 errors) ==== declare module "ma" { diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNonExportedMemberOrder.types b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNonExportedMemberOrder.types index 00ba3854da277..ce4272bde5283 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNonExportedMemberOrder.types +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNonExportedMemberOrder.types @@ -22,7 +22,7 @@ export const obsA: never = expand(); export const obsB: never = expand(); >obsB : never ->expand() : { v: 0; } +>expand() : { pa: 0; readonly ma: 1; v: 0; } >expand : () => { [K in keyof X]: X[K]; } >oxb : O diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyExportEqualsWithOtherExportsCheckOrder.errors.txt b/tsc/testdata/baselines/reference/compiler/noFlakyExportEqualsWithOtherExportsCheckOrder.errors.txt index d81eb346f2055..c291bb9504fc7 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyExportEqualsWithOtherExportsCheckOrder.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/noFlakyExportEqualsWithOtherExportsCheckOrder.errors.txt @@ -1,8 +1,7 @@ /mm.ts(5,1): error TS2309: An export assignment cannot be used in a module with other exported elements. -/mm.ts(19,30): error TS2339: Property 'pa' does not exist on type 'O'. -==== /mm.ts (2 errors) ==== +==== /mm.ts (1 errors) ==== /// declare const oxa: typeof import("xa"); declare const oxb: typeof import("xb"); @@ -24,8 +23,6 @@ export interface F10 {} export const checkA: 0 = oxa.pb; export const checkB: 0 = oxb.pa; - ~~ -!!! error TS2339: Property 'pa' does not exist on type 'O'. ==== /ambient.d.ts (0 errors) ==== declare module "ma" { diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyExportEqualsWithOtherExportsCheckOrder.symbols b/tsc/testdata/baselines/reference/compiler/noFlakyExportEqualsWithOtherExportsCheckOrder.symbols index 74a9fa86901eb..dc3daa982e602 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyExportEqualsWithOtherExportsCheckOrder.symbols +++ b/tsc/testdata/baselines/reference/compiler/noFlakyExportEqualsWithOtherExportsCheckOrder.symbols @@ -61,7 +61,9 @@ export const checkA: 0 = oxa.pb; export const checkB: 0 = oxb.pa; >checkB : Symbol(checkB, Decl(mm.ts, 18, 12)) +>oxb.pa : Symbol(pa, Decl(ambient.d.ts, 1, 12)) >oxb : Symbol(oxb, Decl(mm.ts, 2, 13)) +>pa : Symbol(pa, Decl(ambient.d.ts, 1, 12)) === /ambient.d.ts === declare module "ma" { diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyExportEqualsWithOtherExportsCheckOrder.types b/tsc/testdata/baselines/reference/compiler/noFlakyExportEqualsWithOtherExportsCheckOrder.types index 44664dcadfb80..d50ab18d6826e 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyExportEqualsWithOtherExportsCheckOrder.types +++ b/tsc/testdata/baselines/reference/compiler/noFlakyExportEqualsWithOtherExportsCheckOrder.types @@ -41,9 +41,9 @@ export const checkA: 0 = oxa.pb; export const checkB: 0 = oxb.pa; >checkB : 0 ->oxb.pa : any +>oxb.pa : 0 >oxb : O ->pa : any +>pa : 0 === /ambient.d.ts === declare module "ma" { diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyExportEqualsWithOtherExportsImportOrder.js b/tsc/testdata/baselines/reference/compiler/noFlakyExportEqualsWithOtherExportsImportOrder.js index 37e7a9ff94890..527e0cf1c555a 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyExportEqualsWithOtherExportsImportOrder.js +++ b/tsc/testdata/baselines/reference/compiler/noFlakyExportEqualsWithOtherExportsImportOrder.js @@ -71,5 +71,7 @@ export declare const obsA: { v: 0; }; export declare const obsB: { + pa: 0; + readonly ma: 1; v: 0; }; diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyExportEqualsWithOtherExportsImportOrder.types b/tsc/testdata/baselines/reference/compiler/noFlakyExportEqualsWithOtherExportsImportOrder.types index c0ba114c78355..03579880e27c4 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyExportEqualsWithOtherExportsImportOrder.types +++ b/tsc/testdata/baselines/reference/compiler/noFlakyExportEqualsWithOtherExportsImportOrder.types @@ -25,8 +25,8 @@ export const obsA = expand(); >oxa : O export const obsB = expand(); ->obsB : { v: 0; } ->expand() : { v: 0; } +>obsB : { pa: 0; readonly ma: 1; v: 0; } +>expand() : { pa: 0; readonly ma: 1; v: 0; } >expand : () => { [K in keyof X]: X[K]; } >oxb : O diff --git a/tsc/testdata/baselines/reference/compiler/sharedMemberLayoutThisIntersectionBase.errors.txt b/tsc/testdata/baselines/reference/compiler/sharedMemberLayoutThisIntersectionBase(checkorder=default).errors.txt similarity index 100% rename from tsc/testdata/baselines/reference/compiler/sharedMemberLayoutThisIntersectionBase.errors.txt rename to tsc/testdata/baselines/reference/compiler/sharedMemberLayoutThisIntersectionBase(checkorder=default).errors.txt diff --git a/tsc/testdata/baselines/reference/compiler/sharedMemberLayoutThisIntersectionBase.symbols b/tsc/testdata/baselines/reference/compiler/sharedMemberLayoutThisIntersectionBase(checkorder=default).symbols similarity index 100% rename from tsc/testdata/baselines/reference/compiler/sharedMemberLayoutThisIntersectionBase.symbols rename to tsc/testdata/baselines/reference/compiler/sharedMemberLayoutThisIntersectionBase(checkorder=default).symbols diff --git a/tsc/testdata/baselines/reference/compiler/sharedMemberLayoutThisIntersectionBase.types b/tsc/testdata/baselines/reference/compiler/sharedMemberLayoutThisIntersectionBase(checkorder=default).types similarity index 100% rename from tsc/testdata/baselines/reference/compiler/sharedMemberLayoutThisIntersectionBase.types rename to tsc/testdata/baselines/reference/compiler/sharedMemberLayoutThisIntersectionBase(checkorder=default).types diff --git a/tsc/testdata/baselines/reference/compiler/sharedMemberLayoutThisIntersectionBase(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/sharedMemberLayoutThisIntersectionBase(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..b56bf6531dd0a --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/sharedMemberLayoutThisIntersectionBase(checkorder=typesfirst).errors.txt @@ -0,0 +1,24 @@ +sharedMemberLayoutThisIntersectionBase.ts(7,3): error TS2339: Property 'm' does not exist on type 'D<"b">'. +sharedMemberLayoutThisIntersectionBase.ts(12,3): error TS2339: Property 'm' does not exist on type 'C<"b">'. + + +==== sharedMemberLayoutThisIntersectionBase.ts (2 errors) ==== + interface A { kind: string; m: this["kind"] } + interface B { m: "a" } + type AB = A & B; + + interface D extends AB { kind: T } + declare let d: D<"b">; + d.m; + ~ +!!! error TS2339: Property 'm' does not exist on type 'D<"b">'. + + declare const ABCtor: new () => AB; + class C extends ABCtor { declare kind: T } + declare let c: C<"b">; + c.m; + ~ +!!! error TS2339: Property 'm' does not exist on type 'C<"b">'. + + export {}; + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/sharedMemberLayoutThisIntersectionBase(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/sharedMemberLayoutThisIntersectionBase(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..793b38f82728b --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/sharedMemberLayoutThisIntersectionBase(checkorder=typesfirst).symbols @@ -0,0 +1,51 @@ +//// [tests/cases/compiler/sharedMemberLayoutThisIntersectionBase.ts] //// + +=== sharedMemberLayoutThisIntersectionBase.ts === +interface A { kind: string; m: this["kind"] } +>A : Symbol(A, Decl(sharedMemberLayoutThisIntersectionBase.ts, 0, 0)) +>kind : Symbol(A.kind, Decl(sharedMemberLayoutThisIntersectionBase.ts, 0, 13)) +>m : Symbol(A.m, Decl(sharedMemberLayoutThisIntersectionBase.ts, 0, 27)) + +interface B { m: "a" } +>B : Symbol(B, Decl(sharedMemberLayoutThisIntersectionBase.ts, 0, 45)) +>m : Symbol(B.m, Decl(sharedMemberLayoutThisIntersectionBase.ts, 1, 13)) + +type AB = A & B; +>AB : Symbol(AB, Decl(sharedMemberLayoutThisIntersectionBase.ts, 1, 22)) +>A : Symbol(A, Decl(sharedMemberLayoutThisIntersectionBase.ts, 0, 0)) +>B : Symbol(B, Decl(sharedMemberLayoutThisIntersectionBase.ts, 0, 45)) + +interface D extends AB { kind: T } +>D : Symbol(D, Decl(sharedMemberLayoutThisIntersectionBase.ts, 2, 16)) +>T : Symbol(T, Decl(sharedMemberLayoutThisIntersectionBase.ts, 4, 12)) +>AB : Symbol(AB, Decl(sharedMemberLayoutThisIntersectionBase.ts, 1, 22)) +>kind : Symbol(D.kind, Decl(sharedMemberLayoutThisIntersectionBase.ts, 4, 42)) +>T : Symbol(T, Decl(sharedMemberLayoutThisIntersectionBase.ts, 4, 12)) + +declare let d: D<"b">; +>d : Symbol(d, Decl(sharedMemberLayoutThisIntersectionBase.ts, 5, 11)) +>D : Symbol(D, Decl(sharedMemberLayoutThisIntersectionBase.ts, 2, 16)) + +d.m; +>d : Symbol(d, Decl(sharedMemberLayoutThisIntersectionBase.ts, 5, 11)) + +declare const ABCtor: new () => AB; +>ABCtor : Symbol(ABCtor, Decl(sharedMemberLayoutThisIntersectionBase.ts, 8, 13)) +>AB : Symbol(AB, Decl(sharedMemberLayoutThisIntersectionBase.ts, 1, 22)) + +class C extends ABCtor { declare kind: T } +>C : Symbol(C, Decl(sharedMemberLayoutThisIntersectionBase.ts, 8, 35)) +>T : Symbol(T, Decl(sharedMemberLayoutThisIntersectionBase.ts, 9, 8)) +>ABCtor : Symbol(ABCtor, Decl(sharedMemberLayoutThisIntersectionBase.ts, 8, 13)) +>kind : Symbol(C.kind, Decl(sharedMemberLayoutThisIntersectionBase.ts, 9, 42)) +>T : Symbol(T, Decl(sharedMemberLayoutThisIntersectionBase.ts, 9, 8)) + +declare let c: C<"b">; +>c : Symbol(c, Decl(sharedMemberLayoutThisIntersectionBase.ts, 10, 11)) +>C : Symbol(C, Decl(sharedMemberLayoutThisIntersectionBase.ts, 8, 35)) + +c.m; +>c : Symbol(c, Decl(sharedMemberLayoutThisIntersectionBase.ts, 10, 11)) + +export {}; + diff --git a/tsc/testdata/baselines/reference/compiler/sharedMemberLayoutThisIntersectionBase(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/sharedMemberLayoutThisIntersectionBase(checkorder=typesfirst).types new file mode 100644 index 0000000000000..41de65a71ea2f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/sharedMemberLayoutThisIntersectionBase(checkorder=typesfirst).types @@ -0,0 +1,42 @@ +//// [tests/cases/compiler/sharedMemberLayoutThisIntersectionBase.ts] //// + +=== sharedMemberLayoutThisIntersectionBase.ts === +interface A { kind: string; m: this["kind"] } +>kind : string +>m : this["kind"] + +interface B { m: "a" } +>m : "a" + +type AB = A & B; +>AB : AB + +interface D extends AB { kind: T } +>kind : T + +declare let d: D<"b">; +>d : D<"b"> + +d.m; +>d.m : any +>d : D<"b"> +>m : any + +declare const ABCtor: new () => AB; +>ABCtor : new () => AB + +class C extends ABCtor { declare kind: T } +>C : C +>ABCtor : A & B +>kind : T + +declare let c: C<"b">; +>c : C<"b"> + +c.m; +>c.m : any +>c : C<"b"> +>m : any + +export {}; + diff --git a/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=default).errors.txt b/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=default).errors.txt index 2c10283c820ef..afb511fd91c39 100644 --- a/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=default).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=default).errors.txt @@ -1,9 +1,18 @@ +templateLiteralTypeExcessiveLength.ts(14,16): error TS2589: Type instantiation is excessively deep and possibly infinite. +templateLiteralTypeExcessiveLength.ts(15,6): error TS2589: Type instantiation is excessively deep and possibly infinite. templateLiteralTypeExcessiveLength.ts(15,11): error TS2589: Type instantiation is excessively deep and possibly infinite. +templateLiteralTypeExcessiveLength.ts(15,28): error TS2589: Type instantiation is excessively deep and possibly infinite. +templateLiteralTypeExcessiveLength.ts(19,21): error TS2589: Type instantiation is excessively deep and possibly infinite. +templateLiteralTypeExcessiveLength.ts(20,6): error TS2589: Type instantiation is excessively deep and possibly infinite. templateLiteralTypeExcessiveLength.ts(20,11): error TS2589: Type instantiation is excessively deep and possibly infinite. +templateLiteralTypeExcessiveLength.ts(20,31): error TS2589: Type instantiation is excessively deep and possibly infinite. +templateLiteralTypeExcessiveLength.ts(33,24): error TS2589: Type instantiation is excessively deep and possibly infinite. +templateLiteralTypeExcessiveLength.ts(34,6): error TS2589: Type instantiation is excessively deep and possibly infinite. templateLiteralTypeExcessiveLength.ts(34,11): error TS2589: Type instantiation is excessively deep and possibly infinite. +templateLiteralTypeExcessiveLength.ts(34,38): error TS2589: Type instantiation is excessively deep and possibly infinite. -==== templateLiteralTypeExcessiveLength.ts (3 errors) ==== +==== templateLiteralTypeExcessiveLength.ts (12 errors) ==== // Regression test for #63271: `Dec<2>` is `any`, so `Recur` produces both conditional branches and // keeps tail-recursing forever. The checker must report an error instead of building an unbounded // template literal type. @@ -18,17 +27,33 @@ templateLiteralTypeExcessiveLength.ts(34,11): error TS2589: Type instantiation i // The string literal doubles on every iteration. type Explode = { + ~ [P in Recur<5, "a"> as `${P}_key`]: any; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. ~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. + ~~~~~~~~~~ !!! error TS2589: Type instantiation is excessively deep and possibly infinite. }; + ~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. // The number of placeholders doubles on every iteration. type ExplodeSpans = { + ~ [P in Recur<5, string> as `${P}_key`]: any; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. ~~~~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. + ~~~~~~~~~~ !!! error TS2589: Type instantiation is excessively deep and possibly infinite. }; + ~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. // Every text segment stays small, but the number of segments doubles on every iteration, // so the combined text length grows without bound. @@ -41,8 +66,16 @@ templateLiteralTypeExcessiveLength.ts(34,11): error TS2589: Type instantiation i N extends 0 ? S : RecurSegments, `${S}${string}${S}`>; type ExplodeSegments = { + ~ [P in RecurSegments<5, A1024> as `${P}_key`]: any; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. ~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. + ~~~~~~~~~~ !!! error TS2589: Type instantiation is excessively deep and possibly infinite. }; + ~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).errors.txt index 2c10283c820ef..75017c0b48808 100644 --- a/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).errors.txt @@ -1,9 +1,15 @@ +templateLiteralTypeExcessiveLength.ts(15,6): error TS2589: Type instantiation is excessively deep and possibly infinite. templateLiteralTypeExcessiveLength.ts(15,11): error TS2589: Type instantiation is excessively deep and possibly infinite. +templateLiteralTypeExcessiveLength.ts(15,28): error TS2589: Type instantiation is excessively deep and possibly infinite. +templateLiteralTypeExcessiveLength.ts(20,6): error TS2589: Type instantiation is excessively deep and possibly infinite. templateLiteralTypeExcessiveLength.ts(20,11): error TS2589: Type instantiation is excessively deep and possibly infinite. +templateLiteralTypeExcessiveLength.ts(20,31): error TS2589: Type instantiation is excessively deep and possibly infinite. +templateLiteralTypeExcessiveLength.ts(34,6): error TS2589: Type instantiation is excessively deep and possibly infinite. templateLiteralTypeExcessiveLength.ts(34,11): error TS2589: Type instantiation is excessively deep and possibly infinite. +templateLiteralTypeExcessiveLength.ts(34,38): error TS2589: Type instantiation is excessively deep and possibly infinite. -==== templateLiteralTypeExcessiveLength.ts (3 errors) ==== +==== templateLiteralTypeExcessiveLength.ts (9 errors) ==== // Regression test for #63271: `Dec<2>` is `any`, so `Recur` produces both conditional branches and // keeps tail-recursing forever. The checker must report an error instead of building an unbounded // template literal type. @@ -19,14 +25,22 @@ templateLiteralTypeExcessiveLength.ts(34,11): error TS2589: Type instantiation i // The string literal doubles on every iteration. type Explode = { [P in Recur<5, "a"> as `${P}_key`]: any; + ~~~~~~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. ~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. + ~~~~~~~~~~ !!! error TS2589: Type instantiation is excessively deep and possibly infinite. }; // The number of placeholders doubles on every iteration. type ExplodeSpans = { [P in Recur<5, string> as `${P}_key`]: any; + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. ~~~~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. + ~~~~~~~~~~ !!! error TS2589: Type instantiation is excessively deep and possibly infinite. }; @@ -42,7 +56,11 @@ templateLiteralTypeExcessiveLength.ts(34,11): error TS2589: Type instantiation i type ExplodeSegments = { [P in RecurSegments<5, A1024> as `${P}_key`]: any; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. ~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. + ~~~~~~~~~~ !!! error TS2589: Type instantiation is excessively deep and possibly infinite. }; \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/varianceCycleCachedResults.types b/tsc/testdata/baselines/reference/compiler/varianceCycleCachedResults.types index c5448fc75d3ab..5375d64684132 100644 --- a/tsc/testdata/baselines/reference/compiler/varianceCycleCachedResults.types +++ b/tsc/testdata/baselines/reference/compiler/varianceCycleCachedResults.types @@ -29,7 +29,7 @@ class Box { >value : T m() { ->m : () => Box +>m : () => Box | Box if (cond) return a1; >cond : boolean @@ -40,10 +40,10 @@ class Box { } } const r = new Box().m(); ->r : Box ->new Box().m() : Box ->new Box().m : () => Box +>r : Box | Box +>new Box().m() : Box | Box +>new Box().m : () => Box | Box >new Box() : Box >Box : typeof Box ->m : () => Box +>m : () => Box | Box diff --git a/tsc/testdata/baselines/reference/conformance/recursiveMappedTypes.errors.txt b/tsc/testdata/baselines/reference/conformance/recursiveMappedTypes.errors.txt index 7e28028029921..e2cd22aa096b4 100644 --- a/tsc/testdata/baselines/reference/conformance/recursiveMappedTypes.errors.txt +++ b/tsc/testdata/baselines/reference/conformance/recursiveMappedTypes.errors.txt @@ -4,12 +4,14 @@ recursiveMappedTypes.ts(7,6): error TS2456: Type alias 'Recurse1' circularly ref recursiveMappedTypes.ts(8,11): error TS2313: Type parameter 'K' has a circular constraint. recursiveMappedTypes.ts(11,6): error TS2456: Type alias 'Recurse2' circularly references itself. recursiveMappedTypes.ts(12,11): error TS2313: Type parameter 'K' has a circular constraint. +recursiveMappedTypes.ts(20,14): error TS5114: Instantiations of type 'Circular' appear infinitely circular. recursiveMappedTypes.ts(20,19): error TS5114: Instantiations of type 'Circular' appear infinitely circular. +recursiveMappedTypes.ts(21,10): error TS5114: Instantiations of type 'Circular' appear infinitely circular. recursiveMappedTypes.ts(73,5): error TS2502: '"each"' is referenced directly or indirectly in its own type annotation. recursiveMappedTypes.ts(73,13): error TS2615: Type of property '"each"' circularly references itself in mapped type '{ [P in keyof ListWidget]: undefined extends ListWidget[P] ? never : P; }'. -==== recursiveMappedTypes.ts (9 errors) ==== +==== recursiveMappedTypes.ts (11 errors) ==== // Recursive mapped types simply appear empty type Recurse = { @@ -43,9 +45,13 @@ recursiveMappedTypes.ts(73,13): error TS2615: Type of property '"each"' circular type tup = [number, number, number, number]; function foo(arg: Circular): tup { + ~~~~~~~~~~~~~~~~~~ +!!! error TS5114: Instantiations of type 'Circular' appear infinitely circular. ~~~~~~~~~~~~~ !!! error TS5114: Instantiations of type 'Circular' appear infinitely circular. return arg; + ~~~ +!!! error TS5114: Instantiations of type 'Circular' appear infinitely circular. } // Repro from #29442 diff --git a/tsc/testdata/baselines/reference/conformance/staticPropertyNameConflicts(target=es2015,usedefineforclassfields=false).types b/tsc/testdata/baselines/reference/conformance/staticPropertyNameConflicts(target=es2015,usedefineforclassfields=false).types index fefe61aa299cf..f5be9eaed3136 100644 --- a/tsc/testdata/baselines/reference/conformance/staticPropertyNameConflicts(target=es2015,usedefineforclassfields=false).types +++ b/tsc/testdata/baselines/reference/conformance/staticPropertyNameConflicts(target=es2015,usedefineforclassfields=false).types @@ -149,7 +149,7 @@ class StaticPrototype2 { >StaticPrototype2 : StaticPrototype2 static [FunctionPropertyNames.prototype]: number; // always an error ->[FunctionPropertyNames.prototype] : StaticPrototype2 +>[FunctionPropertyNames.prototype] : number >FunctionPropertyNames.prototype : "prototype" >FunctionPropertyNames : { readonly name: 'name'; readonly length: 'length'; readonly prototype: 'prototype'; readonly caller: 'caller'; readonly arguments: 'arguments'; } >prototype : "prototype" @@ -427,7 +427,7 @@ var StaticPrototype_Anonymous2 = class { >class { static [FunctionPropertyNames.prototype]: number; // always an error [FunctionPropertyNames.prototype]: string; // ok} : typeof StaticPrototype_Anonymous2 static [FunctionPropertyNames.prototype]: number; // always an error ->[FunctionPropertyNames.prototype] : StaticPrototype_Anonymous2 +>[FunctionPropertyNames.prototype] : number >FunctionPropertyNames.prototype : "prototype" >FunctionPropertyNames : { readonly name: 'name'; readonly length: 'length'; readonly prototype: 'prototype'; readonly caller: 'caller'; readonly arguments: 'arguments'; } >prototype : "prototype" @@ -725,7 +725,7 @@ export class ExportedStaticPrototype { >ExportedStaticPrototype : ExportedStaticPrototype static [FunctionPropertyNames.prototype]: number; // always an error ->[FunctionPropertyNames.prototype] : ExportedStaticPrototype +>[FunctionPropertyNames.prototype] : number >FunctionPropertyNames.prototype : "prototype" >FunctionPropertyNames : { readonly name: 'name'; readonly length: 'length'; readonly prototype: 'prototype'; readonly caller: 'caller'; readonly arguments: 'arguments'; } >prototype : "prototype" diff --git a/tsc/testdata/baselines/reference/conformance/staticPropertyNameConflicts(target=es2015,usedefineforclassfields=true).types b/tsc/testdata/baselines/reference/conformance/staticPropertyNameConflicts(target=es2015,usedefineforclassfields=true).types index fefe61aa299cf..f5be9eaed3136 100644 --- a/tsc/testdata/baselines/reference/conformance/staticPropertyNameConflicts(target=es2015,usedefineforclassfields=true).types +++ b/tsc/testdata/baselines/reference/conformance/staticPropertyNameConflicts(target=es2015,usedefineforclassfields=true).types @@ -149,7 +149,7 @@ class StaticPrototype2 { >StaticPrototype2 : StaticPrototype2 static [FunctionPropertyNames.prototype]: number; // always an error ->[FunctionPropertyNames.prototype] : StaticPrototype2 +>[FunctionPropertyNames.prototype] : number >FunctionPropertyNames.prototype : "prototype" >FunctionPropertyNames : { readonly name: 'name'; readonly length: 'length'; readonly prototype: 'prototype'; readonly caller: 'caller'; readonly arguments: 'arguments'; } >prototype : "prototype" @@ -427,7 +427,7 @@ var StaticPrototype_Anonymous2 = class { >class { static [FunctionPropertyNames.prototype]: number; // always an error [FunctionPropertyNames.prototype]: string; // ok} : typeof StaticPrototype_Anonymous2 static [FunctionPropertyNames.prototype]: number; // always an error ->[FunctionPropertyNames.prototype] : StaticPrototype_Anonymous2 +>[FunctionPropertyNames.prototype] : number >FunctionPropertyNames.prototype : "prototype" >FunctionPropertyNames : { readonly name: 'name'; readonly length: 'length'; readonly prototype: 'prototype'; readonly caller: 'caller'; readonly arguments: 'arguments'; } >prototype : "prototype" @@ -725,7 +725,7 @@ export class ExportedStaticPrototype { >ExportedStaticPrototype : ExportedStaticPrototype static [FunctionPropertyNames.prototype]: number; // always an error ->[FunctionPropertyNames.prototype] : ExportedStaticPrototype +>[FunctionPropertyNames.prototype] : number >FunctionPropertyNames.prototype : "prototype" >FunctionPropertyNames : { readonly name: 'name'; readonly length: 'length'; readonly prototype: 'prototype'; readonly caller: 'caller'; readonly arguments: 'arguments'; } >prototype : "prototype" diff --git a/tsc/testdata/baselines/reference/conformance/templateLiteralTypes1.errors.txt b/tsc/testdata/baselines/reference/conformance/templateLiteralTypes1.errors.txt index ed921a5dbfe66..a77ac80910723 100644 --- a/tsc/testdata/baselines/reference/conformance/templateLiteralTypes1.errors.txt +++ b/tsc/testdata/baselines/reference/conformance/templateLiteralTypes1.errors.txt @@ -6,10 +6,13 @@ templateLiteralTypes1.ts(165,15): error TS1338: 'infer' declarations are only pe templateLiteralTypes1.ts(197,16): error TS2590: Expression produces a union type that is too complex to represent. templateLiteralTypes1.ts(201,16): error TS2590: Expression produces a union type that is too complex to represent. templateLiteralTypes1.ts(205,16): error TS2590: Expression produces a union type that is too complex to represent. +templateLiteralTypes1.ts(250,5): error TS2590: Expression produces a union type that is too complex to represent. templateLiteralTypes1.ts(252,7): error TS2590: Expression produces a union type that is too complex to represent. +templateLiteralTypes1.ts(254,7): error TS2590: Expression produces a union type that is too complex to represent. +templateLiteralTypes1.ts(254,14): error TS2590: Expression produces a union type that is too complex to represent. -==== templateLiteralTypes1.ts (7 errors) ==== +==== templateLiteralTypes1.ts (10 errors) ==== // Template types example from #12754 const createScopedActionType = (scope: S) => (type: T) => `${scope}/${type}` as `${S}/${T}`; @@ -275,10 +278,18 @@ templateLiteralTypes1.ts(252,7): error TS2590: Expression produces a union type export type SpacingShorthand = | `${Spacing} ${Spacing}` + ~~~~~~~~~~~~~~~~~~~~~~~~~ | `${Spacing} ${Spacing} ${Spacing}` + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | `${Spacing} ${Spacing} ${Spacing} ${Spacing}`; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2590: Expression produces a union type that is too complex to represent. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2590: Expression produces a union type that is too complex to represent. const test1: SpacingShorthand = "0 0 0"; + ~~~~~ +!!! error TS2590: Expression produces a union type that is too complex to represent. + ~~~~~~~~~~~~~~~~ +!!! error TS2590: Expression produces a union type that is too complex to represent. \ No newline at end of file diff --git a/tsc/testdata/tests/cases/compiler/contextualCheckInDiscardedCycle.ts b/tsc/testdata/tests/cases/compiler/contextualCheckInDiscardedCycle.ts new file mode 100644 index 0000000000000..f7ecd882156e7 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/contextualCheckInDiscardedCycle.ts @@ -0,0 +1,39 @@ +// @strict: true +// @target: esnext +// @noEmit: true + +// @filename: returnTypeCycle.ts +// Callbacks contextually checked while a cycle is in progress are checked +// again once it is discarded, with their contextual parameter types. + +declare function useCallback(callback: T): T; +declare function refreshAll(options: { ids: string[]; extra: T }): Promise; + +interface View { + refresh: (force?: boolean) => Promise; +} + +declare const items: { id: string }[]; + +function useView(): View { + const refresh = useCallback((force?: boolean) => + refreshAll({ + ids: items.map(({ id }) => id), + extra: 1, + })); + return { refresh }; +} + +// @filename: yieldOperandCycle.ts +interface Eff { + [Symbol.iterator](): Generator, A, any>; + pipe(f: (self: Eff) => B): B; +} +declare function mapError(f: (e: E) => E2): (self: Eff) => Eff; +declare function fn(body: (input: number) => Generator): (input: number) => Eff; +declare function make(s: T): T; +declare const uuid: Eff; + +fn(function* (input) { + make(yield* uuid.pipe(mapError((cause) => ({ cause })))); +}); diff --git a/tsc/testdata/tests/cases/compiler/contextualCheckReentryAfterParameters.ts b/tsc/testdata/tests/cases/compiler/contextualCheckReentryAfterParameters.ts new file mode 100644 index 0000000000000..3d4cac45ed898 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/contextualCheckReentryAfterParameters.ts @@ -0,0 +1,41 @@ +// @strict: true +// @noEmit: true + +// Instantiating the type predicate inside the nested callback re-enters the +// contextual check of the enclosing functions through their outer type +// parameters. That must not discard the parameter types assigned to them. + +type Surface = { id: string; kind: "file"; path: string } | { id: string; kind: "terminal" }; +interface Panel { + surfaces: Surface[]; +} +interface Store { + panel: Panel; + openFile: (path: string) => void; + close: (id: string) => void; +} +type Creator = (set: (update: (state: T) => Partial) => void) => T; +declare function create(init: Creator): T; +declare function wrap(init: Creator): Creator; + +const update = (state: Store, updater: (current: Panel) => Panel): Partial => ({ panel: updater(state.panel) }); + +export const store = create(wrap((set) => ({ + panel: { surfaces: [] }, + openFile: (path) => + set((state) => + update(state, (current) => { + const existing = current.surfaces.find( + (surface): surface is Extract => surface.kind === "file" && surface.path === path, + ); + return existing ? current : { surfaces: [...current.surfaces, { id: path, kind: "file", path }] }; + }) + ), + close: (id) => + set((state) => + update(state, (current) => { + const index = current.surfaces.findIndex((entry) => entry.id === id); + return { surfaces: current.surfaces.slice(index) }; + }) + ), +}))); diff --git a/tsc/testdata/tests/cases/compiler/contextualReturnTypeInSpreadArgument.ts b/tsc/testdata/tests/cases/compiler/contextualReturnTypeInSpreadArgument.ts new file mode 100644 index 0000000000000..d047462f7c312 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/contextualReturnTypeInSpreadArgument.ts @@ -0,0 +1,18 @@ +// @strict: true + +enum Kind { A, B } + +interface ItemA { kind: Kind.A; name: string } +interface ItemB { kind: Kind.B; size: number } +type Item = ItemA | ItemB; + +declare function create(options: { items?: () => readonly Item[]; label: string }): void; + +function test(flag: boolean) { + create({ + label: "x", + ...(flag ? {} : { + items: () => [{ kind: Kind.A, name: "a" }], + }), + }); +} diff --git a/tsc/testdata/tests/cases/compiler/sharedMemberLayoutThisIntersectionBase.ts b/tsc/testdata/tests/cases/compiler/sharedMemberLayoutThisIntersectionBase.ts index 71209527ff35b..0d51e874d2db2 100644 --- a/tsc/testdata/tests/cases/compiler/sharedMemberLayoutThisIntersectionBase.ts +++ b/tsc/testdata/tests/cases/compiler/sharedMemberLayoutThisIntersectionBase.ts @@ -1,5 +1,6 @@ // @strict: true // @noEmit: true +// @checkOrder: default, typesfirst interface A { kind: string; m: this["kind"] } interface B { m: "a" } From 6e72ea7333d70374efa6632fc7d917c798619d3e Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 26 Oct 2026 09:33:32 -0700 Subject: [PATCH 062/194] Resolve a destructured initializer before its elements The type of a binding element under strictNullChecks depends on the type of the initializer its pattern destructures, and that initializer may refer back to elements of the pattern: const { c, f }: U = { c: 0, f: () => f }; Which participant of that cycle failed depended on which element was requested first. Entering at c resolved the initializer before f, so f was fine; entering at f made f fail with an implicit any. Resolving the initializer before any element pushes its own resolution makes every entry point take the same path as entering at the first element, so the outcome no longer depends on check order. Matching the initializer's syntax instead would need an open-ended list of forms that can wrap the reference. --- tsc/internal/checker/checker.go | 17 ++++++++++++++++- ...claration1(checkorder=typesfirst).errors.txt | 5 +---- ...eInDeclaration1(checkorder=typesfirst).types | 2 +- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index b790cff459ae7..f20538b6bcc00 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -72,6 +72,7 @@ const ( TypeSystemPropertyNameCurrentNode TypeSystemPropertyNameSimplifiedForReading TypeSystemPropertyNameSimplifiedForWriting + TypeSystemPropertyNamePatternInitializer ) type TypeResolution struct { @@ -17686,6 +17687,19 @@ func (c *Checker) getTypeOfVariableOrParameterOrPropertyWorker(symbol *ast.Symbo } return c.getWidenedType(c.getWidenedLiteralType(c.checkExpression(statements[0].Expression()))) } + if ast.IsBindingElement(declaration) && c.strictNullChecks { + // The type of a binding element depends on the type of the + // initializer its pattern destructures (see + // getBindingElementTypeFromParentType), which may in turn depend on + // the element. Resolving the initializer first, as for any element of + // the pattern, makes the cycle resolve the same way whichever element + // is requested first. + if initializer := declaration.Parent.Parent.Initializer(); initializer != nil && !c.isResolutionInProgress(initializer, TypeSystemPropertyNamePatternInitializer) { + c.beginTypeResolution(initializer, TypeSystemPropertyNamePatternInitializer) + c.getTypeOfInitializer(initializer) + c.popTypeResolution() + } + } // Handle variable, parameter or property if !c.pushTypeResolution(symbol, TypeSystemPropertyNameType) { return c.reportCircularityError(symbol) @@ -20195,7 +20209,8 @@ func (c *Checker) typeResolutionHasProperty(r *TypeResolution) bool { case TypeSystemPropertyNameAliasTarget: return c.aliasSymbolLinks.Get(r.target.(*ast.Symbol)).aliasTarget.peek() != nil case TypeSystemPropertyNameContextChecked, TypeSystemPropertyNameStructuredMembers, TypeSystemPropertyNameCurrentNode, - TypeSystemPropertyNameSimplifiedForReading, TypeSystemPropertyNameSimplifiedForWriting: + TypeSystemPropertyNameSimplifiedForReading, TypeSystemPropertyNameSimplifiedForWriting, + TypeSystemPropertyNamePatternInitializer: // Marked as checked or resolved on entry, so it is only on the stack // while in progress. return false diff --git a/tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1(checkorder=typesfirst).errors.txt index 981a83e22c019..5529a3e5e68c6 100644 --- a/tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1(checkorder=typesfirst).errors.txt +++ b/tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1(checkorder=typesfirst).errors.txt @@ -22,12 +22,11 @@ dependentDestructuredVariablesReferenceInDeclaration1.ts(25,14): error TS2339: P dependentDestructuredVariablesReferenceInDeclaration1.ts(25,17): error TS2339: Property 'f' does not exist on type 'string | number'. dependentDestructuredVariablesReferenceInDeclaration1.ts(30,14): error TS7022: 'f' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. dependentDestructuredVariablesReferenceInDeclaration1.ts(30,71): error TS2448: Block-scoped variable 'f' used before its declaration. -dependentDestructuredVariablesReferenceInDeclaration1.ts(35,14): error TS7022: 'f' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. dependentDestructuredVariablesReferenceInDeclaration1.ts(58,14): error TS2451: Cannot redeclare block-scoped variable 'f'. dependentDestructuredVariablesReferenceInDeclaration1.ts(58,17): error TS2451: Cannot redeclare block-scoped variable 'f'. -==== dependentDestructuredVariablesReferenceInDeclaration1.ts (27 errors) ==== +==== dependentDestructuredVariablesReferenceInDeclaration1.ts (26 errors) ==== // https://github.com/microsoft/TypeScript/issues/62993 { @@ -113,8 +112,6 @@ dependentDestructuredVariablesReferenceInDeclaration1.ts(58,17): error TS2451: C { const { c, f }: { c: 0; f: () => unknown } | { c: 1; f: string } = { - ~ -!!! error TS7022: 'f' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. c: 0, f: () => f, }; diff --git a/tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1(checkorder=typesfirst).types index fda8b5b052297..1e1c61a26976d 100644 --- a/tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1(checkorder=typesfirst).types +++ b/tsc/testdata/baselines/reference/conformance/dependentDestructuredVariablesReferenceInDeclaration1(checkorder=typesfirst).types @@ -103,7 +103,7 @@ { const { c, f }: { c: 0; f: () => unknown } | { c: 1; f: string } = { >c : 0 | 1 ->f : any +>f : string | (() => unknown) >c : 0 >f : () => unknown >c : 1 From 06e61d18541b0b4a5288f36fb320d82c7515670c Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 25 Oct 2026 21:52:31 -0700 Subject: [PATCH 063/194] Measure circular variances as a fixpoint MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Variances of generic types that refer to each other were measured by treating the recursive references as unmeasurable and restarting from the type with the smallest symbol. That made results independent of which type is measured first, but at an arbitrary point: occurrences of a type parameter nested in recursive references were ignored, so types like interface Foo1 { x: T; y: Foo1<(arg: T) => void> } were measured as covariant though they are invariant, and anything checked while the variances were incomplete could depend on that. Measure such types together until their variances agree instead. A measurement that needs the variances of a type still being measured uses a guess for them, starting from the most permissive variances. When the outermost measurement of the circularity finishes, any type whose variances came out stricter than guessed gets the stricter guess, everything computed from the old guesses is discarded, and the types are measured again. In the test suite it takes at most four rounds. The measurements in progress are found on the variance stack, which never holds a type twice, since re-entering a measurement returns its guess. The result is the same whichever type is entered first only if each round is monotone in the guesses, so comparisons that use a guess stop at the type arguments rather than falling back to a structural comparison that a stricter guess could let succeed. Comparisons of marker types are keyed separately from other comparisons of the same generic type, so a measurement cannot read back its own guess. A discarded round must leave no trace. The effects of its results, including those linked to computations already in progress below the round, are discarded with them, and its instantiations do not count against the per-statement limit. A check cannot discard effects it applied, so it measures variances in a query and replays the effects once the measurement is done. This changes the variance baselines towards the structurally correct answer: Foo1 and Foo3 in varianceMeasurement and the types in circularVariance1 and 2 are now invariant (the new errors elaborate real structural failures), the spurious circularity reported in classVarianceResolveCircularity2 is gone, and the variance cycle tests report the same errors whichever type is declared or measured first. This is deliberately stricter than main on real code, and no check order in main produces the new errors. Main relates recursive references as "maybe", so code relying on that is now rejected: react-select's IndicatorProps is invariant in IsMulti through selectProps.components and getDerivedStateFromProps, which makes sentry's selectField.tsx an error, and vscode's argv.ts fails the same way through Subcommand and OptionDescriptions. The errors are what the types say, so they are kept rather than reproducing main's guesses. │ before.txt │ after.txt │ │ sec/op │ sec/op vs base │ Compiler 2.495 ± 2% 2.525 ± 1% ~ (p=0.155 n=10) │ before.txt │ after.txt │ │ peak-RSS-bytes │ peak-RSS-bytes vs base │ Compiler 359.1Mi ± 4% 360.1Mi ± 5% ~ (p=0.971 n=10) --- tsc/internal/checker/checker.go | 18 +- tsc/internal/checker/memo.go | 136 +++++++- tsc/internal/checker/relater.go | 325 +++++++++++------- .../compiler/circularVariance1.errors.txt | 68 +++- .../compiler/circularVariance2.errors.txt | 68 +++- ...lassVarianceResolveCircularity2.errors.txt | 24 -- .../classVarianceResolveCircularity2.types | 2 +- .../recursiveVarianceFixedPoint.errors.txt | 190 +++++++++- ...rianceCycleDiscardedDiagnostics.errors.txt | 6 +- .../varianceCycleDiscardedDiagnostics.types | 6 +- .../varianceCycleEntryOrder.errors.txt | 106 ++++-- ...varianceCycleStructuralFallback.errors.txt | 130 +++++-- .../varianceDeclarationOrder.errors.txt | 31 -- ...rianceMeasuredWithinCircularity.errors.txt | 34 +- .../compiler/varianceMeasurement.errors.txt | 36 +- 15 files changed, 898 insertions(+), 282 deletions(-) delete mode 100644 tsc/testdata/baselines/reference/compiler/classVarianceResolveCircularity2.errors.txt delete mode 100644 tsc/testdata/baselines/reference/compiler/varianceDeclarationOrder.errors.txt diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index f20538b6bcc00..e4dee23a6e75b 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -563,7 +563,9 @@ type WideningContext struct { type VarianceStackEntry struct { symbol *ast.Symbol typeParameters []*Type - resolution int // Index in Checker.resolutions of the resolution of the measurement + resolution int // Index in Checker.resolutions of the resolution of the measurement + cycleStart int // Lowest index of an entry whose guessed variances this measurement used, or MaxInt + guessChanged bool // Whether a measurement in the circularity found stricter variances than guessed } type ResolvingObjectType struct { @@ -674,8 +676,11 @@ type Checker struct { discardLog []discardEntry // Restores what was cached while anything may be discarded; see "Discard log" in memo.go circularityMark int // Length of discard log when the cycle in progress was detected cycleParticipants []TypeResolution // Computations that observed a cycle in progress + effectsMarkDepth int // 1 + resolution index of the innermost effects mark that may be discarded, or 0 varianceStack []VarianceStackEntry - varianceMeasuring map[*ast.Symbol]int // Symbols whose variances are being measured, including by suspended computations + varianceGuesses map[*ast.Symbol][]VarianceFlags // Variances assumed for measurements in progress; see getVariancesWorker + varianceGuessed []*ast.Symbol // Keys of varianceGuesses in order of addition + flushStates *[]*memoState // Collects memo states given effects to replay, if non-nil; see withoutChecking callResolutionStack []*ast.Node resolvingExplicitTypeOfSymbol collections.Set[*ast.Symbol] resolvingAssertionOperands collections.Set[*ast.Node] @@ -18831,7 +18836,14 @@ func (c *Checker) getRelationKey(source *Type, target *Type, intersectionState I var b keyBuilder var constrained bool if c.isTypeReferenceWithGenericArguments(source) && c.isTypeReferenceWithGenericArguments(target) { - b.writeByte('g') + // Marker types are compared structurally while their variances are being + // measured, and other instantiations with the same key by those variances, + // which may be guesses until the measurement finishes. + if c.isMarkerType(source) || c.isMarkerType(target) { + b.writeByte('m') + } else { + b.writeByte('g') + } constrained = b.writeGenericTypeReferences(c, source, target, ignoreConstraints) } else { b.writeByte('s') diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index d3e80718663a7..0e19c1e8358e4 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -632,6 +632,9 @@ func (c *Checker) attachState(state *memoState) { if state.pending == nil { state.pending = &memoEffects{} c.memoPendingCount++ + if c.flushStates != nil { + *c.flushStates = append(*c.flushStates, state) + } } state.pending.addDep(f) } @@ -782,7 +785,7 @@ func (c *Checker) endMemoUncached() { if res == nil || res.effects == nil { return } - f := res.effects + state, f := res.result, res.effects if parent := c.currentMemoEffects(); parent != nil { if len(f.effects) == 0 && f.entry == parent.entry { // Without effects of its own, and located like the enclosing @@ -793,6 +796,9 @@ func (c *Checker) endMemoUncached() { } else { parent.addDep(f) } + } else if c.flushStates != nil { + // withoutChecking replays effects through the results computed. + c.retainEffects(state, f) } } @@ -810,13 +816,16 @@ func (c *Checker) retainEffects(state *memoState, f *memoEffects) { } return } - if c.logResults() { + if c.logEffects() { c.logPendingDiscard(state) } if state.pending != nil { f.addDep(state.pending) } else { c.memoPendingCount++ + if c.flushStates != nil { + *c.flushStates = append(*c.flushStates, state) + } } state.pending = f if parent := c.currentMemoEffects(); parent != nil { @@ -925,6 +934,34 @@ func (c *Checker) withReferenceMarks(fn func()) { } } +// withoutChecking runs fn in a query from a check, then replays the effects +// of everything fn computed, as if fn had run in the check. Unlike effects +// applied directly, recorded effects can be discarded with the results they +// belong to. +func (c *Checker) withoutChecking(fn func()) { + debug.Assert(c.checking && c.flushStates == nil, "withoutChecking outside a check") + saveMemoTop := c.memoTop + var states []*memoState + c.checking = false + c.memoTop = 0 + c.flushStates = &states + fn() + c.flushStates = nil + c.checking = true + c.memoTop = saveMemoTop + // Replaying is in order of computation, so effects apply in the order + // they would have in the check. They also happened at the current node, + // so only the effects of computations started there are located at it. + for _, state := range states { + if state.pending != nil { + f := state.pending + state.pending = nil + c.memoPendingCount-- + c.replayEffects(f, c.currentNode, true) + } + } +} + // withChecking runs fn in a check. func (c *Checker) withChecking(fn func()) { // Checking starts only from top-level requests, so any resolution left at @@ -951,10 +988,30 @@ func (c *Checker) memoCycle(depth int) { if !c.resolutions[i].memo { continue } - c.memoEffectsAt(i).addDep(outer) + f := c.memoEffectsAt(i) + if i < c.effectsMarkDepth-1 && f != outer && outer.parent != f { + // The resolution is in progress below the mark, so discarding to + // the mark must also discard this dependency. + c.logDepsDiscard(f) + } + f.addDep(outer) } } +// logDepsDiscard logs the dependencies of a computation in progress below the +// innermost effects mark, which are about to grow, so discardSince can +// restore them. +// +//go:noinline +func (c *Checker) logDepsDiscard(f *memoEffects) { + n := len(f.deps) + c.discardLog = append(c.discardLog, discardEntry{effects: true, restore: func() { + if len(f.deps) > n { + f.truncateDeps(n) + } + }}) +} + func (c *Checker) memoEffectsAt(i int) *memoEffects { f := c.resolutions[i].effects if f == nil { @@ -981,9 +1038,10 @@ func (c *Checker) memoEffectsAt(i int) *memoEffects { // Discard log // // Some computations run provisionally, and may have to be discarded as if -// they had never run: those in a cycle (see above). While any of them is in -// progress, what they cache is logged in the discard log, from which each -// discards to the position where it started. The discard log is +// they had never run: those in a cycle (see above), and those a computation +// that retries from a mark runs before retrying (see markDiscard). While any +// of them is in progress, what they cache is logged in the discard log, from +// which each discards to the position where it started. The discard log is // cleared once nothing in progress can discard. type discardEntry struct { @@ -998,6 +1056,12 @@ func (c *Checker) logResults() bool { return c.circularityStart != 0 } +// logEffects reports whether changing the effects of a result must be logged +// in the discard log. +func (c *Checker) logEffects() bool { + return c.circularityStart != 0 || c.effectsMarkDepth != 0 +} + // discardLogSince restores everything logged in the discard log since // position start. func (c *Checker) discardLogSince(start int) { @@ -1011,7 +1075,7 @@ func (c *Checker) discardLogSince(start int) { // trimDiscardLog clears the discard log if nothing in progress can discard. func (c *Checker) trimDiscardLog() { - if !c.logResults() && len(c.discardLog) != 0 { + if !c.logEffects() && len(c.discardLog) != 0 { clear(c.discardLog) c.discardLog = c.discardLog[:0] } @@ -1125,6 +1189,62 @@ func (c *Checker) extendCircularity(head int) { } } +// A discardMark is a position in the computation in progress to which it can +// discard, so that it can run again from the same state, as if what it +// computed since had never run. From markDiscard to releaseDiscardMark, the +// discard log logs all that may have to be discarded. +type discardMark struct { + discardLog int + participants int + circularityStart int + effectsMarkDepth int // Checker.effectsMarkDepth to restore on release + + // The effects recorded so far by the innermost computation in progress, + // which must have a memo resolution. + recording *memoEffects + effects int + deps int + resolutionIndex int +} + +func (c *Checker) markDiscard() discardMark { + n := c.memoTop - 1 + f := c.memoEffectsAt(n) + m := discardMark{ + discardLog: len(c.discardLog), + participants: len(c.cycleParticipants), + circularityStart: c.circularityStart, + effectsMarkDepth: c.effectsMarkDepth, + recording: f, + effects: len(f.effects), + deps: len(f.deps), + resolutionIndex: n, + } + c.effectsMarkDepth = n + 1 + return m +} + +// discardSince discards the results cached since m, with the effects of +// computing them, restoring the cycle in progress then, and discards the +// effects recorded by the computation in progress. +func (c *Checker) discardSince(m discardMark) { + c.discardLogSince(m.discardLog) + c.cycleParticipants = c.cycleParticipants[:min(m.participants, len(c.cycleParticipants))] + c.circularityStart = m.circularityStart + debug.Assert(c.memoTop-1 == m.resolutionIndex && c.resolutions[m.resolutionIndex].effects == m.recording, "effects discarded outside their computation") + f := m.recording + clear(f.effects[m.effects:]) + f.effects = f.effects[:m.effects] + f.truncateDeps(m.deps) +} + +// releaseDiscardMark ends the period during which the computation in progress +// can discard to m. +func (c *Checker) releaseDiscardMark(m discardMark) { + c.effectsMarkDepth = m.effectsMarkDepth + c.trimDiscardLog() +} + func (f *memoEffects) truncateDeps(n int) { for _, d := range f.deps[n:] { if d.parent == f { @@ -1136,7 +1256,7 @@ func (f *memoEffects) truncateDeps(n int) { } // logPendingDiscard logs the effects of the result in the memo state, which -// are about to change, so discarding the cycle can restore them. +// are about to change, so discardSince can restore them. // //go:noinline func (c *Checker) logPendingDiscard(state *memoState) { diff --git a/tsc/internal/checker/relater.go b/tsc/internal/checker/relater.go index 8fff0be29aee7..5ebafe8235dee 100644 --- a/tsc/internal/checker/relater.go +++ b/tsc/internal/checker/relater.go @@ -1,6 +1,7 @@ package checker import ( + "math" "math/bits" "slices" "strconv" @@ -1506,129 +1507,194 @@ func (c *Checker) getAliasVariances(symbol *ast.Symbol) []VarianceFlags { // Return an array containing the variance of each type parameter. The variance is effectively // a digest of the type comparisons that occur for each type argument when instantiations of the // generic type are structurally compared. We infer the variance information by comparing -// instantiations of the generic type for type arguments with known relations. The function -// returns an empty slice when invoked recursively for the given generic type. +// instantiations of the generic type for type arguments with known relations. +// +// Generic types whose variance measurements depend on each other are measured together as a +// fixpoint. A measurement that needs the variances of a type still being measured uses a guess +// for them, starting from the most permissive variances. When the outermost measurement of the +// circularity finishes, any measured type whose variances are stricter than its guess gets the +// stricter guess, and everything computed since the guesses were first used is discarded and +// measured again. Measurements only get stricter, so this ends, with the same variances for +// each type whichever type is measured first. func (c *Checker) getVariancesWorker(symbol *ast.Symbol, typeParameters []*Type) []VarianceFlags { links := c.varianceLinks.Get(symbol) - if links.variances.get(c) == nil { - var traceArgs map[string]any - if tr := c.tracer; tr != nil { - traceArgs = map[string]any{"arity": len(typeParameters), "id": c.getDeclaredTypeOfSymbol(symbol).id} - popFn := tr.Push(tracing.PhaseCheckTypes, "getVariancesWorker", traceArgs, true) - defer func() { - variances := links.variances.get(c) - formatted := make([]string, len(variances)) - for i, v := range variances { - formatted[i] = v.String() - } - traceArgs["variances"] = formatted - popFn() - }() - } - stackIndex := c.getVarianceStackIndex(symbol) - if stackIndex < 0 { - links.variances.begin(c) - saveResolutionStart := c.resolutionStart - if len(c.varianceStack) == 0 { - c.resolutionStart = len(c.resolutions) - } - c.varianceStack = append(c.varianceStack, VarianceStackEntry{symbol: symbol, typeParameters: typeParameters, resolution: len(c.resolutions)}) - c.beginTypeResolution(symbol, TypeSystemPropertyNameVariances) - if c.varianceMeasuring == nil { - c.varianceMeasuring = make(map[*ast.Symbol]int) - } - c.varianceMeasuring[symbol]++ - variances := make([]VarianceFlags, len(typeParameters)) - for i, tp := range typeParameters { - modifiers := c.getTypeParameterModifiers(tp) - var variance VarianceFlags - switch { - case modifiers&ast.ModifierFlagsOut != 0: - if modifiers&ast.ModifierFlagsIn != 0 { - variance = VarianceFlagsInvariant - } else { - variance = VarianceFlagsCovariant - } - case modifiers&ast.ModifierFlagsIn != 0: - variance = VarianceFlagsContravariant - default: - saveReliabilityFlags := c.reliabilityFlags - c.reliabilityFlags = 0 - // We first compare instantiations where the type parameter is replaced with - // marker types that have a known subtype relationship. From this we can infer - // invariance, covariance, contravariance or bivariance. - typeWithSuper := c.createMarkerType(symbol, tp, c.markerSuperType) - typeWithSub := c.createMarkerType(symbol, tp, c.markerSubType) - variance = core.IfElse(c.isTypeAssignableTo(typeWithSub, typeWithSuper), VarianceFlagsCovariant, 0) | - core.IfElse(c.isTypeAssignableTo(typeWithSuper, typeWithSub), VarianceFlagsContravariant, 0) - // If the instantiations appear to be related bivariantly it may be because the - // type parameter is independent (i.e. it isn't witnessed anywhere in the generic - // type). To determine this we compare instantiations where the type parameter is - // replaced with marker types that are known to be unrelated. - if variance == VarianceFlagsBivariant && c.isTypeAssignableTo(c.createMarkerType(symbol, tp, c.markerOtherType), typeWithSuper) { - variance = VarianceFlagsIndependent - } - if c.reliabilityFlags&RelationComparisonResultReportsUnmeasurable != 0 { - variance |= VarianceFlagsUnmeasurable - } - if c.reliabilityFlags&RelationComparisonResultReportsUnreliable != 0 { - variance |= VarianceFlagsUnreliable - } - c.reliabilityFlags = saveReliabilityFlags - } - // If variance computation was restarted due to a circularity we may have already - // computed variances for this generic type. If so, we exit early. - if len(links.variances.get(c)) != 0 { - break - } - variances[i] = variance - } - // Store the results unless a restarted computation has already stored them. - if len(links.variances.get(c)) == 0 { - links.variances.set(c, variances) - } - c.varianceStack = c.varianceStack[:len(c.varianceStack)-1] - c.popTypeResolution() - if c.varianceMeasuring[symbol]--; c.varianceMeasuring[symbol] == 0 { - delete(c.varianceMeasuring, symbol) - } - if len(c.varianceStack) == 0 { - c.resolutionStart = saveResolutionStart + if variances := links.variances.get(c); variances != nil { + return variances + } + if stackIndex := c.getVarianceStackIndex(symbol); stackIndex >= 0 { + return c.getVarianceGuess(stackIndex) + } + if c.checking { + // A circularity is measured again with stricter guesses after + // discarding what was computed from the earlier ones, including its + // effects, so measure while recording effects. + var variances []VarianceFlags + c.withoutChecking(func() { + variances = c.getVariancesWorker(symbol, typeParameters) + }) + return variances + } + var traceArgs map[string]any + if tr := c.tracer; tr != nil { + traceArgs = map[string]any{"arity": len(typeParameters), "id": c.getDeclaredTypeOfSymbol(symbol).id} + popFn := tr.Push(tracing.PhaseCheckTypes, "getVariancesWorker", traceArgs, true) + defer func() { + variances := links.variances.get(c) + formatted := make([]string, len(variances)) + for i, v := range variances { + formatted[i] = v.String() + } + traceArgs["variances"] = formatted + popFn() + }() + } + links.variances.begin(c) + saveResolutionStart := c.resolutionStart + if len(c.varianceStack) == 0 { + c.resolutionStart = len(c.resolutions) + } + index := len(c.varianceStack) + c.varianceStack = append(c.varianceStack, VarianceStackEntry{symbol: symbol, typeParameters: typeParameters, resolution: len(c.resolutions), cycleStart: math.MaxInt}) + c.beginTypeResolution(symbol, TypeSystemPropertyNameVariances) + guessesStart := len(c.varianceGuessed) + mark := c.markDiscard() + instantiationCount := c.instantiationCount + var variances []VarianceFlags + for { + variances = c.measureVariances(symbol, typeParameters) + entry := &c.varianceStack[index] + guess := c.varianceGuesses[symbol] + if guess != nil { + variances = meetVariances(guess, variances) + } + if entry.cycleStart < index { + // Part of a circularity whose outermost measurement is still in progress. + if guess != nil && !slices.Equal(guess, variances) { + c.varianceGuesses[symbol] = variances + entry.guessChanged = true + } + parent := &c.varianceStack[index-1] + parent.cycleStart = min(parent.cycleStart, entry.cycleStart) + parent.guessChanged = parent.guessChanged || entry.guessChanged + break + } + if guess == nil || !entry.guessChanged && slices.Equal(guess, variances) { + break + } + c.varianceGuesses[symbol] = variances + entry.cycleStart = math.MaxInt + entry.guessChanged = false + c.discardSince(mark) + // The work of a discarded round does not count toward the limit on + // instantiations, so whether the limit is reached does not depend on + // how many rounds the circularity took to settle. + c.instantiationCount = instantiationCount + } + if c.varianceStack[index].cycleStart >= index { + for _, s := range c.varianceGuessed[guessesStart:] { + delete(c.varianceGuesses, s) + } + c.varianceGuessed = c.varianceGuessed[:guessesStart] + } + c.releaseDiscardMark(mark) + links.variances.set(c, variances) + c.varianceStack = c.varianceStack[:index] + c.popTypeResolution() + if index == 0 { + c.resolutionStart = saveResolutionStart + } + c.endMemo() + return variances +} + +// getVarianceGuess returns the variances to assume for the generic type at the given index of +// the variance stack, whose measurement is in progress. Everything measured since then is part +// of a circularity with it, and results computed from now on depend on the guess. +func (c *Checker) getVarianceGuess(stackIndex int) []VarianceFlags { + entry := &c.varianceStack[stackIndex] + top := &c.varianceStack[len(c.varianceStack)-1] + top.cycleStart = min(top.cycleStart, stackIndex) + for i := stackIndex; i < len(c.varianceStack); i++ { + c.cycleParticipants = append(c.cycleParticipants, c.resolutions[c.varianceStack[i].resolution].typeResolution) + } + c.markTypeResolutionCircular(entry.resolution) + guess := c.varianceGuesses[entry.symbol] + if guess == nil { + guess = make([]VarianceFlags, len(entry.typeParameters)) + for i := range guess { + guess[i] = VarianceFlagsIndependent + } + if c.varianceGuesses == nil { + c.varianceGuesses = make(map[*ast.Symbol][]VarianceFlags) + } + c.varianceGuesses[entry.symbol] = guess + c.varianceGuessed = append(c.varianceGuessed, entry.symbol) + } + return guess +} + +// meetVariances returns, for each type parameter, the most permissive variance that is no more +// permissive than either of the given variances. +func meetVariances(a []VarianceFlags, b []VarianceFlags) []VarianceFlags { + result := make([]VarianceFlags, len(a)) + for i := range a { + x, y := a[i]&VarianceFlagsVarianceMask, b[i]&VarianceFlagsVarianceMask + var v VarianceFlags + switch { + case x == VarianceFlagsIndependent: + v = y + case y == VarianceFlagsIndependent: + v = x + default: + v = x & y + } + result[i] = v | (a[i]|b[i])&VarianceFlagsAllowsStructuralFallback + } + return result +} + +func (c *Checker) measureVariances(symbol *ast.Symbol, typeParameters []*Type) []VarianceFlags { + variances := make([]VarianceFlags, len(typeParameters)) + for i, tp := range typeParameters { + modifiers := c.getTypeParameterModifiers(tp) + var variance VarianceFlags + switch { + case modifiers&ast.ModifierFlagsOut != 0: + if modifiers&ast.ModifierFlagsIn != 0 { + variance = VarianceFlagsInvariant + } else { + variance = VarianceFlagsCovariant } - c.endMemo() - } else { - // We've detected a circularity. Since we may compute different variances depending on where - // we enter a circularity, we find the generic type with the "smallest" symbol in the circular - // region of the variance stack and restart the computation from there if necessary. This - // ensures stable results for circular generic types. - // Results computed since the circularity was entered observed incomplete - // variances, so they are discarded once the outermost variance computation - // of the circularity finishes. The variances themselves are kept, since the - // restart below computes them the same way from any entry point. - for i := stackIndex; i < len(c.varianceStack); i++ { - c.cycleParticipants = append(c.cycleParticipants, c.resolutions[c.varianceStack[i].resolution].typeResolution) - } - c.markTypeResolutionCircular(c.varianceStack[stackIndex].resolution) - minIndex := stackIndex - for i := stackIndex + 1; i < len(c.varianceStack); i++ { - if c.compareSymbols(c.varianceStack[i].symbol, c.varianceStack[minIndex].symbol) < 0 { - minIndex = i - } + case modifiers&ast.ModifierFlagsIn != 0: + variance = VarianceFlagsContravariant + default: + saveReliabilityFlags := c.reliabilityFlags + c.reliabilityFlags = 0 + // We first compare instantiations where the type parameter is replaced with + // marker types that have a known subtype relationship. From this we can infer + // invariance, covariance, contravariance or bivariance. + typeWithSuper := c.createMarkerType(symbol, tp, c.markerSuperType) + typeWithSub := c.createMarkerType(symbol, tp, c.markerSubType) + variance = core.IfElse(c.isTypeAssignableTo(typeWithSub, typeWithSuper), VarianceFlagsCovariant, 0) | + core.IfElse(c.isTypeAssignableTo(typeWithSuper, typeWithSub), VarianceFlagsContravariant, 0) + // If the instantiations appear to be related bivariantly it may be because the + // type parameter is independent (i.e. it isn't witnessed anywhere in the generic + // type). To determine this we compare instantiations where the type parameter is + // replaced with marker types that are known to be unrelated. + if variance == VarianceFlagsBivariant && c.isTypeAssignableTo(c.createMarkerType(symbol, tp, c.markerOtherType), typeWithSuper) { + variance = VarianceFlagsIndependent } - if minIndex > stackIndex { - saveVarianceStack := c.varianceStack - c.varianceStack = nil - c.getVariancesWorker(saveVarianceStack[minIndex].symbol, saveVarianceStack[minIndex].typeParameters) - c.varianceStack = saveVarianceStack + if c.reliabilityFlags&RelationComparisonResultReportsUnmeasurable != 0 { + variance |= VarianceFlagsUnmeasurable } - // Store an empty slice to mark that we can't compute variances for this type. We treat type - // parameters as co-variant in this case. - if len(links.variances.get(c)) == 0 { - links.variances.set(c, []VarianceFlags{}) + if c.reliabilityFlags&RelationComparisonResultReportsUnreliable != 0 { + variance |= VarianceFlagsUnreliable } + c.reliabilityFlags = saveReliabilityFlags } + variances[i] = variance } - return links.variances.get(c) + return variances } func (c *Checker) getVarianceStackIndex(symbol *ast.Symbol) int { @@ -1656,14 +1722,13 @@ func (c *Checker) createMarkerType(symbol *ast.Symbol, source *Type, target *Typ } // isMarkerType reports whether t is a marker type of a variance computation -// or variance annotation check in progress (including computations suspended -// by a restart from a circularity): an instantiation of the generic +// or variance annotation check in progress: an instantiation of the generic // type or type alias being measured with one of its type parameters replaced // by a variance marker. Instantiations of other types with markers, such as // those nested in the type being measured, are not marker types, whether or // not their own variances have been measured before. func (c *Checker) isMarkerType(t *Type) bool { - if len(c.varianceMeasuring) == 0 && c.varianceTypeParameter == nil { + if len(c.varianceStack) == 0 && c.varianceTypeParameter == nil { return false } if t.alias != nil && t.alias.symbol.Flags()&ast.SymbolFlagsTypeAlias != 0 && @@ -1700,7 +1765,7 @@ func (c *Checker) isMarkerInstantiation(symbol *ast.Symbol, typeParameters []*Ty case c.markerSuperTypeForCheck, c.markerSubTypeForCheck: return typeParameters[replaced] == c.varianceTypeParameter default: - return c.varianceMeasuring[symbol] != 0 + return c.getVarianceStackIndex(symbol) >= 0 } } @@ -3696,10 +3761,23 @@ func (r *Relater) structuredTypeRelatedToWorker(source *Type, target *Type, repo var varianceCheckFailed bool var originalErrorChain *ErrorChain saveErrorState := r.getErrorState() - relateVariances := func(sourceTypeArguments []*Type, targetTypeArguments []*Type, variances []VarianceFlags, intersectionState IntersectionState) (Ternary, bool) { + relateVariances := func(sourceTypeArguments []*Type, targetTypeArguments []*Type, variances []VarianceFlags, guessed bool, intersectionState IntersectionState) (Ternary, bool) { if result = r.typeArgumentsRelatedTo(sourceTypeArguments, targetTypeArguments, variances, reportErrors, intersectionState); result != TernaryFalse { return result, true } + if guessed { + // The variances are a guess for a generic type whose variances are being + // measured (see getVariancesWorker). There is no structural fallback for + // them, so that a stricter guess never makes a comparison succeed, and the + // measurement depends on the guess monotonically. The measurement still + // learns that it observed unreliable or unmeasurable variances. + for i, v := range variances { + if v&VarianceFlagsUnmeasurable != 0 && i < len(sourceTypeArguments) { + r.c.instantiateType(sourceTypeArguments[i], r.c.reportUnmeasurableMapper) + } + } + return TernaryFalse, true + } if core.Some(variances, func(v VarianceFlags) bool { return v&VarianceFlagsAllowsStructuralFallback != 0 }) { // If some type parameter was `Unmeasurable` or `Unreliable`, and we couldn't pass by assuming it was identical, then we // have to allow a structural fallback check @@ -3833,7 +3911,7 @@ func (r *Relater) structuredTypeRelatedToWorker(source *Type, target *Type, repo nodeIsInJsFile := ast.IsInJSFile(source.alias.symbol.ValueDeclaration()) sourceTypes := r.c.fillMissingTypeArguments(source.alias.typeArguments, params, minParams, nodeIsInJsFile) targetTypes := r.c.fillMissingTypeArguments(target.alias.typeArguments, params, minParams, nodeIsInJsFile) - varianceResult, ok := relateVariances(sourceTypes, targetTypes, variances, intersectionState) + varianceResult, ok := relateVariances(sourceTypes, targetTypes, variances, r.c.getVarianceStackIndex(source.alias.symbol) >= 0, intersectionState) if ok { return varianceResult } @@ -4263,13 +4341,10 @@ func (r *Relater) structuredTypeRelatedToWorker(source *Type, target *Type, repo // type references (which are intended by be compared structurally). Obtain the variance // information for the type parameters and relate the type arguments accordingly. variances := r.c.getVariances(source.Target()) - // We return Ternary.Maybe for a recursive invocation of getVariances (signaled by emptyArray). This - // effectively means we measure variance only from type parameter occurrences that aren't nested in - // recursive instantiations of the generic type. if len(variances) == 0 { return TernaryUnknown } - varianceResult, ok := relateVariances(r.c.getTypeArguments(source), r.c.getTypeArguments(target), variances, intersectionState) + varianceResult, ok := relateVariances(r.c.getTypeArguments(source), r.c.getTypeArguments(target), variances, r.c.getVarianceStackIndex(source.Target().symbol) >= 0, intersectionState) if ok { return varianceResult } diff --git a/tsc/testdata/baselines/reference/compiler/circularVariance1.errors.txt b/tsc/testdata/baselines/reference/compiler/circularVariance1.errors.txt index e36e5bfcda1d1..f5b8506839819 100644 --- a/tsc/testdata/baselines/reference/compiler/circularVariance1.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/circularVariance1.errors.txt @@ -1,10 +1,38 @@ +circularVariance1.ts(17,1): error TS2322: Type 'Foo' is not assignable to type 'Foo'. + Types of property 'f' are incompatible. + Type 'Bar' is not assignable to type 'Bar'. + Types of parameters 'x' and 'x' are incompatible. + Type 'Baz' is not assignable to type 'Baz'. + The types of 'value.x' are incompatible between these types. + Type 'unknown[][]' is not assignable to type 'string[][]'. + Type 'unknown[]' is not assignable to type 'string[]'. + Type 'unknown' is not assignable to type 'string'. circularVariance1.ts(18,1): error TS2322: Type 'Foo' is not assignable to type 'Foo'. - Type 'unknown' is not assignable to type 'string'. + Types of property 'x' are incompatible. + Type 'unknown' is not assignable to type 'string'. circularVariance1.ts(23,1): error TS2322: Type 'Bar' is not assignable to type 'Bar'. - Type 'unknown' is not assignable to type 'string'. + Types of parameters 'x' and 'x' are incompatible. + Type 'Baz' is not assignable to type 'Baz'. + The types of 'value.x' are incompatible between these types. + Type 'unknown[][]' is not assignable to type 'string[][]'. + Type 'unknown[]' is not assignable to type 'string[]'. + Type 'unknown' is not assignable to type 'string'. +circularVariance1.ts(24,1): error TS2322: Type 'Bar' is not assignable to type 'Bar'. + Types of parameters 'x' and 'x' are incompatible. + Type 'Baz' is not assignable to type 'Baz'. + The types of 'value.f' are incompatible between these types. + Type 'Bar' is not assignable to type 'Bar'. + Types of parameters 'x' and 'x' are incompatible. + Type 'Baz' is not assignable to type 'Baz'. + The types of 'value.x' are incompatible between these types. + Type 'unknown[][][][]' is not assignable to type 'string[][][][]'. + Type 'unknown[][][]' is not assignable to type 'string[][][]'. + Type 'unknown[][]' is not assignable to type 'string[][]'. + Type 'unknown[]' is not assignable to type 'string[]'. + Type 'unknown' is not assignable to type 'string'. -==== circularVariance1.ts (2 errors) ==== +==== circularVariance1.ts (4 errors) ==== // https://github.com/microsoft/TypeScript/tsc/pull/4820 type Bar = (x: Baz) => void; @@ -22,10 +50,21 @@ circularVariance1.ts(23,1): error TS2322: Type 'Bar' is not assignable t declare let foo2: Foo; foo1 = foo2; + ~~~~ +!!! error TS2322: Type 'Foo' is not assignable to type 'Foo'. +!!! error TS2322: Types of property 'f' are incompatible. +!!! error TS2322: Type 'Bar' is not assignable to type 'Bar'. +!!! error TS2322: Types of parameters 'x' and 'x' are incompatible. +!!! error TS2322: Type 'Baz' is not assignable to type 'Baz'. +!!! error TS2322: The types of 'value.x' are incompatible between these types. +!!! error TS2322: Type 'unknown[][]' is not assignable to type 'string[][]'. +!!! error TS2322: Type 'unknown[]' is not assignable to type 'string[]'. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. foo2 = foo1; // Error ~~~~ !!! error TS2322: Type 'Foo' is not assignable to type 'Foo'. -!!! error TS2322: Type 'unknown' is not assignable to type 'string'. +!!! error TS2322: Types of property 'x' are incompatible. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. declare let bar1: Bar; declare let bar2: Bar; @@ -33,6 +72,25 @@ circularVariance1.ts(23,1): error TS2322: Type 'Bar' is not assignable t bar1 = bar2; // Error ~~~~ !!! error TS2322: Type 'Bar' is not assignable to type 'Bar'. -!!! error TS2322: Type 'unknown' is not assignable to type 'string'. +!!! error TS2322: Types of parameters 'x' and 'x' are incompatible. +!!! error TS2322: Type 'Baz' is not assignable to type 'Baz'. +!!! error TS2322: The types of 'value.x' are incompatible between these types. +!!! error TS2322: Type 'unknown[][]' is not assignable to type 'string[][]'. +!!! error TS2322: Type 'unknown[]' is not assignable to type 'string[]'. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. bar2 = bar1; + ~~~~ +!!! error TS2322: Type 'Bar' is not assignable to type 'Bar'. +!!! error TS2322: Types of parameters 'x' and 'x' are incompatible. +!!! error TS2322: Type 'Baz' is not assignable to type 'Baz'. +!!! error TS2322: The types of 'value.f' are incompatible between these types. +!!! error TS2322: Type 'Bar' is not assignable to type 'Bar'. +!!! error TS2322: Types of parameters 'x' and 'x' are incompatible. +!!! error TS2322: Type 'Baz' is not assignable to type 'Baz'. +!!! error TS2322: The types of 'value.x' are incompatible between these types. +!!! error TS2322: Type 'unknown[][][][]' is not assignable to type 'string[][][][]'. +!!! error TS2322: Type 'unknown[][][]' is not assignable to type 'string[][][]'. +!!! error TS2322: Type 'unknown[][]' is not assignable to type 'string[][]'. +!!! error TS2322: Type 'unknown[]' is not assignable to type 'string[]'. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/circularVariance2.errors.txt b/tsc/testdata/baselines/reference/compiler/circularVariance2.errors.txt index 3f3c2fa71be32..6c91469b82cc0 100644 --- a/tsc/testdata/baselines/reference/compiler/circularVariance2.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/circularVariance2.errors.txt @@ -1,10 +1,38 @@ circularVariance2.ts(17,1): error TS2322: Type 'Bar' is not assignable to type 'Bar'. - Type 'unknown' is not assignable to type 'string'. + Types of parameters 'x' and 'x' are incompatible. + Type 'Baz' is not assignable to type 'Baz'. + The types of 'value.x' are incompatible between these types. + Type 'unknown[][]' is not assignable to type 'string[][]'. + Type 'unknown[]' is not assignable to type 'string[]'. + Type 'unknown' is not assignable to type 'string'. +circularVariance2.ts(18,1): error TS2322: Type 'Bar' is not assignable to type 'Bar'. + Types of parameters 'x' and 'x' are incompatible. + Type 'Baz' is not assignable to type 'Baz'. + The types of 'value.f' are incompatible between these types. + Type 'Bar' is not assignable to type 'Bar'. + Types of parameters 'x' and 'x' are incompatible. + Type 'Baz' is not assignable to type 'Baz'. + The types of 'value.x' are incompatible between these types. + Type 'unknown[][][][]' is not assignable to type 'string[][][][]'. + Type 'unknown[][][]' is not assignable to type 'string[][][]'. + Type 'unknown[][]' is not assignable to type 'string[][]'. + Type 'unknown[]' is not assignable to type 'string[]'. + Type 'unknown' is not assignable to type 'string'. +circularVariance2.ts(23,1): error TS2322: Type 'Foo' is not assignable to type 'Foo'. + Types of property 'f' are incompatible. + Type 'Bar' is not assignable to type 'Bar'. + Types of parameters 'x' and 'x' are incompatible. + Type 'Baz' is not assignable to type 'Baz'. + The types of 'value.x' are incompatible between these types. + Type 'unknown[][]' is not assignable to type 'string[][]'. + Type 'unknown[]' is not assignable to type 'string[]'. + Type 'unknown' is not assignable to type 'string'. circularVariance2.ts(24,1): error TS2322: Type 'Foo' is not assignable to type 'Foo'. - Type 'unknown' is not assignable to type 'string'. + Types of property 'x' are incompatible. + Type 'unknown' is not assignable to type 'string'. -==== circularVariance2.ts (2 errors) ==== +==== circularVariance2.ts (4 errors) ==== // https://github.com/microsoft/TypeScript/tsc/pull/4820 type Bar = (x: Baz) => void; @@ -24,15 +52,45 @@ circularVariance2.ts(24,1): error TS2322: Type 'Foo' is not assignable bar1 = bar2; // Error ~~~~ !!! error TS2322: Type 'Bar' is not assignable to type 'Bar'. -!!! error TS2322: Type 'unknown' is not assignable to type 'string'. +!!! error TS2322: Types of parameters 'x' and 'x' are incompatible. +!!! error TS2322: Type 'Baz' is not assignable to type 'Baz'. +!!! error TS2322: The types of 'value.x' are incompatible between these types. +!!! error TS2322: Type 'unknown[][]' is not assignable to type 'string[][]'. +!!! error TS2322: Type 'unknown[]' is not assignable to type 'string[]'. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. bar2 = bar1; + ~~~~ +!!! error TS2322: Type 'Bar' is not assignable to type 'Bar'. +!!! error TS2322: Types of parameters 'x' and 'x' are incompatible. +!!! error TS2322: Type 'Baz' is not assignable to type 'Baz'. +!!! error TS2322: The types of 'value.f' are incompatible between these types. +!!! error TS2322: Type 'Bar' is not assignable to type 'Bar'. +!!! error TS2322: Types of parameters 'x' and 'x' are incompatible. +!!! error TS2322: Type 'Baz' is not assignable to type 'Baz'. +!!! error TS2322: The types of 'value.x' are incompatible between these types. +!!! error TS2322: Type 'unknown[][][][]' is not assignable to type 'string[][][][]'. +!!! error TS2322: Type 'unknown[][][]' is not assignable to type 'string[][][]'. +!!! error TS2322: Type 'unknown[][]' is not assignable to type 'string[][]'. +!!! error TS2322: Type 'unknown[]' is not assignable to type 'string[]'. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. declare let foo1: Foo; declare let foo2: Foo; foo1 = foo2; + ~~~~ +!!! error TS2322: Type 'Foo' is not assignable to type 'Foo'. +!!! error TS2322: Types of property 'f' are incompatible. +!!! error TS2322: Type 'Bar' is not assignable to type 'Bar'. +!!! error TS2322: Types of parameters 'x' and 'x' are incompatible. +!!! error TS2322: Type 'Baz' is not assignable to type 'Baz'. +!!! error TS2322: The types of 'value.x' are incompatible between these types. +!!! error TS2322: Type 'unknown[][]' is not assignable to type 'string[][]'. +!!! error TS2322: Type 'unknown[]' is not assignable to type 'string[]'. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. foo2 = foo1; // Error ~~~~ !!! error TS2322: Type 'Foo' is not assignable to type 'Foo'. -!!! error TS2322: Type 'unknown' is not assignable to type 'string'. +!!! error TS2322: Types of property 'x' are incompatible. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/classVarianceResolveCircularity2.errors.txt b/tsc/testdata/baselines/reference/compiler/classVarianceResolveCircularity2.errors.txt deleted file mode 100644 index 502975549c191..0000000000000 --- a/tsc/testdata/baselines/reference/compiler/classVarianceResolveCircularity2.errors.txt +++ /dev/null @@ -1,24 +0,0 @@ -classVarianceResolveCircularity2.ts(7,5): error TS7022: 'Value' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. - - -==== classVarianceResolveCircularity2.ts (1 errors) ==== - // Issue #52813 - - export {}; - - class Bar { - num!: number; - Value = callme(new Foo(this)).bar.num; - ~~~~~ -!!! error TS7022: 'Value' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. - Field: number = callme(new Foo(this)).bar.num; - } - declare function callme(x: Foo): Foo; - declare function callme(x: object): string; - - class Foo { - bar!: Bar; - constructor(bar: Bar) { - this.bar = bar; - } - } \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/classVarianceResolveCircularity2.types b/tsc/testdata/baselines/reference/compiler/classVarianceResolveCircularity2.types index d1bd8c01269ff..1aa4a1481a92c 100644 --- a/tsc/testdata/baselines/reference/compiler/classVarianceResolveCircularity2.types +++ b/tsc/testdata/baselines/reference/compiler/classVarianceResolveCircularity2.types @@ -12,7 +12,7 @@ class Bar { >num : number Value = callme(new Foo(this)).bar.num; ->Value : any +>Value : number >callme(new Foo(this)).bar.num : number >callme(new Foo(this)).bar : Bar >callme(new Foo(this)) : Foo diff --git a/tsc/testdata/baselines/reference/compiler/recursiveVarianceFixedPoint.errors.txt b/tsc/testdata/baselines/reference/compiler/recursiveVarianceFixedPoint.errors.txt index 1b54f45a5c6a5..b431656aef8e4 100644 --- a/tsc/testdata/baselines/reference/compiler/recursiveVarianceFixedPoint.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/recursiveVarianceFixedPoint.errors.txt @@ -12,9 +12,79 @@ annotations.ts(20,1): error TS2322: Type 'AnnotatedStore' is not assign Types of property 'value' are incompatible. Type 'unknown' is not assignable to type 'string'. columnDefFirst.ts(14,1): error TS2322: Type 'ColumnDef<{ name: string; }, string>' is not assignable to type 'ColumnDef<{ name: string; }, unknown>'. - Type 'unknown' is not assignable to type 'string'. + Types of property 'cell' are incompatible. + Type '((column: Column<{ name: string; }, string>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, unknown>) => void) | undefined'. + Type '(column: Column<{ name: string; }, string>) => void' is not assignable to type '(column: Column<{ name: string; }, unknown>) => void'. + Types of parameters 'column' and 'column' are incompatible. + Type 'Column<{ name: string; }, unknown>' is not assignable to type 'Column<{ name: string; }, string>'. + Types of property 'accessorFn' are incompatible. + Type '((row: { name: string; }) => unknown) | undefined' is not assignable to type '((row: { name: string; }) => string) | undefined'. + Type '(row: { name: string; }) => unknown' is not assignable to type '(row: { name: string; }) => string'. + Type 'unknown' is not assignable to type 'string'. +columnDefFirst.ts(15,1): error TS2322: Type 'ColumnDef<{ name: string; }, unknown>' is not assignable to type 'ColumnDef<{ name: string; }, string>'. + Types of property 'cell' are incompatible. + Type '((column: Column<{ name: string; }, unknown>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, string>) => void) | undefined'. + Type '(column: Column<{ name: string; }, unknown>) => void' is not assignable to type '(column: Column<{ name: string; }, string>) => void'. + Types of parameters 'column' and 'column' are incompatible. + Type 'Column<{ name: string; }, string>' is not assignable to type 'Column<{ name: string; }, unknown>'. + The types of 'columnDef.cell' are incompatible between these types. + Type '((column: Column<{ name: string; }, string>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, unknown>) => void) | undefined'. + Type '(column: Column<{ name: string; }, string>) => void' is not assignable to type '(column: Column<{ name: string; }, unknown>) => void'. + Types of parameters 'column' and 'column' are incompatible. + Type 'Column<{ name: string; }, unknown>' is not assignable to type 'Column<{ name: string; }, string>'. + Types of property 'accessorFn' are incompatible. + Type '((row: { name: string; }) => unknown) | undefined' is not assignable to type '((row: { name: string; }) => string) | undefined'. + Type '(row: { name: string; }) => unknown' is not assignable to type '(row: { name: string; }) => string'. + Type 'unknown' is not assignable to type 'string'. +columnFirst.ts(14,1): error TS2322: Type 'ColumnDef<{ name: string; }, string>' is not assignable to type 'ColumnDef<{ name: string; }, unknown>'. + Types of property 'cell' are incompatible. + Type '((column: Column<{ name: string; }, string>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, unknown>) => void) | undefined'. + Type '(column: Column<{ name: string; }, string>) => void' is not assignable to type '(column: Column<{ name: string; }, unknown>) => void'. + Types of parameters 'column' and 'column' are incompatible. + Type 'Column<{ name: string; }, unknown>' is not assignable to type 'Column<{ name: string; }, string>'. + The types of 'columnDef.cell' are incompatible between these types. + Type '((column: Column<{ name: string; }, unknown>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, string>) => void) | undefined'. + Type '(column: Column<{ name: string; }, unknown>) => void' is not assignable to type '(column: Column<{ name: string; }, string>) => void'. + Types of parameters 'column' and 'column' are incompatible. + Type 'Column<{ name: string; }, string>' is not assignable to type 'Column<{ name: string; }, unknown>'. + Type 'unknown' is not assignable to type 'string'. +columnFirst.ts(15,1): error TS2322: Type 'ColumnDef<{ name: string; }, unknown>' is not assignable to type 'ColumnDef<{ name: string; }, string>'. + Types of property 'cell' are incompatible. + Type '((column: Column<{ name: string; }, unknown>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, string>) => void) | undefined'. + Type '(column: Column<{ name: string; }, unknown>) => void' is not assignable to type '(column: Column<{ name: string; }, string>) => void'. + Types of parameters 'column' and 'column' are incompatible. + Type 'Column<{ name: string; }, string>' is not assignable to type 'Column<{ name: string; }, unknown>'. + The types of 'columnDef.cell' are incompatible between these types. + Type '((column: Column<{ name: string; }, string>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, unknown>) => void) | undefined'. + Type '(column: Column<{ name: string; }, string>) => void' is not assignable to type '(column: Column<{ name: string; }, unknown>) => void'. + Types of parameters 'column' and 'column' are incompatible. + Type 'Column<{ name: string; }, unknown>' is not assignable to type 'Column<{ name: string; }, string>'. + Types of property 'accessorFn' are incompatible. + Type '((row: { name: string; }) => unknown) | undefined' is not assignable to type '((row: { name: string; }) => string) | undefined'. + Type '(row: { name: string; }) => unknown' is not assignable to type '(row: { name: string; }) => string'. + Type 'unknown' is not assignable to type 'string'. listenerFirst.ts(14,1): error TS2322: Type 'Listener' is not assignable to type 'Listener'. - Type 'unknown' is not assignable to type 'string'. + Types of parameters 'batch' and 'batch' are incompatible. + Type 'Store' is not assignable to type 'Store'. + Types of property 'listener' are incompatible. + Type 'Listener' is not assignable to type 'Listener'. + Types of parameters 'batch' and 'batch' are incompatible. + Type 'Store' is not assignable to type 'Store'. + Type 'unknown[][]' is not assignable to type 'string[][]'. + Type 'unknown[]' is not assignable to type 'string[]'. + Type 'unknown' is not assignable to type 'string'. +listenerFirst.ts(15,1): error TS2322: Type 'Store' is not assignable to type 'Store'. + Types of property 'listener' are incompatible. + Type 'Listener' is not assignable to type 'Listener'. + Types of parameters 'batch' and 'batch' are incompatible. + Type 'Store' is not assignable to type 'Store'. + Types of property 'listener' are incompatible. + Type 'Listener' is not assignable to type 'Listener'. + Types of parameters 'batch' and 'batch' are incompatible. + Type 'Store' is not assignable to type 'Store'. + Type 'unknown[][]' is not assignable to type 'string[][]'. + Type 'unknown[]' is not assignable to type 'string[]'. + Type 'unknown' is not assignable to type 'string'. nestedComposition.ts(14,1): error TS2322: Type 'Outer' is not assignable to type 'Outer'. Types of property 'next' are incompatible. Type 'Inner>' is not assignable to type 'Inner>'. @@ -26,11 +96,25 @@ nestedComposition.ts(15,1): error TS2322: Type 'Outer' is not assignabl Type 'unknown' is not assignable to type 'string'. positiveRecursion.ts(18,1): error TS2322: Type 'Tree' is not assignable to type 'Tree'. Type 'unknown' is not assignable to type 'string'. +storeFirst.ts(14,1): error TS2322: Type 'Store' is not assignable to type 'Store'. + Types of property 'listener' are incompatible. + Type 'Listener' is not assignable to type 'Listener'. + Types of parameters 'batch' and 'batch' are incompatible. + Type 'Store' is not assignable to type 'Store'. + Types of property 'value' are incompatible. + Type 'unknown[]' is not assignable to type 'string[]'. + Type 'unknown' is not assignable to type 'string'. +storeFirst.ts(15,1): error TS2322: Type 'Listener' is not assignable to type 'Listener'. + Types of parameters 'batch' and 'batch' are incompatible. + Type 'Store' is not assignable to type 'Store'. + Types of property 'value' are incompatible. + Type 'unknown[]' is not assignable to type 'string[]'. + Type 'unknown' is not assignable to type 'string'. structuralMeasurement.ts(23,1): error TS2322: Type 'GenericMethod' is not assignable to type 'GenericMethod'. Type 'unknown' is not assignable to type 'string'. -==== storeFirst.ts (0 errors) ==== +==== storeFirst.ts (2 errors) ==== export {}; interface Store { @@ -45,9 +129,25 @@ structuralMeasurement.ts(23,1): error TS2322: Type 'GenericMethod' is n declare let unknownListener: Listener; unknowns = strings; // Error + ~~~~~~~~ +!!! error TS2322: Type 'Store' is not assignable to type 'Store'. +!!! error TS2322: Types of property 'listener' are incompatible. +!!! error TS2322: Type 'Listener' is not assignable to type 'Listener'. +!!! error TS2322: Types of parameters 'batch' and 'batch' are incompatible. +!!! error TS2322: Type 'Store' is not assignable to type 'Store'. +!!! error TS2322: Types of property 'value' are incompatible. +!!! error TS2322: Type 'unknown[]' is not assignable to type 'string[]'. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. unknownListener = stringListener; // Error + ~~~~~~~~~~~~~~~ +!!! error TS2322: Type 'Listener' is not assignable to type 'Listener'. +!!! error TS2322: Types of parameters 'batch' and 'batch' are incompatible. +!!! error TS2322: Type 'Store' is not assignable to type 'Store'. +!!! error TS2322: Types of property 'value' are incompatible. +!!! error TS2322: Type 'unknown[]' is not assignable to type 'string[]'. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. -==== listenerFirst.ts (1 errors) ==== +==== listenerFirst.ts (2 errors) ==== export {}; type Listener = (batch: Store) => void; @@ -64,10 +164,31 @@ structuralMeasurement.ts(23,1): error TS2322: Type 'GenericMethod' is n unknownListener = stringListener; // Error ~~~~~~~~~~~~~~~ !!! error TS2322: Type 'Listener' is not assignable to type 'Listener'. -!!! error TS2322: Type 'unknown' is not assignable to type 'string'. +!!! error TS2322: Types of parameters 'batch' and 'batch' are incompatible. +!!! error TS2322: Type 'Store' is not assignable to type 'Store'. +!!! error TS2322: Types of property 'listener' are incompatible. +!!! error TS2322: Type 'Listener' is not assignable to type 'Listener'. +!!! error TS2322: Types of parameters 'batch' and 'batch' are incompatible. +!!! error TS2322: Type 'Store' is not assignable to type 'Store'. +!!! error TS2322: Type 'unknown[][]' is not assignable to type 'string[][]'. +!!! error TS2322: Type 'unknown[]' is not assignable to type 'string[]'. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. unknowns = strings; // Error + ~~~~~~~~ +!!! error TS2322: Type 'Store' is not assignable to type 'Store'. +!!! error TS2322: Types of property 'listener' are incompatible. +!!! error TS2322: Type 'Listener' is not assignable to type 'Listener'. +!!! error TS2322: Types of parameters 'batch' and 'batch' are incompatible. +!!! error TS2322: Type 'Store' is not assignable to type 'Store'. +!!! error TS2322: Types of property 'listener' are incompatible. +!!! error TS2322: Type 'Listener' is not assignable to type 'Listener'. +!!! error TS2322: Types of parameters 'batch' and 'batch' are incompatible. +!!! error TS2322: Type 'Store' is not assignable to type 'Store'. +!!! error TS2322: Type 'unknown[][]' is not assignable to type 'string[][]'. +!!! error TS2322: Type 'unknown[]' is not assignable to type 'string[]'. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. -==== columnDefFirst.ts (1 errors) ==== +==== columnDefFirst.ts (2 errors) ==== export {}; interface ColumnDef { @@ -84,10 +205,34 @@ structuralMeasurement.ts(23,1): error TS2322: Type 'GenericMethod' is n unknownColumn = stringColumn; // Error ~~~~~~~~~~~~~ !!! error TS2322: Type 'ColumnDef<{ name: string; }, string>' is not assignable to type 'ColumnDef<{ name: string; }, unknown>'. -!!! error TS2322: Type 'unknown' is not assignable to type 'string'. +!!! error TS2322: Types of property 'cell' are incompatible. +!!! error TS2322: Type '((column: Column<{ name: string; }, string>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, unknown>) => void) | undefined'. +!!! error TS2322: Type '(column: Column<{ name: string; }, string>) => void' is not assignable to type '(column: Column<{ name: string; }, unknown>) => void'. +!!! error TS2322: Types of parameters 'column' and 'column' are incompatible. +!!! error TS2322: Type 'Column<{ name: string; }, unknown>' is not assignable to type 'Column<{ name: string; }, string>'. +!!! error TS2322: Types of property 'accessorFn' are incompatible. +!!! error TS2322: Type '((row: { name: string; }) => unknown) | undefined' is not assignable to type '((row: { name: string; }) => string) | undefined'. +!!! error TS2322: Type '(row: { name: string; }) => unknown' is not assignable to type '(row: { name: string; }) => string'. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. stringColumn = unknownColumn; // Error + ~~~~~~~~~~~~ +!!! error TS2322: Type 'ColumnDef<{ name: string; }, unknown>' is not assignable to type 'ColumnDef<{ name: string; }, string>'. +!!! error TS2322: Types of property 'cell' are incompatible. +!!! error TS2322: Type '((column: Column<{ name: string; }, unknown>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, string>) => void) | undefined'. +!!! error TS2322: Type '(column: Column<{ name: string; }, unknown>) => void' is not assignable to type '(column: Column<{ name: string; }, string>) => void'. +!!! error TS2322: Types of parameters 'column' and 'column' are incompatible. +!!! error TS2322: Type 'Column<{ name: string; }, string>' is not assignable to type 'Column<{ name: string; }, unknown>'. +!!! error TS2322: The types of 'columnDef.cell' are incompatible between these types. +!!! error TS2322: Type '((column: Column<{ name: string; }, string>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, unknown>) => void) | undefined'. +!!! error TS2322: Type '(column: Column<{ name: string; }, string>) => void' is not assignable to type '(column: Column<{ name: string; }, unknown>) => void'. +!!! error TS2322: Types of parameters 'column' and 'column' are incompatible. +!!! error TS2322: Type 'Column<{ name: string; }, unknown>' is not assignable to type 'Column<{ name: string; }, string>'. +!!! error TS2322: Types of property 'accessorFn' are incompatible. +!!! error TS2322: Type '((row: { name: string; }) => unknown) | undefined' is not assignable to type '((row: { name: string; }) => string) | undefined'. +!!! error TS2322: Type '(row: { name: string; }) => unknown' is not assignable to type '(row: { name: string; }) => string'. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. -==== columnFirst.ts (0 errors) ==== +==== columnFirst.ts (2 errors) ==== export {}; interface Column { @@ -102,7 +247,36 @@ structuralMeasurement.ts(23,1): error TS2322: Type 'GenericMethod' is n declare let unknownColumn: ColumnDef<{ name: string }, unknown>; unknownColumn = stringColumn; // Error + ~~~~~~~~~~~~~ +!!! error TS2322: Type 'ColumnDef<{ name: string; }, string>' is not assignable to type 'ColumnDef<{ name: string; }, unknown>'. +!!! error TS2322: Types of property 'cell' are incompatible. +!!! error TS2322: Type '((column: Column<{ name: string; }, string>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, unknown>) => void) | undefined'. +!!! error TS2322: Type '(column: Column<{ name: string; }, string>) => void' is not assignable to type '(column: Column<{ name: string; }, unknown>) => void'. +!!! error TS2322: Types of parameters 'column' and 'column' are incompatible. +!!! error TS2322: Type 'Column<{ name: string; }, unknown>' is not assignable to type 'Column<{ name: string; }, string>'. +!!! error TS2322: The types of 'columnDef.cell' are incompatible between these types. +!!! error TS2322: Type '((column: Column<{ name: string; }, unknown>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, string>) => void) | undefined'. +!!! error TS2322: Type '(column: Column<{ name: string; }, unknown>) => void' is not assignable to type '(column: Column<{ name: string; }, string>) => void'. +!!! error TS2322: Types of parameters 'column' and 'column' are incompatible. +!!! error TS2322: Type 'Column<{ name: string; }, string>' is not assignable to type 'Column<{ name: string; }, unknown>'. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. stringColumn = unknownColumn; // Error + ~~~~~~~~~~~~ +!!! error TS2322: Type 'ColumnDef<{ name: string; }, unknown>' is not assignable to type 'ColumnDef<{ name: string; }, string>'. +!!! error TS2322: Types of property 'cell' are incompatible. +!!! error TS2322: Type '((column: Column<{ name: string; }, unknown>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, string>) => void) | undefined'. +!!! error TS2322: Type '(column: Column<{ name: string; }, unknown>) => void' is not assignable to type '(column: Column<{ name: string; }, string>) => void'. +!!! error TS2322: Types of parameters 'column' and 'column' are incompatible. +!!! error TS2322: Type 'Column<{ name: string; }, string>' is not assignable to type 'Column<{ name: string; }, unknown>'. +!!! error TS2322: The types of 'columnDef.cell' are incompatible between these types. +!!! error TS2322: Type '((column: Column<{ name: string; }, string>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, unknown>) => void) | undefined'. +!!! error TS2322: Type '(column: Column<{ name: string; }, string>) => void' is not assignable to type '(column: Column<{ name: string; }, unknown>) => void'. +!!! error TS2322: Types of parameters 'column' and 'column' are incompatible. +!!! error TS2322: Type 'Column<{ name: string; }, unknown>' is not assignable to type 'Column<{ name: string; }, string>'. +!!! error TS2322: Types of property 'accessorFn' are incompatible. +!!! error TS2322: Type '((row: { name: string; }) => unknown) | undefined' is not assignable to type '((row: { name: string; }) => string) | undefined'. +!!! error TS2322: Type '(row: { name: string; }) => unknown' is not assignable to type '(row: { name: string; }) => string'. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. ==== positiveRecursion.ts (1 errors) ==== export {}; diff --git a/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.errors.txt b/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.errors.txt index d7a540fb6524a..1c5cf559cc404 100644 --- a/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.errors.txt @@ -1,4 +1,4 @@ -varianceCycleDiscardedDiagnostics.ts(12,5): error TS7022: 'Value' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. +varianceCycleDiscardedDiagnostics.ts(22,7): error TS2322: Type 'string' is not assignable to type 'number'. ==== varianceCycleDiscardedDiagnostics.ts (1 errors) ==== @@ -14,8 +14,6 @@ varianceCycleDiscardedDiagnostics.ts(12,5): error TS7022: 'Value' implicitly has class Bar { x!: T; Value = pick(new Foo(this)).foo; - ~~~~~ -!!! error TS7022: 'Value' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. } class Foo { @@ -26,4 +24,6 @@ varianceCycleDiscardedDiagnostics.ts(12,5): error TS7022: 'Value' implicitly has } const v: number = new Bar().Value; + ~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.types b/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.types index 2b4d9d34b6775..903fbaaf8c881 100644 --- a/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.types +++ b/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.types @@ -26,7 +26,7 @@ class Bar { >x : T Value = pick(new Foo(this)).foo; ->Value : any +>Value : string >pick(new Foo(this)).foo : string >pick(new Foo(this)) : B >pick : { (x: Foo): A; (x: object): B; } @@ -56,8 +56,8 @@ class Foo { const v: number = new Bar().Value; >v : number ->new Bar().Value : any +>new Bar().Value : string >new Bar() : Bar >Bar : typeof Bar ->Value : any +>Value : string diff --git a/tsc/testdata/baselines/reference/compiler/varianceCycleEntryOrder.errors.txt b/tsc/testdata/baselines/reference/compiler/varianceCycleEntryOrder.errors.txt index 3093fe2786a2e..36d69f16d627f 100644 --- a/tsc/testdata/baselines/reference/compiler/varianceCycleEntryOrder.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/varianceCycleEntryOrder.errors.txt @@ -1,28 +1,54 @@ +barFirst.ts(8,1): error TS2322: Type 'Bar' is not assignable to type 'Bar<"lit">'. + The types of 'foo.b.f' are incompatible between these types. + Type '(u: Foo>) => void' is not assignable to type '(u: Foo>) => void'. + Types of parameters 'u' and 'u' are incompatible. + Type 'Foo>' is not assignable to type 'Foo>'. + The types of 'x.f' are incompatible between these types. + Type '(u: "lit") => void' is not assignable to type '(u: string) => void'. + Types of parameters 'u' and 'u' are incompatible. + Type 'string' is not assignable to type '"lit"'. barFirst.ts(9,1): error TS2322: Type 'Bar<"lit">' is not assignable to type 'Bar'. - Type 'string' is not assignable to type '"lit"'. + Types of property 'f' are incompatible. + Type '(u: "lit") => void' is not assignable to type '(u: string) => void'. + Types of parameters 'u' and 'u' are incompatible. + Type 'string' is not assignable to type '"lit"'. barFirst.ts(10,1): error TS2322: Type 'Foo' is not assignable to type 'Foo<"lit">'. Types of property 'x' are incompatible. Type 'string' is not assignable to type '"lit"'. barFirst.ts(11,1): error TS2322: Type 'Foo<"lit">' is not assignable to type 'Foo'. - Types of property 'b' are incompatible. - Type 'Bar>' is not assignable to type 'Bar>'. - Type 'Foo' is not assignable to type 'Foo<"lit">'. - Types of property 'x' are incompatible. - Type 'string' is not assignable to type '"lit"'. + The types of 'b.f' are incompatible between these types. + Type '(u: Foo<"lit">) => void' is not assignable to type '(u: Foo) => void'. + Types of parameters 'u' and 'u' are incompatible. + Type 'Foo' is not assignable to type 'Foo<"lit">'. + Types of property 'x' are incompatible. + Type 'string' is not assignable to type '"lit"'. fooFirst.ts(8,1): error TS2322: Type 'Foo' is not assignable to type 'Foo<"lit">'. Types of property 'x' are incompatible. Type 'string' is not assignable to type '"lit"'. fooFirst.ts(9,1): error TS2322: Type 'Foo<"lit">' is not assignable to type 'Foo'. - Types of property 'b' are incompatible. - Type 'Bar>' is not assignable to type 'Bar>'. - Type 'Foo' is not assignable to type 'Foo<"lit">'. - Types of property 'x' are incompatible. - Type 'string' is not assignable to type '"lit"'. + The types of 'b.f' are incompatible between these types. + Type '(u: Foo<"lit">) => void' is not assignable to type '(u: Foo) => void'. + Types of parameters 'u' and 'u' are incompatible. + Type 'Foo' is not assignable to type 'Foo<"lit">'. + Types of property 'x' are incompatible. + Type 'string' is not assignable to type '"lit"'. +fooFirst.ts(10,1): error TS2322: Type 'Bar' is not assignable to type 'Bar<"lit">'. + The types of 'foo.b.f' are incompatible between these types. + Type '(u: Foo>) => void' is not assignable to type '(u: Foo>) => void'. + Types of parameters 'u' and 'u' are incompatible. + Type 'Foo>' is not assignable to type 'Foo>'. + The types of 'x.f' are incompatible between these types. + Type '(u: "lit") => void' is not assignable to type '(u: string) => void'. + Types of parameters 'u' and 'u' are incompatible. + Type 'string' is not assignable to type '"lit"'. fooFirst.ts(11,1): error TS2322: Type 'Bar<"lit">' is not assignable to type 'Bar'. - Type 'string' is not assignable to type '"lit"'. + Types of property 'f' are incompatible. + Type '(u: "lit") => void' is not assignable to type '(u: string) => void'. + Types of parameters 'u' and 'u' are incompatible. + Type 'string' is not assignable to type '"lit"'. -==== fooFirst.ts (3 errors) ==== +==== fooFirst.ts (4 errors) ==== export {}; interface Foo { x: T; b: Bar> } @@ -38,18 +64,32 @@ fooFirst.ts(11,1): error TS2322: Type 'Bar<"lit">' is not assignable to type 'Ba fs = fl; // Error ~~ !!! error TS2322: Type 'Foo<"lit">' is not assignable to type 'Foo'. -!!! error TS2322: Types of property 'b' are incompatible. -!!! error TS2322: Type 'Bar>' is not assignable to type 'Bar>'. -!!! error TS2322: Type 'Foo' is not assignable to type 'Foo<"lit">'. -!!! error TS2322: Types of property 'x' are incompatible. -!!! error TS2322: Type 'string' is not assignable to type '"lit"'. +!!! error TS2322: The types of 'b.f' are incompatible between these types. +!!! error TS2322: Type '(u: Foo<"lit">) => void' is not assignable to type '(u: Foo) => void'. +!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. +!!! error TS2322: Type 'Foo' is not assignable to type 'Foo<"lit">'. +!!! error TS2322: Types of property 'x' are incompatible. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. bl = bs; // Error + ~~ +!!! error TS2322: Type 'Bar' is not assignable to type 'Bar<"lit">'. +!!! error TS2322: The types of 'foo.b.f' are incompatible between these types. +!!! error TS2322: Type '(u: Foo>) => void' is not assignable to type '(u: Foo>) => void'. +!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. +!!! error TS2322: Type 'Foo>' is not assignable to type 'Foo>'. +!!! error TS2322: The types of 'x.f' are incompatible between these types. +!!! error TS2322: Type '(u: "lit") => void' is not assignable to type '(u: string) => void'. +!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. bs = bl; // Error ~~ !!! error TS2322: Type 'Bar<"lit">' is not assignable to type 'Bar'. -!!! error TS2322: Type 'string' is not assignable to type '"lit"'. +!!! error TS2322: Types of property 'f' are incompatible. +!!! error TS2322: Type '(u: "lit") => void' is not assignable to type '(u: string) => void'. +!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. -==== barFirst.ts (3 errors) ==== +==== barFirst.ts (4 errors) ==== export {}; interface Foo { x: T; b: Bar> } @@ -58,10 +98,23 @@ fooFirst.ts(11,1): error TS2322: Type 'Bar<"lit">' is not assignable to type 'Ba declare let fs: Foo, fl: Foo<"lit">; declare let bs: Bar, bl: Bar<"lit">; bl = bs; // Error + ~~ +!!! error TS2322: Type 'Bar' is not assignable to type 'Bar<"lit">'. +!!! error TS2322: The types of 'foo.b.f' are incompatible between these types. +!!! error TS2322: Type '(u: Foo>) => void' is not assignable to type '(u: Foo>) => void'. +!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. +!!! error TS2322: Type 'Foo>' is not assignable to type 'Foo>'. +!!! error TS2322: The types of 'x.f' are incompatible between these types. +!!! error TS2322: Type '(u: "lit") => void' is not assignable to type '(u: string) => void'. +!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. bs = bl; // Error ~~ !!! error TS2322: Type 'Bar<"lit">' is not assignable to type 'Bar'. -!!! error TS2322: Type 'string' is not assignable to type '"lit"'. +!!! error TS2322: Types of property 'f' are incompatible. +!!! error TS2322: Type '(u: "lit") => void' is not assignable to type '(u: string) => void'. +!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. fl = fs; // Error ~~ !!! error TS2322: Type 'Foo' is not assignable to type 'Foo<"lit">'. @@ -70,9 +123,10 @@ fooFirst.ts(11,1): error TS2322: Type 'Bar<"lit">' is not assignable to type 'Ba fs = fl; // Error ~~ !!! error TS2322: Type 'Foo<"lit">' is not assignable to type 'Foo'. -!!! error TS2322: Types of property 'b' are incompatible. -!!! error TS2322: Type 'Bar>' is not assignable to type 'Bar>'. -!!! error TS2322: Type 'Foo' is not assignable to type 'Foo<"lit">'. -!!! error TS2322: Types of property 'x' are incompatible. -!!! error TS2322: Type 'string' is not assignable to type '"lit"'. +!!! error TS2322: The types of 'b.f' are incompatible between these types. +!!! error TS2322: Type '(u: Foo<"lit">) => void' is not assignable to type '(u: Foo) => void'. +!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. +!!! error TS2322: Type 'Foo' is not assignable to type 'Foo<"lit">'. +!!! error TS2322: Types of property 'x' are incompatible. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/varianceCycleStructuralFallback.errors.txt b/tsc/testdata/baselines/reference/compiler/varianceCycleStructuralFallback.errors.txt index 85a24505357b2..7e367290c06dd 100644 --- a/tsc/testdata/baselines/reference/compiler/varianceCycleStructuralFallback.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/varianceCycleStructuralFallback.errors.txt @@ -2,31 +2,61 @@ maFirst.ts(8,1): error TS2322: Type 'MA<{ p: string; }>' is not assignable to ty The types of 'x.p' are incompatible between these types. Type 'string' is not assignable to type '"lit"'. maFirst.ts(9,1): error TS2322: Type 'MA<{ p: "lit"; }>' is not assignable to type 'MA<{ p: string; }>'. - Types of property 'b' are incompatible. - Type 'MB>' is not assignable to type 'MB>'. - Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. - The types of 'x.p' are incompatible between these types. - Type 'string' is not assignable to type '"lit"'. + The types of 'b.f' are incompatible between these types. + Type '(u: MA<{ p: "lit"; }>) => void' is not assignable to type '(u: MA<{ p: string; }>) => void'. + Types of parameters 'u' and 'u' are incompatible. + Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. + The types of 'x.p' are incompatible between these types. + Type 'string' is not assignable to type '"lit"'. +maFirst.ts(10,1): error TS2322: Type 'MB<{ p: string; }>' is not assignable to type 'MB<{ p: "lit"; }>'. + The types of 'a.b.f' are incompatible between these types. + Type '(u: MA>) => void' is not assignable to type '(u: MA>) => void'. + Types of parameters 'u' and 'u' are incompatible. + Type 'MA>' is not assignable to type 'MA>'. + The types of 'x.f' are incompatible between these types. + Type '(u: { p: "lit"; }) => void' is not assignable to type '(u: { p: string; }) => void'. + Types of parameters 'u' and 'u' are incompatible. + Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. + Types of property 'p' are incompatible. + Type 'string' is not assignable to type '"lit"'. maFirst.ts(11,1): error TS2322: Type 'MB<{ p: "lit"; }>' is not assignable to type 'MB<{ p: string; }>'. - Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. - Types of property 'p' are incompatible. - Type 'string' is not assignable to type '"lit"'. + Types of property 'f' are incompatible. + Type '(u: { p: "lit"; }) => void' is not assignable to type '(u: { p: string; }) => void'. + Types of parameters 'u' and 'u' are incompatible. + Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. + Types of property 'p' are incompatible. + Type 'string' is not assignable to type '"lit"'. +mbFirst.ts(8,1): error TS2322: Type 'MB<{ p: string; }>' is not assignable to type 'MB<{ p: "lit"; }>'. + The types of 'a.b.f' are incompatible between these types. + Type '(u: MA>) => void' is not assignable to type '(u: MA>) => void'. + Types of parameters 'u' and 'u' are incompatible. + Type 'MA>' is not assignable to type 'MA>'. + The types of 'x.f' are incompatible between these types. + Type '(u: { p: "lit"; }) => void' is not assignable to type '(u: { p: string; }) => void'. + Types of parameters 'u' and 'u' are incompatible. + Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. + Types of property 'p' are incompatible. + Type 'string' is not assignable to type '"lit"'. mbFirst.ts(9,1): error TS2322: Type 'MB<{ p: "lit"; }>' is not assignable to type 'MB<{ p: string; }>'. - Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. - Types of property 'p' are incompatible. - Type 'string' is not assignable to type '"lit"'. + Types of property 'f' are incompatible. + Type '(u: { p: "lit"; }) => void' is not assignable to type '(u: { p: string; }) => void'. + Types of parameters 'u' and 'u' are incompatible. + Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. + Types of property 'p' are incompatible. + Type 'string' is not assignable to type '"lit"'. mbFirst.ts(10,1): error TS2322: Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. The types of 'x.p' are incompatible between these types. Type 'string' is not assignable to type '"lit"'. mbFirst.ts(11,1): error TS2322: Type 'MA<{ p: "lit"; }>' is not assignable to type 'MA<{ p: string; }>'. - Types of property 'b' are incompatible. - Type 'MB>' is not assignable to type 'MB>'. - Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. - The types of 'x.p' are incompatible between these types. - Type 'string' is not assignable to type '"lit"'. + The types of 'b.f' are incompatible between these types. + Type '(u: MA<{ p: "lit"; }>) => void' is not assignable to type '(u: MA<{ p: string; }>) => void'. + Types of parameters 'u' and 'u' are incompatible. + Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. + The types of 'x.p' are incompatible between these types. + Type 'string' is not assignable to type '"lit"'. -==== maFirst.ts (3 errors) ==== +==== maFirst.ts (4 errors) ==== export {}; type MA = { x: { [K in keyof T]-?: T[K] }; b: MB> }; @@ -42,20 +72,36 @@ mbFirst.ts(11,1): error TS2322: Type 'MA<{ p: "lit"; }>' is not assignable to ty as = al; ~~ !!! error TS2322: Type 'MA<{ p: "lit"; }>' is not assignable to type 'MA<{ p: string; }>'. -!!! error TS2322: Types of property 'b' are incompatible. -!!! error TS2322: Type 'MB>' is not assignable to type 'MB>'. -!!! error TS2322: Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. -!!! error TS2322: The types of 'x.p' are incompatible between these types. -!!! error TS2322: Type 'string' is not assignable to type '"lit"'. +!!! error TS2322: The types of 'b.f' are incompatible between these types. +!!! error TS2322: Type '(u: MA<{ p: "lit"; }>) => void' is not assignable to type '(u: MA<{ p: string; }>) => void'. +!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. +!!! error TS2322: Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. +!!! error TS2322: The types of 'x.p' are incompatible between these types. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. bl = bs; + ~~ +!!! error TS2322: Type 'MB<{ p: string; }>' is not assignable to type 'MB<{ p: "lit"; }>'. +!!! error TS2322: The types of 'a.b.f' are incompatible between these types. +!!! error TS2322: Type '(u: MA>) => void' is not assignable to type '(u: MA>) => void'. +!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. +!!! error TS2322: Type 'MA>' is not assignable to type 'MA>'. +!!! error TS2322: The types of 'x.f' are incompatible between these types. +!!! error TS2322: Type '(u: { p: "lit"; }) => void' is not assignable to type '(u: { p: string; }) => void'. +!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. +!!! error TS2322: Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. +!!! error TS2322: Types of property 'p' are incompatible. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. bs = bl; ~~ !!! error TS2322: Type 'MB<{ p: "lit"; }>' is not assignable to type 'MB<{ p: string; }>'. -!!! error TS2322: Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. -!!! error TS2322: Types of property 'p' are incompatible. -!!! error TS2322: Type 'string' is not assignable to type '"lit"'. +!!! error TS2322: Types of property 'f' are incompatible. +!!! error TS2322: Type '(u: { p: "lit"; }) => void' is not assignable to type '(u: { p: string; }) => void'. +!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. +!!! error TS2322: Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. +!!! error TS2322: Types of property 'p' are incompatible. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. -==== mbFirst.ts (3 errors) ==== +==== mbFirst.ts (4 errors) ==== export {}; type MA = { x: { [K in keyof T]-?: T[K] }; b: MB> }; @@ -64,12 +110,27 @@ mbFirst.ts(11,1): error TS2322: Type 'MA<{ p: "lit"; }>' is not assignable to ty declare let as: MA<{ p: string }>, al: MA<{ p: "lit" }>; declare let bs: MB<{ p: string }>, bl: MB<{ p: "lit" }>; bl = bs; + ~~ +!!! error TS2322: Type 'MB<{ p: string; }>' is not assignable to type 'MB<{ p: "lit"; }>'. +!!! error TS2322: The types of 'a.b.f' are incompatible between these types. +!!! error TS2322: Type '(u: MA>) => void' is not assignable to type '(u: MA>) => void'. +!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. +!!! error TS2322: Type 'MA>' is not assignable to type 'MA>'. +!!! error TS2322: The types of 'x.f' are incompatible between these types. +!!! error TS2322: Type '(u: { p: "lit"; }) => void' is not assignable to type '(u: { p: string; }) => void'. +!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. +!!! error TS2322: Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. +!!! error TS2322: Types of property 'p' are incompatible. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. bs = bl; ~~ !!! error TS2322: Type 'MB<{ p: "lit"; }>' is not assignable to type 'MB<{ p: string; }>'. -!!! error TS2322: Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. -!!! error TS2322: Types of property 'p' are incompatible. -!!! error TS2322: Type 'string' is not assignable to type '"lit"'. +!!! error TS2322: Types of property 'f' are incompatible. +!!! error TS2322: Type '(u: { p: "lit"; }) => void' is not assignable to type '(u: { p: string; }) => void'. +!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. +!!! error TS2322: Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. +!!! error TS2322: Types of property 'p' are incompatible. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. al = as; ~~ !!! error TS2322: Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. @@ -78,9 +139,10 @@ mbFirst.ts(11,1): error TS2322: Type 'MA<{ p: "lit"; }>' is not assignable to ty as = al; ~~ !!! error TS2322: Type 'MA<{ p: "lit"; }>' is not assignable to type 'MA<{ p: string; }>'. -!!! error TS2322: Types of property 'b' are incompatible. -!!! error TS2322: Type 'MB>' is not assignable to type 'MB>'. -!!! error TS2322: Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. -!!! error TS2322: The types of 'x.p' are incompatible between these types. -!!! error TS2322: Type 'string' is not assignable to type '"lit"'. +!!! error TS2322: The types of 'b.f' are incompatible between these types. +!!! error TS2322: Type '(u: MA<{ p: "lit"; }>) => void' is not assignable to type '(u: MA<{ p: string; }>) => void'. +!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. +!!! error TS2322: Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. +!!! error TS2322: The types of 'x.p' are incompatible between these types. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/varianceDeclarationOrder.errors.txt b/tsc/testdata/baselines/reference/compiler/varianceDeclarationOrder.errors.txt deleted file mode 100644 index 76e1b58ab4906..0000000000000 --- a/tsc/testdata/baselines/reference/compiler/varianceDeclarationOrder.errors.txt +++ /dev/null @@ -1,31 +0,0 @@ -refFirst.ts(10,14): error TS2322: Type 'DS<{ total: M; }, string>' is not assignable to type 'DS, string>'. - Property 'total' is missing in type 'Record' but required in type '{ total: M; }'. - - -==== refFirst.ts (1 errors) ==== - type M = { kind: "m" }; - type Filtered = { [K in keyof T as T[K] extends M ? K : never]: T[K] }; - interface Config { measure: keyof T } - interface Ref { dataset: DS, N> } - interface DS { - a(config: Config>): void; - b: Ref; - } - declare const x: DS<{ total: M }, string>; - export const y: DS, string> = x; - ~ -!!! error TS2322: Type 'DS<{ total: M; }, string>' is not assignable to type 'DS, string>'. -!!! error TS2322: Property 'total' is missing in type 'Record' but required in type '{ total: M; }'. - -==== dsFirst.ts (0 errors) ==== - type M = { kind: "m" }; - type Filtered = { [K in keyof T as T[K] extends M ? K : never]: T[K] }; - interface Config { measure: keyof T } - interface DS { - a(config: Config>): void; - b: Ref; - } - interface Ref { dataset: DS, N> } - declare const x: DS<{ total: M }, string>; - export const y: DS, string> = x; - \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/varianceMeasuredWithinCircularity.errors.txt b/tsc/testdata/baselines/reference/compiler/varianceMeasuredWithinCircularity.errors.txt index d3d975854426a..2782c1f5b0e65 100644 --- a/tsc/testdata/baselines/reference/compiler/varianceMeasuredWithinCircularity.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/varianceMeasuredWithinCircularity.errors.txt @@ -13,9 +13,24 @@ varianceMeasuredWithinCircularity.ts(24,5): error TS2322: Type 'Selection' is not assignable to type 'TransitionLike'. + The types returned by 'selection().join' are incompatible between these types. + Type '(enter: string | ((elem: Selection) => Selection | TransitionLike)) => Selection' is not assignable to type '(enter: string | ((elem: Selection) => Selection | TransitionLike)) => Selection'. + Types of parameters 'enter' and 'enter' are incompatible. + Type 'string | ((elem: Selection) => Selection | TransitionLike)' is not assignable to type 'string | ((elem: Selection) => Selection | TransitionLike)'. + Type '(elem: Selection) => Selection | TransitionLike' is not assignable to type 'string | ((elem: Selection) => Selection | TransitionLike)'. + Type '(elem: Selection) => Selection | TransitionLike' is not assignable to type '(elem: Selection) => Selection | TransitionLike'. + Type 'Selection | TransitionLike' is not assignable to type 'Selection | TransitionLike'. + Type 'Selection' is not assignable to type 'Selection | TransitionLike'. + Type 'Selection' is not assignable to type 'Selection'. + The types returned by 'children().data' are incompatible between these types. + Type '(key: (parent: Base) => string) => Selection' is not assignable to type '(key: (parent: Derived) => string) => Selection'. + Types of parameters 'key' and 'key' are incompatible. + Types of parameters 'parent' and 'parent' are incompatible. + Property 'derived' is missing in type 'Base' but required in type 'Derived'. -==== varianceMeasuredWithinCircularity.ts (1 errors) ==== +==== varianceMeasuredWithinCircularity.ts (2 errors) ==== // The variances of Selection and TransitionLike depend on each other. // The callback of `data` requires Selection to be covariant in P, while // `join` passes Selection to a callback, which then requires it to @@ -60,4 +75,21 @@ varianceMeasuredWithinCircularity.ts(24,5): error TS2322: Type 'Selection; let t2: TransitionLike = t1; + ~~ +!!! error TS2322: Type 'TransitionLike' is not assignable to type 'TransitionLike'. +!!! error TS2322: The types returned by 'selection().join' are incompatible between these types. +!!! error TS2322: Type '(enter: string | ((elem: Selection) => Selection | TransitionLike)) => Selection' is not assignable to type '(enter: string | ((elem: Selection) => Selection | TransitionLike)) => Selection'. +!!! error TS2322: Types of parameters 'enter' and 'enter' are incompatible. +!!! error TS2322: Type 'string | ((elem: Selection) => Selection | TransitionLike)' is not assignable to type 'string | ((elem: Selection) => Selection | TransitionLike)'. +!!! error TS2322: Type '(elem: Selection) => Selection | TransitionLike' is not assignable to type 'string | ((elem: Selection) => Selection | TransitionLike)'. +!!! error TS2322: Type '(elem: Selection) => Selection | TransitionLike' is not assignable to type '(elem: Selection) => Selection | TransitionLike'. +!!! error TS2322: Type 'Selection | TransitionLike' is not assignable to type 'Selection | TransitionLike'. +!!! error TS2322: Type 'Selection' is not assignable to type 'Selection | TransitionLike'. +!!! error TS2322: Type 'Selection' is not assignable to type 'Selection'. +!!! error TS2322: The types returned by 'children().data' are incompatible between these types. +!!! error TS2322: Type '(key: (parent: Base) => string) => Selection' is not assignable to type '(key: (parent: Derived) => string) => Selection'. +!!! error TS2322: Types of parameters 'key' and 'key' are incompatible. +!!! error TS2322: Types of parameters 'parent' and 'parent' are incompatible. +!!! error TS2322: Property 'derived' is missing in type 'Base' but required in type 'Derived'. +!!! related TS2728 varianceMeasuredWithinCircularity.ts:11:34: 'derived' is declared here. \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/varianceMeasurement.errors.txt b/tsc/testdata/baselines/reference/compiler/varianceMeasurement.errors.txt index 7a361e5b94ac6..711f3286edf99 100644 --- a/tsc/testdata/baselines/reference/compiler/varianceMeasurement.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/varianceMeasurement.errors.txt @@ -1,5 +1,11 @@ varianceMeasurement.ts(10,7): error TS2322: Type 'Foo1' is not assignable to type 'Foo1<"a">'. - Type 'string' is not assignable to type '"a"'. + Types of property 'x' are incompatible. + Type 'string' is not assignable to type '"a"'. +varianceMeasurement.ts(11,7): error TS2322: Type 'Foo1' is not assignable to type 'Foo1'. + The types of 'y.x' are incompatible between these types. + Type '(arg: string) => void' is not assignable to type '(arg: unknown) => void'. + Types of parameters 'arg' and 'arg' are incompatible. + Type 'unknown' is not assignable to type 'string'. varianceMeasurement.ts(21,7): error TS2322: Type 'Foo2' is not assignable to type 'Foo2<"a">'. Types of property 'x' are incompatible. Type 'string' is not assignable to type '"a"'. @@ -9,7 +15,13 @@ varianceMeasurement.ts(22,7): error TS2322: Type 'Foo2' is not assignabl Types of parameters 'arg' and 'arg' are incompatible. Type 'unknown' is not assignable to type 'string'. varianceMeasurement.ts(33,7): error TS2322: Type 'Foo3' is not assignable to type 'Foo3<"a">'. - Type 'string' is not assignable to type '"a"'. + Types of property 'x' are incompatible. + Type 'string' is not assignable to type '"a"'. +varianceMeasurement.ts(34,7): error TS2322: Type 'Foo3' is not assignable to type 'Foo3'. + The types of 'y.x' are incompatible between these types. + Type '(arg: string) => void' is not assignable to type '(arg: unknown) => void'. + Types of parameters 'arg' and 'arg' are incompatible. + Type 'unknown' is not assignable to type 'string'. varianceMeasurement.ts(44,7): error TS2322: Type 'Foo4' is not assignable to type 'Foo4<"a">'. Types of property 'x' are incompatible. Type 'string' is not assignable to type '"a"'. @@ -26,7 +38,7 @@ varianceMeasurement.ts(75,7): error TS2322: Type 'C' is not ass Type 'number' is not assignable to type 'string'. -==== varianceMeasurement.ts (9 errors) ==== +==== varianceMeasurement.ts (11 errors) ==== // The type below should be invariant in T but is measured as covariant because // we don't analyze recursive references. @@ -39,8 +51,15 @@ varianceMeasurement.ts(75,7): error TS2322: Type 'C' is not ass const f11: Foo1<'a'> = f10; ~~~ !!! error TS2322: Type 'Foo1' is not assignable to type 'Foo1<"a">'. -!!! error TS2322: Type 'string' is not assignable to type '"a"'. +!!! error TS2322: Types of property 'x' are incompatible. +!!! error TS2322: Type 'string' is not assignable to type '"a"'. const f12: Foo1 = f10; + ~~~ +!!! error TS2322: Type 'Foo1' is not assignable to type 'Foo1'. +!!! error TS2322: The types of 'y.x' are incompatible between these types. +!!! error TS2322: Type '(arg: string) => void' is not assignable to type '(arg: unknown) => void'. +!!! error TS2322: Types of parameters 'arg' and 'arg' are incompatible. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. // The type below is invariant in T and is measured as such. @@ -75,8 +94,15 @@ varianceMeasurement.ts(75,7): error TS2322: Type 'C' is not ass const f31: Foo3<'a'> = f30; ~~~ !!! error TS2322: Type 'Foo3' is not assignable to type 'Foo3<"a">'. -!!! error TS2322: Type 'string' is not assignable to type '"a"'. +!!! error TS2322: Types of property 'x' are incompatible. +!!! error TS2322: Type 'string' is not assignable to type '"a"'. const f32: Foo3 = f30; + ~~~ +!!! error TS2322: Type 'Foo3' is not assignable to type 'Foo3'. +!!! error TS2322: The types of 'y.x' are incompatible between these types. +!!! error TS2322: Type '(arg: string) => void' is not assignable to type '(arg: unknown) => void'. +!!! error TS2322: Types of parameters 'arg' and 'arg' are incompatible. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. // The type below is invariant in T and is measured as such. From fa5641f4fefaddff545f2f92d7f92d850c15a910 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 25 Oct 2026 21:56:25 -0700 Subject: [PATCH 064/194] Make instantiation limits independent of check order MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Whether an instantiation reached the depth or count limit depended on how much of its work was already cached and on what had been instantiated before in the same statement, so results and TS2589 errors depended on what was checked or queried first. Each memoized computation and cached comparison now measures depth from where it started, regardless of reporting mode, and a reused result adds no depth, so a result is the same whoever computes it first. Chains that start a new memoized computation at every level are still stopped by a much larger limit on the whole outermost instantiation, which only runaway instantiations reach. The types named as circular in a depth error are found in the instantiations of the computation that reached the limit, except for that outer limit, which depends on what was cached before anyway. For the count limit, each memoized computation and comparison keeps the distinct instantiations its result needs from scratch, including those of the results it reuses, and the limit applies to that. A HyperLogLog estimate keeps merging cheap and does not count shared results many times over. Instantiations are identified by structural hashes rather than type ids, as those depend on creation order. Hashes look a bounded depth into types, so that they are the same wherever a cycle is entered, and identify files by their text rather than their path, so that results do not depend on where a project is located. The work a result carries must be what computing it from scratch would do: - A result set outside its own computation takes on the work done up to the point it was set, not what the setting computation did afterwards, which recomputing the result never repeats. Map entries follow the same rule. - An identity, such as the declared type of a type parameter, is reached only through the result that created it, so it carries no work; otherwise a type parameter first created in a call that went on to instantiate heavily carried those instantiations everywhere. - Rolling back a result discards the work stored for it, so a discarded computation that started from a different context cannot push later reuses over the limit. - Reads within a computation must account for the cached work, which happens millions of times while checking. A bitset of the keys whose memo states may store work lets most reads skip the memo state map. Conditional constraints, inlined narrowing conditions and nested type printing each stop at a fixed nesting depth as well. A computation that started deeper in that nesting reached it sooner, and its truncated result was cached as though it depended only on its key. Reaching such a limit now marks as circular everything back to the computation that started counting, so only its result is kept. The instantiation limits test now reports Wide2All, whose work was half done for Wide2Tail, like WideAll, in every check order. │ before.txt │ after.txt │ │ sec/op │ sec/op vs base │ Compiler 2.525 ± 1% 2.700 ± 1% +6.93% (p=0.001 n=10) │ before.txt │ after.txt │ │ peak-RSS-bytes │ peak-RSS-bytes vs base │ Compiler 360.1Mi ± 5% 354.9Mi ± 5% ~ (p=0.971 n=10) --- tsc/internal/checker/checker.go | 123 +++++-- tsc/internal/checker/checker_test.go | 1 + tsc/internal/checker/flow.go | 8 +- tsc/internal/checker/memo.go | 106 +++++- tsc/internal/checker/printer.go | 6 +- tsc/internal/checker/relater.go | 41 +-- tsc/internal/checker/resolutions.go | 268 +++++++++++++- tsc/internal/checker/typehash.go | 328 ++++++++++++++++++ .../instantiationLimitsCheckOrder.errors.txt | 22 +- .../instantiationLimitsCheckOrder.symbols | 97 +++--- .../instantiationLimitsCheckOrder.types | 17 +- .../compiler/instantiationLimitsCheckOrder.ts | 15 +- 12 files changed, 876 insertions(+), 156 deletions(-) create mode 100644 tsc/internal/checker/typehash.go diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index e4dee23a6e75b..8a498d345d217 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -616,12 +616,16 @@ type Checker struct { *memoStore compareSymbols func(*ast.Symbol, *ast.Symbol) int compareSymbolChains func([]*ast.Symbol, []*ast.Symbol) int + resolutionSerials uint32 resolutions []resolution - instantiationCount uint32 + symbolHashes map[*ast.Symbol]uint64 + typeHashes map[*Type]*[typeHashDepth]uint64 + mapperHashes map[*TypeMapper]uint64 + fileHashes map[*ast.SourceFile]uint64 instantiationStack []*Type - conditionalConstraintDepth uint32 - inlineLevel int - serializationLevel int + conditionalConstraintDepth depthLimit + inlineLevel depthLimit + serializationLevel depthLimit currentNode *ast.Node simplifyingIndexedAccess collections.Set[CachedTypeKey] currentNodeResolution int // 1-based index in resolutions of the resolution of currentNode, or 0; see enterCurrentNode @@ -773,7 +777,7 @@ type Checker struct { skipDirectInferenceNodes collections.Set[*ast.Node] ctx context.Context activeMappers []*TypeMapper - activeTypeMappersCaches []clearableMap[*Type] + activeTypeMappersCaches []clearableMap[activeMapperCacheEntry] withinUnreachableCode bool typeToStringNodebuilder *NodeBuilder tracer *Tracer // Optional tracer for trace events and type recording (for --generateTrace) @@ -1012,6 +1016,7 @@ type memoStore struct { nonExistentProperties collections.Set[NonExistentPropertyKey] deferredDiagnosticCallbacks []func(c *Checker) memoStates map[memoKey]*memoState // Memo state of results computed by queries; see memo.go + costFilter []uint64 // Memo keys whose memo states may store work; see resolutions.go memoPendingCount int // Number of memoStates with unreplayed effects memoErrorStates int // Number of memoStates with reports; see setReported @@ -2448,8 +2453,7 @@ func (c *Checker) checkSourceElement(node *ast.Node) bool { if node != nil { saveCurrentNode := c.enterCurrentNode(node) saveWithinUnreachableCode := c.withinUnreachableCode - c.instantiationCount = 0 - c.beginResolution(0, nil, 0) + c.beginNodeResolution() c.checkSourceElementWorker(node) c.endResolution() c.exitCurrentNode(saveCurrentNode) @@ -2691,8 +2695,7 @@ func (c *Checker) checkDeferredNode(node *ast.Node) { defer tr.Push(tracing.PhaseCheck, "checkDeferredNode", map[string]any{"kind": node.Kind, "pos": node.Pos(), "end": node.End(), "path": ast.GetSourceFileOfNode(node).FileName()}, false)() } saveCurrentNode := c.enterCurrentNode(node) - c.instantiationCount = 0 - c.beginResolution(0, nil, 0) + c.beginNodeResolution() switch node.Kind { case ast.KindCallExpression, ast.KindNewExpression, ast.KindTaggedTemplateExpression, ast.KindDecorator, ast.KindJsxOpeningElement: // These node kinds are deferred checked when overload resolution fails. To save on work, @@ -7937,8 +7940,7 @@ func (c *Checker) checkExpressionEx(node *ast.Node, checkMode CheckMode) *Type { defer tr.Push(tracing.PhaseCheck, "checkExpression", map[string]any{"kind": node.Kind, "pos": node.Pos(), "end": node.End(), "path": ast.GetSourceFileOfNode(node).FileName()}, false)() } saveCurrentNode := c.enterCurrentNode(node) - c.instantiationCount = 0 - c.beginResolution(0, nil, 0) + c.beginNodeResolution() uninstantiatedType := c.checkExpressionWorker(node, checkMode) t := c.instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, checkMode) if isConstEnumObjectType(t) { @@ -14736,7 +14738,7 @@ func (c *Checker) produceDeferredDiagnostics() { func (c *Checker) addDiagnostic(diagnostic *ast.Diagnostic) *ast.Diagnostic { // Discard diagnostics created while at the maximum number of recursive TypeToString invocations. - if c.serializationLevel < maxSerializationLevel { + if !c.depthLimitReached(&c.serializationLevel, maxSerializationLevel) { if !c.checking { c.recordEffect(func(c *Checker) { c.diagnostics.Add(diagnostic) }) return diagnostic @@ -14748,7 +14750,7 @@ func (c *Checker) addDiagnostic(diagnostic *ast.Diagnostic) *ast.Diagnostic { func (c *Checker) addSuggestionDiagnostic(diagnostic *ast.Diagnostic) *ast.Diagnostic { // Discard diagnostics created while at the maximum number of recursive TypeToString invocations. - if c.serializationLevel < maxSerializationLevel { + if !c.depthLimitReached(&c.serializationLevel, maxSerializationLevel) { if !c.checking { c.recordEffect(func(c *Checker) { c.suggestionDiagnostics.Add(diagnostic) }) return diagnostic @@ -20136,6 +20138,36 @@ func (c *Checker) markCircular(start int) { c.extendCircularity(start + 1) } +// depthLimit counts the nesting of a recursion that is cut short at a fixed +// depth. How deep a computation may go then depends on how deep it was +// entered, so a computation cut short keeps its result only if it started +// counting. +type depthLimit struct { + depth int32 + start int32 // Index in resolutions of the computation that started counting +} + +// depthLimitReached reports whether l is at limit, in which case the +// computations since the one that started counting are marked circular. +func (c *Checker) depthLimitReached(l *depthLimit, limit int32) bool { + if l.depth < limit { + return false + } + c.markCircular(int(l.start)) + return true +} + +func (c *Checker) enterDepthLimit(l *depthLimit) { + if l.depth == 0 { + l.start = int32(len(c.resolutions) - 1) + } + l.depth++ +} + +func (l *depthLimit) exit() { + l.depth-- +} + /** * Pop an entry from the type resolution stack and return its associated result value. The result value will * be true if no circularities were detected, or false if a circularity was found. @@ -20145,6 +20177,8 @@ func (c *Checker) popTypeResolution() bool { debug.Assert(c.typeResolutionTop == n+1, "resolutions left above a type resolution") f := &c.resolutions[n] result := f.typeResolution.result + parent := &c.resolutions[n-1] + parent.count = f.count c.typeResolutionTop = int(f.prevTypeResolution) c.resolutions[n] = resolution{} c.resolutions = c.resolutions[:n] @@ -20155,9 +20189,15 @@ func (c *Checker) popTypeResolution() bool { } // beginTypeResolution starts the resolution of propertyName for target, which -// re-entering detects as a cycle. +// re-entering detects as a cycle. Its resolution shares the work of the +// resolution below it. func (c *Checker) beginTypeResolution(target TypeSystemEntity, propertyName TypeSystemPropertyName) { + parent := c.currentResolution() f := resolution{ + count: parent.count, + start: parent.start, + depthStart: parent.depthStart, + serial: parent.serial, prevMemo: int32(c.memoTop), isTypeResolution: true, prevTypeResolution: int32(c.typeResolutionTop), @@ -23977,12 +24017,13 @@ func (c *Checker) instantiateTypeWithAlias(t *Type, m *TypeMapper, alias *TypeAl if t == nil || m == nil || !(c.couldContainTypeVariables(t) || (t.alias != nil && len(t.alias.typeArguments) > 0 && core.Some(t.alias.typeArguments, c.couldContainTypeVariables))) { return t } - if len(c.instantiationStack) == 100 || c.instantiationCount >= 5_000_000 { - // We have reached 100 recursive type instantiations, or 5M type instantiations caused by the same statement - // or expression. There is a very high likelihood we're dealing with a combination of infinite generic types + // See "Instantiation limits" in memo.go. + if c.instantiationLimitReached() { + // We have reached 100 recursive type instantiations in one computation, or 5M type instantiations caused by + // the same statement or expression. There is a very high likelihood we're dealing with a combination of infinite generic types // that perpetually generate new type identities, so we stop the recursion here by yielding the error type. if tr := c.tracer; tr != nil { - tr.Instant(tracing.PhaseCheckTypes, "instantiateType_DepthLimit", map[string]any{"typeId": t.id, "instantiationDepth": len(c.instantiationStack), "instantiationCount": c.instantiationCount}) + tr.Instant(tracing.PhaseCheckTypes, "instantiateType_DepthLimit", map[string]any{"typeId": t.id, "instantiationDepth": len(c.instantiationStack)}) } circularTypeNames := c.getCircularTypeNames() var message *diagnostics.Message @@ -23995,14 +24036,7 @@ func (c *Checker) instantiateTypeWithAlias(t *Type, m *TypeMapper, alias *TypeAl default: message = diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite } - report := func(c *Checker, node *ast.Node) { c.error(node, message, args...) } - if len(c.instantiationStack) == 100 { - c.reportAtCurrentNode(report) - } else { - // The count depends on how much was already cached, so computing - // the result again elsewhere would not reliably reach it either. - c.reportAtCurrentNodeOnce(report) - } + c.reportAtCurrentNode(func(c *Checker, node *ast.Node) { c.error(node, message, args...) }) return c.errorType } index := c.findActiveMapper(m) @@ -24012,24 +24046,36 @@ func (c *Checker) instantiateTypeWithAlias(t *Type, m *TypeMapper, alias *TypeAl c.pushActiveMapper(m) } else { key = getActiveMapperCacheKey(t, alias) - if cachedType, ok := c.activeTypeMappersCaches[index].get(key); ok { - return cachedType + // An instantiation cached in another resolution is not part of the work + // of this one, so it is only reused within the same resolution. + if cached, ok := c.activeTypeMappersCaches[index].get(key); ok && cached.serial == c.currentResolution().serial { + return cached.result } } c.TotalInstantiationCount++ - c.instantiationCount++ + h := hashCombine(c.typeHash(t), c.mapperHash(m)) + if alias != nil { + h = hashCombine(h, c.symbolHash(alias.symbol)) + h = c.hashTypes(h, alias.typeArguments, typeHashDepth) + } + c.addInstantiation(hashFinal(h)) c.instantiationStack = append(c.instantiationStack, t) result := c.instantiateTypeWorker(t, m, alias) if index == -1 { c.popActiveMapper() } else { - c.activeTypeMappersCaches[index].set(key, result) + c.activeTypeMappersCaches[index].set(key, activeMapperCacheEntry{result, c.currentResolution().serial}) } c.instantiationStack[len(c.instantiationStack)-1] = nil c.instantiationStack = c.instantiationStack[:len(c.instantiationStack)-1] return result } +type activeMapperCacheEntry struct { + result *Type + serial uint32 +} + // Without an alias the key is just the type ID, which avoids hashing. Hashed keys have // a nonzero high half with overwhelming probability, so the two kinds do not collide. func getActiveMapperCacheKey(t *Type, alias *TypeAlias) CacheHashKey { @@ -24045,7 +24091,14 @@ func getActiveMapperCacheKey(t *Type, alias *TypeAlias) CacheHashKey { func (c *Checker) getCircularTypeNames() []string { typeCounts := make(map[*Type]int) var circularTypeNames []string - for _, t := range c.instantiationStack { + // A computation reaching the depth limit names only its own + // instantiations, which do not depend on where it was first computed; + // see "Instantiation limits". + stack := c.instantiationStack + if len(stack) != instantiationTotalDepthLimit { + stack = stack[c.currentResolution().depthStart:] + } + for _, t := range stack { typeCounts[t] = typeCounts[t] + 1 if typeCounts[t] == 3 { symbol := t.symbol @@ -24070,7 +24123,7 @@ func (c *Checker) pushActiveMapper(mapper *TypeMapper) { // The cap may contain an empty cache from popActiveMapper; reuse it. c.activeTypeMappersCaches = c.activeTypeMappersCaches[:lastIndex+1] } else { - c.activeTypeMappersCaches = append(c.activeTypeMappersCaches, clearableMap[*Type]{}) + c.activeTypeMappersCaches = append(c.activeTypeMappersCaches, clearableMap[activeMapperCacheEntry]{}) } } @@ -29687,12 +29740,12 @@ func (c *Checker) computeBaseConstraint(t *Type, stack []RecursionId) *Type { } return c.getNextBaseConstraint(c.getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, t.AsIndexedAccessType().accessFlags, nil, nil), stack) case t.flags&TypeFlagsConditional != 0: - if c.conditionalConstraintDepth >= 100 { + if c.depthLimitReached(&c.conditionalConstraintDepth, 100) { return nil } - c.conditionalConstraintDepth++ + c.enterDepthLimit(&c.conditionalConstraintDepth) constraint := c.getConstraintFromConditionalType(t) - c.conditionalConstraintDepth-- + c.conditionalConstraintDepth.exit() return c.getNextBaseConstraint(constraint, stack) case t.flags&TypeFlagsSubstitution != 0: return c.getNextBaseConstraint(c.getSubstitutionIntersection(t), stack) diff --git a/tsc/internal/checker/checker_test.go b/tsc/internal/checker/checker_test.go index 4e5d2b2445745..ff89773b352b2 100644 --- a/tsc/internal/checker/checker_test.go +++ b/tsc/internal/checker/checker_test.go @@ -587,6 +587,7 @@ var unmemoizedCacheFields = map[string]string{ "memoStore.memoStates": unmemoizedMemoState, "memoStore.memoPendingCount": unmemoizedMemoState, "memoStore.memoErrorStates": unmemoizedMemoState, + "memoStore.costFilter": unmemoizedMemoState, "memoStore.mu": unmemoizedMemoState, "memoStore.diagnostics": unmemoizedChecking, "memoStore.suggestionDiagnostics": unmemoizedChecking, diff --git a/tsc/internal/checker/flow.go b/tsc/internal/checker/flow.go index d445543d4ceb5..7db6d21859830 100644 --- a/tsc/internal/checker/flow.go +++ b/tsc/internal/checker/flow.go @@ -387,14 +387,14 @@ func (c *Checker) narrowType(f *FlowState, t *Type, expr *ast.Node, assumeTrue b case ast.KindIdentifier: // When narrowing a reference to a const variable, non-assigned parameter, or readonly property, we inline // up to five levels of aliased conditional expressions that are themselves declared as const variables. - if !c.isMatchingReference(f.reference, expr) && c.inlineLevel < 5 { + if !c.isMatchingReference(f.reference, expr) { symbol := c.getResolvedSymbol(expr) if c.isConstantVariable(symbol) { declaration := symbol.ValueDeclaration() - if declaration != nil && ast.IsVariableDeclaration(declaration) && declaration.Type() == nil && declaration.Initializer() != nil && c.isConstantReference(f.reference) { - c.inlineLevel++ + if declaration != nil && ast.IsVariableDeclaration(declaration) && declaration.Type() == nil && declaration.Initializer() != nil && c.isConstantReference(f.reference) && !c.depthLimitReached(&c.inlineLevel, 5) { + c.enterDepthLimit(&c.inlineLevel) result := c.narrowType(f, t, declaration.Initializer(), assumeTrue) - c.inlineLevel-- + c.inlineLevel.exit() return result } } diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 0e19c1e8358e4..f1a9454534f03 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -154,6 +154,7 @@ func (f *memoEffects) covers(deps []*memoEffects) bool { type memoState struct { pending *memoEffects // Effects not yet replayed by a check errors []*currentNodeError // Errors the computation reported at the current node; see setReported + count *instantiationCount // Instantiations the computation needed; see "Instantiation counts" } // memo is a cached result. Cached checker state must live in a memo so that @@ -184,7 +185,7 @@ func (h *memoHeader) key() memoKey { // get returns the cached result, accounting for the effects of computing it. func (m *memo[T]) get(c *Checker) T { - if c.memoActive() { + if c.observing() { c.observeCell(&m.memoHeader) } return m.memoValue @@ -198,6 +199,7 @@ func (m *memo[T]) set(c *Checker, v T) { m.logDiscard(c) } m.memoValue = v + c.linkCost(m.key()) if !c.checking { c.attachCell(&m.memoHeader) } @@ -240,6 +242,11 @@ func setIfChanged[T comparable](c *Checker, m *memo[T], v T) { // the end of a cycle: discarding an identity would let a second, distinct // result exist, and an entity can outlive the cycle in caches that are kept // while having no way to compute its parts again. +// +// Unlike set, it does not take on the work of the computation setting it (see +// linkCost): an identity is reached only through the result that created it, +// whose work is already accounted for, and the setting computation's later +// work, which would otherwise count, is unrelated. func (m *memo[T]) setIdentity(c *Checker, v T) { m.memoValue = v if !c.checking { @@ -268,9 +275,12 @@ func (m *memo[T]) setReported(c *Checker, v T, r currentNodeErrors) { //go:noinline func (m *memo[T]) logDiscard(c *Checker) { + // The work of the result is discarded with it. old := m.memoValue + oldCount := savedCountOf(c.memoStates, m.key()) c.discardLog = append(c.discardLog, discardEntry{&m.memoHeader, func() { m.memoValue = old + restoreCount(c.memoStates, m.key(), oldCount) }, false}) } @@ -337,7 +347,7 @@ type memoMap[K comparable, V any] struct { // get returns the cached result for k, accounting for the effects of // computing it. func (m *memoMap[K, V]) get(c *Checker, k K) (V, bool) { - if m.memoStates != nil && c.memoActive() { + if m.memoStates != nil && c.observing() { m.observe(c, k) } v, ok := m.memoEntries[k] @@ -383,17 +393,25 @@ func (m *memoMap[K, V]) set(c *Checker, k K, v V) { m.logDiscard(c, k) } m.setIdentity(c, k, v) + if len(c.resolutions) > 1 && !m.isOwnResolution(c, k) { + // Like memo.set; see linkCost. + if count := c.costSoFar(); count != nil { + m.state(k).count = count + } + } } //go:noinline func (m *memoMap[K, V]) logDiscard(c *Checker, k K) { old, ok := m.memoEntries[k] + oldCount := savedCountOf(m.memoStates, k) c.discardLog = append(c.discardLog, discardEntry{nil, func() { if ok { m.memoEntries[k] = old } else { delete(m.memoEntries, k) } + restoreCount(m.memoStates, k, oldCount) }, false}) } @@ -423,6 +441,24 @@ func (m *memoMap[K, V]) setIdentity(c *Checker, k K, v V) { } } +// setWithCost is set for a result whose instantiation count is count, rather +// than that of the current resolution. +func (m *memoMap[K, V]) setWithCost(c *Checker, k K, v V, count *instantiationCount) { + if c.logResults() { + m.logDiscard(c, k) + } + if m.memoEntries == nil { + m.memoEntries = make(map[K]V) + } + m.memoEntries[k] = v + if count != nil { + m.state(k).count = count + } + if c.memoTop != 0 { + c.attachState(m.state(k)) + } +} + // intern caches a result constructed from the inputs in k alone, without // consulting any cached result, so computing it has no effects to account for. func (m *memoMap[K, V]) intern(k K, v V) { @@ -443,6 +479,12 @@ func (m *memoMap[K, V]) compute(c *Checker, k K, fn func() V) V { // enter starts the computation of the result for k; see beginMemo. func (m *memoMap[K, V]) begin(c *Checker, k K) { + if c.inResolution() { + // Entering a computed result reads it. + if state := m.memoStates[k]; state != nil { + c.observeCost(state.count) + } + } outer := m.resolvingIndex(c, k) if outer != 0 { // Re-entering an entry marks the cycle circular; see reentryCircular. @@ -474,6 +516,17 @@ func (m *memoMap[K, V]) resolvingIndex(c *Checker, k K) int { panic("entry in progress without a resolution") } +// isOwnResolution reports whether the current resolution computes the entry +// for k. +func (m *memoMap[K, V]) isOwnResolution(c *Checker, k K) bool { + f := c.currentResolution() + return f.source == memoStateSource(m) && m.resolvingKeys[f.index] == k +} + +func (m *memoMap[K, V]) stateAt(i int) *memoState { + return m.state(m.resolvingKeys[i]) +} + func (m *memoMap[K, V]) popState(i int) { clear(m.resolvingKeys[i:]) m.resolvingKeys = m.resolvingKeys[:i] @@ -521,6 +574,12 @@ func (c *Checker) memoActive() bool { return !c.checking || c.memoPendingCount|c.memoErrorStates != 0 } +// observing reports whether reading a cached result must account for its +// effects or its instantiation count. +func (c *Checker) observing() bool { + return c.memoActive() || c.inResolution() +} + // beginMemo is called on entry to a memoized function whose result for this // input is cached in the memo state identified by key. It accounts for // effects recorded by a previous computation of that result, and starts a @@ -655,7 +714,8 @@ func (c *Checker) attachCell(h *memoHeader) { // observeMemo accounts for reading a memoized result without computing it. func (c *Checker) observeMemo(key memoKey) { - if !c.memoActive() { + if !c.memoActive() && !c.mayHaveCost(key) { + // Only the work of the result is accounted for, and it has none. return } if c.observeState(c.memoStates[key]) { @@ -670,6 +730,7 @@ func (c *Checker) observeState(state *memoState) bool { if state == nil { return false } + c.observeCost(state.count) if state.errors != nil { c.replayCurrentNodeErrors(state.errors) } @@ -782,6 +843,7 @@ func (c *Checker) endMemo() { func (c *Checker) endMemoUncached() { defer c.endResolution() res := c.stopEffects() + c.forgetCost() if res == nil || res.effects == nil { return } @@ -907,7 +969,7 @@ func (c *Checker) recordReferenceMark(symbol *ast.Symbol) { // pending for checking to replay. func (c *Checker) withReferenceMarks(fn func()) { debug.Assert(!c.checking && c.memoTop == 0, "withReferenceMarks inside a computation") - c.beginResolution(0, nil, 0) + c.beginNodeResolution() c.startEffects(&memoState{}) fn() f := c.stopEffects().effects @@ -1091,7 +1153,7 @@ func (c *Checker) trimDiscardLog() { // observeFlagMemo accounts for reading the flag memo identified by key. func (c *Checker) observeFlagMemo(key memoKey) { - if c.memoActive() { + if c.observing() { c.observeMemo(key) } } @@ -1310,3 +1372,37 @@ func (c *Checker) typeResolutionMemo(r *TypeResolution) *memoHeader { } return nil } + +// Instantiation limits +// +// Instantiation stops with an error when nested too deeply or after too +// many instantiations, as the instantiation is then very likely infinite. +// For the result not to depend on what was cached before, each memoized +// computation (including each cached comparison of two types) measures +// depth from where it started, whether or not it reports errors, and a +// reused result adds no depth. Chains that start a new memoized computation +// at every level are only stopped by a much larger limit on the whole +// outermost instantiation, which is only reached by runaway instantiations, +// and which does depend on what was cached before. +// +// The limit on the number of instantiations likewise applies to the work +// needed to compute the current result from scratch, estimated by an +// instantiation count of the distinct instantiations it needs, including +// those of the results it reuses (see resolutions.go). + +const ( + instantiationDepthLimit = 100 + instantiationTotalDepthLimit = 1000 + instantiationCountLimit = 5_000_000 +) + +// instantiationLimitReached reports whether a further instantiation would +// exceed a limit. +func (c *Checker) instantiationLimitReached() bool { + return c.instantiationDepthLimitReached() || c.currentResolution().count.exceedsLimit() +} + +func (c *Checker) instantiationDepthLimitReached() bool { + depth := len(c.instantiationStack) + return depth-int(c.currentResolution().depthStart) == instantiationDepthLimit || depth == instantiationTotalDepthLimit +} diff --git a/tsc/internal/checker/printer.go b/tsc/internal/checker/printer.go index b84c967883d88..7132ae615e70e 100644 --- a/tsc/internal/checker/printer.go +++ b/tsc/internal/checker/printer.go @@ -60,7 +60,7 @@ func (c *Checker) typeToStringEx(t *Type, enclosingDeclaration *ast.Node, flags // Serialization of types can lead to (lazy) resolution of members, which can cause diagnostics that again require // serialization of types. This can potentially result in infinite recursion and stack overflows. To prevent that, // after a certain number of recursive invocations the function simply returns "?". - if c.serializationLevel >= maxSerializationLevel { + if c.depthLimitReached(&c.serializationLevel, maxSerializationLevel) { return "?" } newLine := "" @@ -80,9 +80,9 @@ func (c *Checker) typeToStringEx(t *Type, enclosingDeclaration *ast.Node, flags defer func() { nodeBuilder.verbosity = oldVerbosity }() - c.serializationLevel++ + c.enterDepthLimit(&c.serializationLevel) typeNode := nodeBuilder.TypeToTypeNode(t, enclosingDeclaration, combinedFlags, nodebuilder.InternalFlagsNone, nil) - c.serializationLevel-- + c.serializationLevel.exit() if typeNode == nil { panic("should always get typenode") } diff --git a/tsc/internal/checker/relater.go b/tsc/internal/checker/relater.go index 5ebafe8235dee..f98de8c55ef1a 100644 --- a/tsc/internal/checker/relater.go +++ b/tsc/internal/checker/relater.go @@ -139,8 +139,10 @@ func (r *Relation) get(c *Checker, key CacheHashKey) RelationComparisonResult { return result } -func (r *Relation) set(c *Checker, key CacheHashKey, result RelationComparisonResult) { - r.results.set(c, key, result) +// set caches the result of a comparison whose instantiation count is count; +// see "Instantiation counts". +func (r *Relation) set(c *Checker, key CacheHashKey, result RelationComparisonResult, count *instantiationCount) { + r.results.setWithCost(c, key, result, count) } func (c *Checker) isTypeIdenticalTo(source *Type, target *Type) bool { @@ -330,7 +332,7 @@ func (c *Checker) isEnumTypeRelatedTo(source *ast.Symbol, target *ast.Symbol, er } c.enumRelation.begin(c, key) related := c.isEnumTypeRelatedToUncached(sourceSymbol, targetSymbol, errorReporter) - c.enumRelation.set(c, key, core.IfElse(related, RelationComparisonResultSucceeded, RelationComparisonResultFailed)) + c.enumRelation.setWithCost(c, key, core.IfElse(related, RelationComparisonResultSucceeded, RelationComparisonResultFailed), nil) c.endMemo() return related } @@ -418,7 +420,7 @@ func (c *Checker) checkTypeRelatedToEx( result := r.isRelatedToEx(source, target, RecursionFlagsBoth, errorNode != nil /*reportErrors*/, headMessage, IntersectionStateNone) if r.overflow { // Record this relation as having failed such that we don't attempt the overflowing operation again. - relation.set(c, id, RelationComparisonResultFailed|RelationComparisonResultComplexityOverflow) + relation.set(c, id, RelationComparisonResultFailed|RelationComparisonResultComplexityOverflow, nil) } c.endMemo() if r.overflow { @@ -1558,7 +1560,6 @@ func (c *Checker) getVariancesWorker(symbol *ast.Symbol, typeParameters []*Type) c.beginTypeResolution(symbol, TypeSystemPropertyNameVariances) guessesStart := len(c.varianceGuessed) mark := c.markDiscard() - instantiationCount := c.instantiationCount var variances []VarianceFlags for { variances = c.measureVariances(symbol, typeParameters) @@ -1585,10 +1586,6 @@ func (c *Checker) getVariancesWorker(symbol *ast.Symbol, typeParameters []*Type) entry.cycleStart = math.MaxInt entry.guessChanged = false c.discardSince(mark) - // The work of a discarded round does not count toward the limit on - // instantiations, so whether the limit is reached does not depend on - // how many rounds the circularity took to settle. - c.instantiationCount = instantiationCount } if c.varianceStack[index].cycleStart >= index { for _, s := range c.varianceGuessed[guessesStart:] { @@ -3571,6 +3568,7 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError saveReliabilityFlags := r.c.reliabilityFlags r.c.reliabilityFlags = 0 var result Ternary + var count *instantiationCount if r.expandingFlags == ExpandingFlagsBoth { if tr := r.c.tracer; tr != nil { tr.Instant(tracing.PhaseCheckTypes, "recursiveTypeRelatedTo_DepthLimit", map[string]any{"sourceId": source.id, "targetId": target.id, "depth": len(r.sourceStack), "targetDepth": len(r.targetStack)}) @@ -3581,10 +3579,12 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError if tr := r.c.tracer; tr != nil { defer tr.Push(tracing.PhaseCheckTypes, "structuredTypeRelatedTo", map[string]any{"sourceId": source.id, "targetId": target.id}, false)() } - // A cached comparison is a computation of its own; see resolution. + // The result is cached, so instantiations it needs count against + // depth limits from here, not from wherever it is first compared + // (see "Instantiation limits" in memo.go). r.c.beginResolution(0, nil, 0) result = r.structuredTypeRelatedTo(source, target, reportErrors, intersectionState) - r.c.endResolution() + count = r.c.endResolution() } propagatingVarianceFlags := r.c.reliabilityFlags r.c.reliabilityFlags |= saveReliabilityFlags @@ -3604,9 +3604,9 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError case result == TernaryFalse: // A false result goes straight into global cache (when something is false under // assumptions it will also be false without assumptions) - r.relation.set(r.c, id, RelationComparisonResultFailed|propagatingVarianceFlags) + r.relation.set(r.c, id, RelationComparisonResultFailed|propagatingVarianceFlags, count) r.relationCount-- - r.resetMaybeStack(maybeStart, propagatingVarianceFlags, false) + r.resetMaybeStack(maybeStart, propagatingVarianceFlags, false, nil) case low >= depth: // The result depends on no comparison outside of this one, so it is the // same from scratch. Comparisons that completed assuming this one hold @@ -3614,13 +3614,13 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError // scratch. Ternary.Unknown results are never recorded. switch { case result == TernaryUnknown: - r.resetMaybeStack(maybeStart, propagatingVarianceFlags, false) + r.resetMaybeStack(maybeStart, propagatingVarianceFlags, false, nil) case truncated: - r.resetMaybeStack(maybeStart, propagatingVarianceFlags, false) - r.relation.set(r.c, id, RelationComparisonResultSucceeded|propagatingVarianceFlags) + r.resetMaybeStack(maybeStart, propagatingVarianceFlags, false, nil) + r.relation.set(r.c, id, RelationComparisonResultSucceeded|propagatingVarianceFlags, count) r.relationCount-- default: - r.resetMaybeStack(maybeStart, propagatingVarianceFlags, true) + r.resetMaybeStack(maybeStart, propagatingVarianceFlags, true, count) } // The result no longer depends on any comparison in progress, so it // is reported as related, the same as when it is read from the cache. @@ -3662,13 +3662,14 @@ func (r *Relater) truncate(depth int) { } // resetMaybeStack ends the comparisons since maybeStart, recording them as -// related if markAllAsSucceeded. -func (r *Relater) resetMaybeStack(maybeStart int, propagatingVarianceFlags RelationComparisonResult, markAllAsSucceeded bool) { +// related if markAllAsSucceeded. Those recorded take the instantiation count +// count. +func (r *Relater) resetMaybeStack(maybeStart int, propagatingVarianceFlags RelationComparisonResult, markAllAsSucceeded bool, count *instantiationCount) { for i := maybeStart; i < len(r.maybeKeys); i++ { key := r.maybeKeys[i].key delete(r.maybeKeysSet, key) if markAllAsSucceeded { - r.relation.set(r.c, key, RelationComparisonResultSucceeded|propagatingVarianceFlags) + r.relation.set(r.c, key, RelationComparisonResultSucceeded|propagatingVarianceFlags, count) r.relationCount-- } } diff --git a/tsc/internal/checker/resolutions.go b/tsc/internal/checker/resolutions.go index b4d3ddd8a7be5..e0f401bfdb425 100644 --- a/tsc/internal/checker/resolutions.go +++ b/tsc/internal/checker/resolutions.go @@ -1,6 +1,8 @@ package checker import ( + "math/bits" + "github.com/microsoft/TypeScript/tsc/internal/ast" "github.com/microsoft/TypeScript/tsc/internal/debug" ) @@ -9,11 +11,18 @@ import ( // comparison, or a checked node. The innermost is the last in // Checker.resolutions, above a root resolution for work outside any of them. type resolution struct { - // The resolution computes the memo identified by key, or the entry - // source tracks at index, if either is given. + count *instantiationCount // Allocated on first use + // The instantiation count is stored for the memo identified by key, or in + // the memo state source creates for index, if either is given. key memoKey source memoStateSource index int32 + start int32 // Length of the instantiation stack on entry + // Length of the instantiation stack from which the depth limit counts: + // start for a computation, or that of the enclosing resolution for a + // node. + depthStart int32 + serial uint32 // Identifies the resolution among all entered // A query records the effects of a memoized computation, for replay by // reuse of its result; see memo.go. @@ -33,9 +42,10 @@ type resolution struct { typeResolution TypeResolution } -// A memoStateSource tracks the entries of a memo map whose computations are -// in progress. +// A memoStateSource creates the memo state of a computation in progress on +// demand, since few computations do work worth storing. type memoStateSource interface { + stateAt(i int) *memoState popState(i int) } @@ -47,33 +57,110 @@ func (c *Checker) currentResolution() *resolution { return &c.resolutions[len(c.resolutions)-1] } -// beginResolution starts a resolution for a computation of key, or of the -// entry source tracks at index, or for neither, such as for checking a node. +// beginResolution starts a resolution with an empty instantiation count for a +// computation, which also starts the depth limit of instantiations (see +// "Instantiation limits" in memo.go). func (c *Checker) beginResolution(key memoKey, source memoStateSource, index int) { + if key != 0 && c.inResolution() { + // Entering a computed result reads it. + c.observeCost(c.storedCost(key)) + } if key != 0 { c.beginResolving(key) } + base := int32(len(c.instantiationStack)) + c.appendResolution(key, source, index, base) +} + +// beginNodeResolution starts a resolution for checking a node, which +// continues the depth limit of the enclosing resolution. +func (c *Checker) beginNodeResolution() { + c.appendResolution(0, nil, 0, c.currentResolution().depthStart) +} + +func (c *Checker) appendResolution(key memoKey, source memoStateSource, index int, depthBase int32) { + c.resolutionSerials++ c.resolutions = append(c.resolutions, resolution{ - key: key, - source: source, - index: int32(index), + key: key, + source: source, + index: int32(index), + start: int32(len(c.instantiationStack)), + depthStart: depthBase, + serial: c.resolutionSerials, }) } -// endResolution finishes the current resolution. -func (c *Checker) endResolution() { +// endResolution finishes the current resolution, returning its instantiation +// count, or nil if it did no instantiations. +func (c *Checker) endResolution() *instantiationCount { n := len(c.resolutions) - 1 f := &c.resolutions[n] debug.Assert(!f.isTypeResolution, "resolution left on the stack") c.endResolving(f, n) - if f.source != nil { - f.source.popState(int(f.index)) + count := f.count + if count != nil || f.source != nil { + c.finishResolution(f) } c.resolutions[n] = resolution{} c.resolutions = c.resolutions[:n] if c.circularityStart > n { c.endCircularity() } + if count != nil { + c.observeCost(count) + } + return count +} + +// finishResolution stores the instantiation count of a resolution for the +// results it computed. +func (c *Checker) finishResolution(f *resolution) { + if count := f.count; count != nil { + var state *memoState + if f.source != nil { + state = f.source.stateAt(int(f.index)) + } else if f.key != 0 { + state = c.memoState(f.key) + c.markCost(f.key) + } + if state != nil { + if state.count != nil { + count.merge(state.count) + } + state.count = count + } + } + if f.source != nil { + f.source.popState(int(f.index)) + } +} + +// savedCountOf returns the instantiation count stored in the memo state for +// k, so that discarding a result can discard the count stored for it since. +func savedCountOf[K comparable](states map[K]*memoState, k K) *instantiationCount { + if s := states[k]; s != nil { + return s.count + } + return nil +} + +// restoreCount makes count the instantiation count stored in the memo state +// for k, if it has one. +func restoreCount[K comparable](states map[K]*memoState, k K, count *instantiationCount) { + if s := states[k]; s != nil { + s.count = count + } +} + +// forgetCost makes the current resolution store its instantiation count for +// no result, for a computation that did not cache its result. +func (c *Checker) forgetCost() { + f := c.currentResolution() + if f.source != nil { + f.source.popState(int(f.index)) + } + c.endResolving(f, len(c.resolutions)-1) + f.key, f.source = 0, nil } // resolvingIndex returns 1 + the index in resolutions of the outermost @@ -108,3 +195,158 @@ func (c *Checker) endResolving(f *resolution, n int) { delete(c.resolving, f.key) } } + +// inResolution reports whether an instantiation of the current resolution is +// in progress, so that results it reads are part of its work. +func (c *Checker) inResolution() bool { + return len(c.instantiationStack) > int(c.currentResolution().start) +} + +// observeCost accounts for the work of a result read by the current +// resolution. +func (c *Checker) observeCost(count *instantiationCount) { + if count == nil || !c.inResolution() { + return + } + f := c.currentResolution() + if count == f.count { + return + } + if f.count == nil { + f.count = newInstantiationCount() + } + f.count.merge(count) +} + +func (c *Checker) addInstantiation(h uint64) { + f := c.currentResolution() + if f.count == nil { + f.count = newInstantiationCount() + } + f.count.add(h) +} + +// linkCost gives a memo set outside a computation of its own the +// instantiation count of the current resolution so far. Recomputing the memo +// from scratch repeats those instantiations, but not those the resolution goes +// on to do after setting it. +func (c *Checker) linkCost(key memoKey) { + if len(c.resolutions) <= 1 { + return + } + if key == c.currentResolution().key { + return + } + if count := c.costSoFar(); count != nil { + c.memoState(key).count = count + c.markCost(key) + } +} + +// costSoFar returns a copy of the instantiation count of the current +// resolution so far, or nil if it did no instantiations. +func (c *Checker) costSoFar() *instantiationCount { + f := c.currentResolution() + if f.count != nil { + count := *f.count + return &count + } + return nil +} + +func (c *Checker) storedCost(key memoKey) *instantiationCount { + if !c.mayHaveCost(key) { + return nil + } + state := c.memoStates[key] + if state == nil { + return nil + } + return state.count +} + +// The work filter is a set of the memo keys whose memo states may store work, +// so that reading a result without effects to account for can skip looking up +// its memo state. Most reads within computations only account for work, and +// most results need none. + +const costFilterBits = 22 + +func costFilterIndex(key memoKey) uint64 { + return uint64(key) * 0x9E3779B97F4A7C15 >> (64 - costFilterBits) +} + +func (c *Checker) markCost(key memoKey) { + if c.costFilter == nil { + c.costFilter = make([]uint64, 1< old { + s.inverse -= 1 << (instantiationCountMaxRank - old) + s.inverse += 1 << (instantiationCountMaxRank - rank) + s.registers[i] = rank + } +} + +func (s *instantiationCount) add(h uint64) { + rank := uint8(bits.LeadingZeros64(h<>(64-instantiationCountIndexBits), min(rank, instantiationCountMaxRank)) +} + +func (s *instantiationCount) merge(other *instantiationCount) { + for i, rank := range other.registers { + s.raise(uint64(i), rank) + } +} + +// exceedsLimit reports whether the estimate reaches instantiationCountLimit. +func (s *instantiationCount) exceedsLimit() bool { + return s != nil && s.inverse <= instantiationCountThreshold +} diff --git a/tsc/internal/checker/typehash.go b/tsc/internal/checker/typehash.go new file mode 100644 index 0000000000000..6e4e08a449272 --- /dev/null +++ b/tsc/internal/checker/typehash.go @@ -0,0 +1,328 @@ +package checker + +import ( + "math" + + "github.com/microsoft/TypeScript/tsc/internal/ast" + "github.com/microsoft/TypeScript/tsc/internal/jsnum" + "github.com/zeebo/xxh3" +) + +// Structural hashes +// +// A structural hash identifies a type, mapper, or symbol by what it was +// constructed from: declarations by file and position, and types by their +// kind and constituents. Unlike type IDs, it does not depend on the order in +// which types were created, so anything derived from it is the same whatever +// was checked before. Distinct entities may share a hash; uses must only +// lose precision when they do. + +func hashFinal(x uint64) uint64 { + x ^= x >> 30 + x *= 0xbf58476d1ce4e5b9 + x ^= x >> 27 + x *= 0x94d049bb133111eb + x ^= x >> 31 + return x +} + +func hashCombine(h uint64, v uint64) uint64 { + return hashFinal(h*0x9e3779b97f4a7c15 ^ v) +} + +// typeHashDepth bounds how deep a structural hash looks into a type. Types +// that differ only deeper share a hash. Bounding the depth rather than +// stopping at cycles keeps the hash of a type the same wherever a cycle +// through it is entered, and its cost linear. +const typeHashDepth = 4 + +func (c *Checker) typeHash(t *Type) uint64 { + return c.typeHashAt(t, typeHashDepth) +} + +// typeHashAt returns the structural hash of t, looking depth levels into it. +func (c *Checker) typeHashAt(t *Type, depth int) uint64 { + if t == nil { + return 0 + } + h := hashCombine(hashCombine(uint64(t.kind), uint64(t.flags)), c.symbolHash(t.symbol)) + if depth == 0 { + return h + } + entry := c.typeHashes[t] + if entry != nil && entry[depth-1] != 0 { + return entry[depth-1] + } + h = hashCombine(h, c.typeHashWorker(t, depth-1)) + if t.alias != nil { + h = hashCombine(h, c.symbolHash(t.alias.symbol)) + h = c.hashTypes(h, t.alias.typeArguments, depth-1) + } + // Zero marks an absent entry. + h |= 1 + if entry == nil { + // The worker may have added an entry for t at another depth. + if entry = c.typeHashes[t]; entry == nil { + entry = new([typeHashDepth]uint64) + if c.typeHashes == nil { + c.typeHashes = make(map[*Type]*[typeHashDepth]uint64) + } + c.typeHashes[t] = entry + } + } + entry[depth-1] = h + return h +} + +func (c *Checker) hashTypes(h uint64, types []*Type, depth int) uint64 { + h = hashCombine(h, uint64(len(types))) + for _, t := range types { + h = hashCombine(h, c.typeHashAt(t, depth)) + } + return h +} + +func (c *Checker) typeHashWorker(t *Type, depth int) uint64 { + h := hashCombine(uint64(t.kind), uint64(t.flags)) + switch t.kind { + case typeKindIntrinsic: + h = hashCombine(h, xxh3.HashString(t.AsIntrinsicType().intrinsicName)) + h = hashCombine(h, uint64(t.objectFlags)) + case typeKindLiteral: + lit := t.AsLiteralType() + h = hashCombine(h, hashLiteralValue(lit.value)) + h = hashCombine(h, c.symbolHash(t.symbol)) + if lit.freshType == t { + h = hashCombine(h, 1) + } + case typeKindUniqueESSymbol: + h = hashCombine(h, c.symbolHash(t.symbol)) + case typeKindTypeParameter: + tp := t.AsTypeParameter() + h = hashCombine(h, c.symbolHash(t.symbol)) + if tp.isThisType { + h = hashCombine(h, 1) + } + if tp.isDistributed { + h = hashCombine(h, 2) + } + if tp.target != nil { + h = hashCombine(h, c.typeHashAt(tp.target, depth)) + h = hashCombine(h, c.mapperHashAt(tp.mapper, depth)) + } + case typeKindIndex: + idx := t.AsIndexType() + h = hashCombine(h, c.typeHashAt(idx.target, depth)) + h = hashCombine(h, uint64(idx.indexFlags)) + case typeKindIndexedAccess: + ia := t.AsIndexedAccessType() + h = hashCombine(h, c.typeHashAt(ia.objectType, depth)) + h = hashCombine(h, c.typeHashAt(ia.indexType, depth)) + h = hashCombine(h, uint64(ia.accessFlags)) + case typeKindTemplateLiteral: + tl := t.AsTemplateLiteralType() + for _, text := range tl.texts { + h = hashCombine(h, xxh3.HashString(text)) + } + h = c.hashTypes(h, tl.types, depth) + case typeKindStringMapping: + h = hashCombine(h, c.symbolHash(t.symbol)) + h = hashCombine(h, c.typeHashAt(t.AsStringMappingType().target, depth)) + case typeKindSubstitution: + st := t.AsSubstitutionType() + h = hashCombine(h, c.typeHashAt(st.baseType, depth)) + h = hashCombine(h, c.typeHashAt(st.constraint, depth)) + case typeKindConditional: + ct := t.AsConditionalType() + h = hashCombine(h, c.hashNode(ct.root.node.AsNode())) + h = hashCombine(h, c.mapperHashAt(ct.mapper, depth)) + case typeKindUnion, typeKindIntersection: + // Constituents are ordered by type ID, so they are combined in a way + // that does not depend on their order. + var sum uint64 + for _, m := range t.AsUnionOrIntersectionType().types { + sum += hashFinal(c.typeHashAt(m, depth)) + } + h = hashCombine(h, sum) + case typeKindTuple: + tt := t.AsTupleType() + for _, info := range tt.elementInfos { + h = hashCombine(h, uint64(info.flags)) + h = hashCombine(h, c.hashNode(info.labeledDeclaration)) + } + if tt.readonly { + h = hashCombine(h, 1) + } + case typeKindReverseMapped: + rm := t.AsReverseMappedType() + h = hashCombine(h, c.typeHashAt(rm.source, depth)) + h = hashCombine(h, c.typeHashAt(rm.mappedType, depth)) + h = hashCombine(h, c.typeHashAt(rm.constraintType, depth)) + case typeKindEvolvingArray: + h = hashCombine(h, c.typeHashAt(t.AsEvolvingArrayType().elementType, depth)) + case typeKindTypeReference: + ref := t.AsTypeReference() + h = hashCombine(h, uint64(t.objectFlags)) + h = hashCombine(h, c.typeHashAt(ref.target, depth)) + if ref.node != nil { + h = hashCombine(h, c.hashNode(ref.node)) + h = hashCombine(h, c.mapperHashAt(ref.mapper, depth)) + } else { + h = c.hashTypes(h, ref.resolvedTypeArguments.peek(), depth) + } + default: + // Interfaces, anonymous, mapped, and instantiation expression types. + h = hashCombine(h, uint64(t.objectFlags&ObjectFlagsObjectTypeKindMask)) + h = hashCombine(h, c.symbolHash(t.symbol)) + if t.kind == typeKindMapped { + h = hashCombine(h, c.hashNode(t.AsMappedType().declaration.AsNode())) + } + if t.kind == typeKindInstantiationExpression { + h = hashCombine(h, c.hashNode(t.AsInstantiationExpressionType().node)) + } + if obj := t.AsObjectType(); obj != nil && obj.target != nil { + h = hashCombine(h, c.typeHashAt(obj.target, depth)) + h = hashCombine(h, c.mapperHashAt(obj.mapper, depth)) + } + } + return h +} + +func hashLiteralValue(value any) uint64 { + switch v := value.(type) { + case string: + return hashCombine(1, xxh3.HashString(v)) + case jsnum.Number: + return hashCombine(2, math.Float64bits(float64(v))) + case bool: + if v { + return 3 + } + return 4 + case jsnum.PseudoBigInt: + h := hashCombine(5, xxh3.HashString(v.Base10Value)) + if v.Negative { + h = hashCombine(h, 1) + } + return h + } + return 0 +} + +func (c *Checker) hashNode(node *ast.Node) uint64 { + if node == nil { + return 0 + } + h := hashCombine(uint64(node.Kind), uint64(node.Pos())) + if file := ast.GetSourceFileOfNode(node); file != nil { + h = hashCombine(h, c.fileHash(file)) + } + return h +} + +// fileHash identifies a file by its text rather than its path, so that +// hashes do not depend on where a project is located. +func (c *Checker) fileHash(file *ast.SourceFile) uint64 { + if h, ok := c.fileHashes[file]; ok { + return h + } + h := xxh3.HashString(file.Text()) + if c.fileHashes == nil { + c.fileHashes = make(map[*ast.SourceFile]uint64) + } + c.fileHashes[file] = h + return h +} + +func (c *Checker) symbolHash(s *ast.Symbol) uint64 { + if s == nil { + return 0 + } + if h, ok := c.symbolHashes[s]; ok { + return h + } + h := hashCombine(xxh3.HashString(s.Name()), uint64(s.Flags())) + if decls := s.Declarations(); len(decls) != 0 { + h = hashCombine(h, c.hashNode(decls[0])) + } else if s.Parent() != nil { + h = hashCombine(h, c.symbolHash(s.Parent())) + } + if c.symbolHashes == nil { + c.symbolHashes = make(map[*ast.Symbol]uint64) + } + c.symbolHashes[s] = h + return h +} + +func (c *Checker) mapperHash(m *TypeMapper) uint64 { + // Mappers are immutable, and one mapper is typically used for many + // instantiations, so its hash is computed once. + if h, ok := c.mapperHashes[m]; ok { + return h + } + h := c.mapperHashAt(m, typeHashDepth) + if c.mapperHashes == nil { + c.mapperHashes = make(map[*TypeMapper]uint64) + } + c.mapperHashes[m] = h + return h +} + +// mapperHashAt returns the structural hash of m, looking depth levels into +// the types it maps. +func (c *Checker) mapperHashAt(m *TypeMapper, depth int) uint64 { + if m == nil { + return 0 + } + h := uint64(m.kind) + if depth == 0 { + return h + } + switch m.kind { + case TypeMapperKindSimple: + sm := castTypeMapper[SimpleTypeMapper](m, TypeMapperKindSimple) + h = hashCombine(h, c.typeHashAt(sm.source, depth)) + h = hashCombine(h, c.typeHashAt(sm.target, depth)) + case TypeMapperKindArray: + am := castTypeMapper[ArrayTypeMapper](m, TypeMapperKindArray) + h = c.hashTypes(h, am.sources, depth) + h = c.hashTypes(h, am.targets, depth) + case TypeMapperKindArrayToSingle: + am := castTypeMapper[ArrayToSingleTypeMapper](m, TypeMapperKindArrayToSingle) + h = c.hashTypes(h, am.sources, depth) + h = hashCombine(h, c.typeHashAt(am.target, depth)) + case TypeMapperKindDeferred: + h = c.hashTypes(h, castTypeMapper[DeferredTypeMapper](m, TypeMapperKindDeferred).sources, depth) + case TypeMapperKindFunction: + // Function mappers are the checker's fixed mappers. + switch m { + case c.uniqueLiteralMapper: + h = hashCombine(h, 1) + case c.reportUnreliableMapper: + h = hashCombine(h, 2) + case c.reportUnmeasurableMapper: + h = hashCombine(h, 3) + case c.restrictiveMapper: + h = hashCombine(h, 4) + case c.permissiveMapper: + h = hashCombine(h, 5) + } + case TypeMapperKindMerged: + mm := castTypeMapper[MergedTypeMapper](m, TypeMapperKindMerged) + h = hashCombine(h, c.mapperHashAt(mm.m1, depth-1)) + h = hashCombine(h, c.mapperHashAt(mm.m2, depth-1)) + case TypeMapperKindComposite: + cm := castTypeMapper[CompositeTypeMapper](m, TypeMapperKindComposite) + h = hashCombine(h, c.mapperHashAt(cm.m1, depth-1)) + h = hashCombine(h, c.mapperHashAt(cm.m2, depth-1)) + case TypeMapperKindInference: + im := castTypeMapper[InferenceTypeMapper](m, TypeMapperKindInference) + for _, inference := range im.n.inferences { + h = hashCombine(h, c.typeHashAt(inference.typeParameter, depth)) + } + if im.fixing { + h = hashCombine(h, 1) + } + } + return h +} diff --git a/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.errors.txt b/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.errors.txt index 267ec02b4f194..798a91745a9c4 100644 --- a/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.errors.txt @@ -1,26 +1,28 @@ -instantiationLimitsCheckOrder.ts(11,16): error TS2589: Type instantiation is excessively deep and possibly infinite. +instantiationLimitsCheckOrder.ts(10,16): error TS2589: Type instantiation is excessively deep and possibly infinite. +instantiationLimitsCheckOrder.ts(16,17): error TS2589: Type instantiation is excessively deep and possibly infinite. -==== instantiationLimitsCheckOrder.ts (1 errors) ==== - // Instantiation limits must not depend on what was instantiated before. - // This holds for the depth limit, but not yet for the limit on the number - // of instantiations, which Wide2All only reaches if Wide2Tail was not - // checked first. +==== instantiationLimitsCheckOrder.ts (2 errors) ==== + // Instantiation limits must not depend on what was instantiated before: + // Wide2All reaches the limit on the number of instantiations like WideAll, + // although Wide2Tail already performed half of them. type D = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; type K = `${D}${D}${D}`; - // Over five million instantiations for one statement. - type Wide = N["length"] extends 6 ? I : { [J in K]: Wide<[...N, 0], [J, I][0]> }[K]; + // Several million instantiations, well over the limit, for one statement. + type Wide = N["length"] extends 8 ? I : { [J in K]: Wide<[...N, 0], [J, I][0]> }[K]; type WideAll = Wide<[], "">; ~~~~~~~~~~~~ !!! error TS2589: Type instantiation is excessively deep and possibly infinite. // The same, but half of the instantiations already happened for another // statement. - type Wide2 = N["length"] extends 6 ? I : { [J in K]: Wide2<[...N, 0], [J, I][0]> }[K]; - type Wide2Tail = Wide2<[0, 0, 0], "">; + type Wide2 = N["length"] extends 8 ? I : { [J in K]: Wide2<[...N, 0], [J, I][0]> }[K]; + type Wide2Tail = Wide2<[0, 0, 0, 0], "">; type Wide2All = Wide2<[], "">; + ~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. // Over a hundred nested instantiations, half of which already happened for // another statement. diff --git a/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.symbols b/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.symbols index addc79a296cf8..ce51d4d0cffbf 100644 --- a/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.symbols +++ b/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.symbols @@ -1,78 +1,77 @@ //// [tests/cases/compiler/instantiationLimitsCheckOrder.ts] //// === instantiationLimitsCheckOrder.ts === -// Instantiation limits must not depend on what was instantiated before. -// This holds for the depth limit, but not yet for the limit on the number -// of instantiations, which Wide2All only reaches if Wide2Tail was not -// checked first. +// Instantiation limits must not depend on what was instantiated before: +// Wide2All reaches the limit on the number of instantiations like WideAll, +// although Wide2Tail already performed half of them. type D = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; >D : Symbol(D, Decl(instantiationLimitsCheckOrder.ts, 0, 0)) type K = `${D}${D}${D}`; ->K : Symbol(K, Decl(instantiationLimitsCheckOrder.ts, 5, 47)) +>K : Symbol(K, Decl(instantiationLimitsCheckOrder.ts, 4, 47)) >D : Symbol(D, Decl(instantiationLimitsCheckOrder.ts, 0, 0)) >D : Symbol(D, Decl(instantiationLimitsCheckOrder.ts, 0, 0)) >D : Symbol(D, Decl(instantiationLimitsCheckOrder.ts, 0, 0)) -// Over five million instantiations for one statement. -type Wide = N["length"] extends 6 ? I : { [J in K]: Wide<[...N, 0], [J, I][0]> }[K]; ->Wide : Symbol(Wide, Decl(instantiationLimitsCheckOrder.ts, 6, 24)) ->N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 9, 10)) ->I : Symbol(I, Decl(instantiationLimitsCheckOrder.ts, 9, 24)) ->N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 9, 10)) ->I : Symbol(I, Decl(instantiationLimitsCheckOrder.ts, 9, 24)) ->J : Symbol(J, Decl(instantiationLimitsCheckOrder.ts, 9, 61)) ->K : Symbol(K, Decl(instantiationLimitsCheckOrder.ts, 5, 47)) ->Wide : Symbol(Wide, Decl(instantiationLimitsCheckOrder.ts, 6, 24)) ->N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 9, 10)) ->J : Symbol(J, Decl(instantiationLimitsCheckOrder.ts, 9, 61)) ->I : Symbol(I, Decl(instantiationLimitsCheckOrder.ts, 9, 24)) ->K : Symbol(K, Decl(instantiationLimitsCheckOrder.ts, 5, 47)) +// Several million instantiations, well over the limit, for one statement. +type Wide = N["length"] extends 8 ? I : { [J in K]: Wide<[...N, 0], [J, I][0]> }[K]; +>Wide : Symbol(Wide, Decl(instantiationLimitsCheckOrder.ts, 5, 24)) +>N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 8, 10)) +>I : Symbol(I, Decl(instantiationLimitsCheckOrder.ts, 8, 24)) +>N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 8, 10)) +>I : Symbol(I, Decl(instantiationLimitsCheckOrder.ts, 8, 24)) +>J : Symbol(J, Decl(instantiationLimitsCheckOrder.ts, 8, 61)) +>K : Symbol(K, Decl(instantiationLimitsCheckOrder.ts, 4, 47)) +>Wide : Symbol(Wide, Decl(instantiationLimitsCheckOrder.ts, 5, 24)) +>N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 8, 10)) +>J : Symbol(J, Decl(instantiationLimitsCheckOrder.ts, 8, 61)) +>I : Symbol(I, Decl(instantiationLimitsCheckOrder.ts, 8, 24)) +>K : Symbol(K, Decl(instantiationLimitsCheckOrder.ts, 4, 47)) type WideAll = Wide<[], "">; ->WideAll : Symbol(WideAll, Decl(instantiationLimitsCheckOrder.ts, 9, 102)) ->Wide : Symbol(Wide, Decl(instantiationLimitsCheckOrder.ts, 6, 24)) +>WideAll : Symbol(WideAll, Decl(instantiationLimitsCheckOrder.ts, 8, 102)) +>Wide : Symbol(Wide, Decl(instantiationLimitsCheckOrder.ts, 5, 24)) // The same, but half of the instantiations already happened for another // statement. -type Wide2 = N["length"] extends 6 ? I : { [J in K]: Wide2<[...N, 0], [J, I][0]> }[K]; ->Wide2 : Symbol(Wide2, Decl(instantiationLimitsCheckOrder.ts, 10, 28)) ->N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 14, 11)) ->I : Symbol(I, Decl(instantiationLimitsCheckOrder.ts, 14, 25)) ->N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 14, 11)) ->I : Symbol(I, Decl(instantiationLimitsCheckOrder.ts, 14, 25)) ->J : Symbol(J, Decl(instantiationLimitsCheckOrder.ts, 14, 62)) ->K : Symbol(K, Decl(instantiationLimitsCheckOrder.ts, 5, 47)) ->Wide2 : Symbol(Wide2, Decl(instantiationLimitsCheckOrder.ts, 10, 28)) ->N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 14, 11)) ->J : Symbol(J, Decl(instantiationLimitsCheckOrder.ts, 14, 62)) ->I : Symbol(I, Decl(instantiationLimitsCheckOrder.ts, 14, 25)) ->K : Symbol(K, Decl(instantiationLimitsCheckOrder.ts, 5, 47)) +type Wide2 = N["length"] extends 8 ? I : { [J in K]: Wide2<[...N, 0], [J, I][0]> }[K]; +>Wide2 : Symbol(Wide2, Decl(instantiationLimitsCheckOrder.ts, 9, 28)) +>N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 13, 11)) +>I : Symbol(I, Decl(instantiationLimitsCheckOrder.ts, 13, 25)) +>N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 13, 11)) +>I : Symbol(I, Decl(instantiationLimitsCheckOrder.ts, 13, 25)) +>J : Symbol(J, Decl(instantiationLimitsCheckOrder.ts, 13, 62)) +>K : Symbol(K, Decl(instantiationLimitsCheckOrder.ts, 4, 47)) +>Wide2 : Symbol(Wide2, Decl(instantiationLimitsCheckOrder.ts, 9, 28)) +>N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 13, 11)) +>J : Symbol(J, Decl(instantiationLimitsCheckOrder.ts, 13, 62)) +>I : Symbol(I, Decl(instantiationLimitsCheckOrder.ts, 13, 25)) +>K : Symbol(K, Decl(instantiationLimitsCheckOrder.ts, 4, 47)) -type Wide2Tail = Wide2<[0, 0, 0], "">; ->Wide2Tail : Symbol(Wide2Tail, Decl(instantiationLimitsCheckOrder.ts, 14, 104)) ->Wide2 : Symbol(Wide2, Decl(instantiationLimitsCheckOrder.ts, 10, 28)) +type Wide2Tail = Wide2<[0, 0, 0, 0], "">; +>Wide2Tail : Symbol(Wide2Tail, Decl(instantiationLimitsCheckOrder.ts, 13, 104)) +>Wide2 : Symbol(Wide2, Decl(instantiationLimitsCheckOrder.ts, 9, 28)) type Wide2All = Wide2<[], "">; ->Wide2All : Symbol(Wide2All, Decl(instantiationLimitsCheckOrder.ts, 15, 38)) ->Wide2 : Symbol(Wide2, Decl(instantiationLimitsCheckOrder.ts, 10, 28)) +>Wide2All : Symbol(Wide2All, Decl(instantiationLimitsCheckOrder.ts, 14, 41)) +>Wide2 : Symbol(Wide2, Decl(instantiationLimitsCheckOrder.ts, 9, 28)) // Over a hundred nested instantiations, half of which already happened for // another statement. type Deep = N["length"] extends 60 ? never : Deep<[...N, 0]> | N["length"]; ->Deep : Symbol(Deep, Decl(instantiationLimitsCheckOrder.ts, 16, 30)) ->N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 20, 10)) ->N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 20, 10)) ->Deep : Symbol(Deep, Decl(instantiationLimitsCheckOrder.ts, 16, 30)) ->N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 20, 10)) ->N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 20, 10)) +>Deep : Symbol(Deep, Decl(instantiationLimitsCheckOrder.ts, 15, 30)) +>N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 19, 10)) +>N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 19, 10)) +>Deep : Symbol(Deep, Decl(instantiationLimitsCheckOrder.ts, 15, 30)) +>N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 19, 10)) +>N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 19, 10)) type DeepTail = Deep<[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]>; ->DeepTail : Symbol(DeepTail, Decl(instantiationLimitsCheckOrder.ts, 20, 90)) ->Deep : Symbol(Deep, Decl(instantiationLimitsCheckOrder.ts, 16, 30)) +>DeepTail : Symbol(DeepTail, Decl(instantiationLimitsCheckOrder.ts, 19, 90)) +>Deep : Symbol(Deep, Decl(instantiationLimitsCheckOrder.ts, 15, 30)) type DeepAll = Deep<[]>; ->DeepAll : Symbol(DeepAll, Decl(instantiationLimitsCheckOrder.ts, 21, 113)) ->Deep : Symbol(Deep, Decl(instantiationLimitsCheckOrder.ts, 16, 30)) +>DeepAll : Symbol(DeepAll, Decl(instantiationLimitsCheckOrder.ts, 20, 113)) +>Deep : Symbol(Deep, Decl(instantiationLimitsCheckOrder.ts, 15, 30)) diff --git a/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.types b/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.types index 821c937b08c1d..a264ec296ddc5 100644 --- a/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.types +++ b/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.types @@ -1,10 +1,9 @@ //// [tests/cases/compiler/instantiationLimitsCheckOrder.ts] //// === instantiationLimitsCheckOrder.ts === -// Instantiation limits must not depend on what was instantiated before. -// This holds for the depth limit, but not yet for the limit on the number -// of instantiations, which Wide2All only reaches if Wide2Tail was not -// checked first. +// Instantiation limits must not depend on what was instantiated before: +// Wide2All reaches the limit on the number of instantiations like WideAll, +// although Wide2Tail already performed half of them. type D = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; >D : D @@ -12,8 +11,8 @@ type D = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; type K = `${D}${D}${D}`; >K : "000" | "001" | "002" | "003" | "004" | "005" | "006" | "007" | "008" | "009" | "010" | "011" | "012" | "013" | "014" | "015" | "016" | "017" | "018" | "019" | "020" | "021" | "022" | "023" | "024" | "025" | "026" | "027" | "028" | "029" | "030" | "031" | "032" | "033" | "034" | "035" | "036" | "037" | "038" | "039" | "040" | "041" | "042" | "043" | "044" | "045" | "046" | "047" | "048" | "049" | "050" | "051" | "052" | "053" | "054" | "055" | "056" | "057" | "058" | "059" | "060" | "061" | "062" | "063" | "064" | "065" | "066" | "067" | "068" | "069" | "070" | "071" | "072" | "073" | "074" | "075" | "076" | "077" | "078" | "079" | "080" | "081" | "082" | "083" | "084" | "085" | "086" | "087" | "088" | "089" | "090" | "091" | "092" | "093" | "094" | "095" | "096" | "097" | "098" | "099" | "100" | "101" | "102" | "103" | "104" | "105" | "106" | "107" | "108" | "109" | "110" | "111" | "112" | "113" | "114" | "115" | "116" | "117" | "118" | "119" | "120" | "121" | "122" | "123" | "124" | "125" | "126" | "127" | "128" | "129" | "130" | "131" | "132" | "133" | "134" | "135" | "136" | "137" | "138" | "139" | "140" | "141" | "142" | "143" | "144" | "145" | "146" | "147" | "148" | "149" | "150" | "151" | "152" | "153" | "154" | "155" | "156" | "157" | "158" | "159" | "160" | "161" | "162" | "163" | "164" | "165" | "166" | "167" | "168" | "169" | "170" | "171" | "172" | "173" | "174" | "175" | "176" | "177" | "178" | "179" | "180" | "181" | "182" | "183" | "184" | "185" | "186" | "187" | "188" | "189" | "190" | "191" | "192" | "193" | "194" | "195" | "196" | "197" | "198" | "199" | "200" | "201" | "202" | "203" | "204" | "205" | "206" | "207" | "208" | "209" | "210" | "211" | "212" | "213" | "214" | "215" | "216" | "217" | "218" | "219" | "220" | "221" | "222" | "223" | "224" | "225" | "226" | "227" | "228" | "229" | "230" | "231" | "232" | "233" | "234" | "235" | "236" | "237" | "238" | "239" | "240" | "241" | "242" | "243" | "244" | "245" | "246" | "247" | "248" | "249" | "250" | "251" | "252" | "253" | "254" | "255" | "256" | "257" | "258" | "259" | "260" | "261" | "262" | "263" | "264" | "265" | "266" | "267" | "268" | "269" | "270" | "271" | "272" | "273" | "274" | "275" | "276" | "277" | "278" | "279" | "280" | "281" | "282" | "283" | "284" | "285" | "286" | "287" | "288" | "289" | "290" | "291" | "292" | "293" | "294" | "295" | "296" | "297" | "298" | "299" | "300" | "301" | "302" | "303" | "304" | "305" | "306" | "307" | "308" | "309" | "310" | "311" | "312" | "313" | "314" | "315" | "316" | "317" | "318" | "319" | "320" | "321" | "322" | "323" | "324" | "325" | "326" | "327" | "328" | "329" | "330" | "331" | "332" | "333" | "334" | "335" | "336" | "337" | "338" | "339" | "340" | "341" | "342" | "343" | "344" | "345" | "346" | "347" | "348" | "349" | "350" | "351" | "352" | "353" | "354" | "355" | "356" | "357" | "358" | "359" | "360" | "361" | "362" | "363" | "364" | "365" | "366" | "367" | "368" | "369" | "370" | "371" | "372" | "373" | "374" | "375" | "376" | "377" | "378" | "379" | "380" | "381" | "382" | "383" | "384" | "385" | "386" | "387" | "388" | "389" | "390" | "391" | "392" | "393" | "394" | "395" | "396" | "397" | "398" | "399" | "400" | "401" | "402" | "403" | "404" | "405" | "406" | "407" | "408" | "409" | "410" | "411" | "412" | "413" | "414" | "415" | "416" | "417" | "418" | "419" | "420" | "421" | "422" | "423" | "424" | "425" | "426" | "427" | "428" | "429" | "430" | "431" | "432" | "433" | "434" | "435" | "436" | "437" | "438" | "439" | "440" | "441" | "442" | "443" | "444" | "445" | "446" | "447" | "448" | "449" | "450" | "451" | "452" | "453" | "454" | "455" | "456" | "457" | "458" | "459" | "460" | "461" | "462" | "463" | "464" | "465" | "466" | "467" | "468" | "469" | "470" | "471" | "472" | "473" | "474" | "475" | "476" | "477" | "478" | "479" | "480" | "481" | "482" | "483" | "484" | "485" | "486" | "487" | "488" | "489" | "490" | "491" | "492" | "493" | "494" | "495" | "496" | "497" | "498" | "499" | "500" | "501" | "502" | "503" | "504" | "505" | "506" | "507" | "508" | "509" | "510" | "511" | "512" | "513" | "514" | "515" | "516" | "517" | "518" | "519" | "520" | "521" | "522" | "523" | "524" | "525" | "526" | "527" | "528" | "529" | "530" | "531" | "532" | "533" | "534" | "535" | "536" | "537" | "538" | "539" | "540" | "541" | "542" | "543" | "544" | "545" | "546" | "547" | "548" | "549" | "550" | "551" | "552" | "553" | "554" | "555" | "556" | "557" | "558" | "559" | "560" | "561" | "562" | "563" | "564" | "565" | "566" | "567" | "568" | "569" | "570" | "571" | "572" | "573" | "574" | "575" | "576" | "577" | "578" | "579" | "580" | "581" | "582" | "583" | "584" | "585" | "586" | "587" | "588" | "589" | "590" | "591" | "592" | "593" | "594" | "595" | "596" | "597" | "598" | "599" | "600" | "601" | "602" | "603" | "604" | "605" | "606" | "607" | "608" | "609" | "610" | "611" | "612" | "613" | "614" | "615" | "616" | "617" | "618" | "619" | "620" | "621" | "622" | "623" | "624" | "625" | "626" | "627" | "628" | "629" | "630" | "631" | "632" | "633" | "634" | "635" | "636" | "637" | "638" | "639" | "640" | "641" | "642" | "643" | "644" | "645" | "646" | "647" | "648" | "649" | "650" | "651" | "652" | "653" | "654" | "655" | "656" | "657" | "658" | "659" | "660" | "661" | "662" | "663" | "664" | "665" | "666" | "667" | "668" | "669" | "670" | "671" | "672" | "673" | "674" | "675" | "676" | "677" | "678" | "679" | "680" | "681" | "682" | "683" | "684" | "685" | "686" | "687" | "688" | "689" | "690" | "691" | "692" | "693" | "694" | "695" | "696" | "697" | "698" | "699" | "700" | "701" | "702" | "703" | "704" | "705" | "706" | "707" | "708" | "709" | "710" | "711" | "712" | "713" | "714" | "715" | "716" | "717" | "718" | "719" | "720" | "721" | "722" | "723" | "724" | "725" | "726" | "727" | "728" | "729" | "730" | "731" | "732" | "733" | "734" | "735" | "736" | "737" | "738" | "739" | "740" | "741" | "742" | "743" | "744" | "745" | "746" | "747" | "748" | "749" | "750" | "751" | "752" | "753" | "754" | "755" | "756" | "757" | "758" | "759" | "760" | "761" | "762" | "763" | "764" | "765" | "766" | "767" | "768" | "769" | "770" | "771" | "772" | "773" | "774" | "775" | "776" | "777" | "778" | "779" | "780" | "781" | "782" | "783" | "784" | "785" | "786" | "787" | "788" | "789" | "790" | "791" | "792" | "793" | "794" | "795" | "796" | "797" | "798" | "799" | "800" | "801" | "802" | "803" | "804" | "805" | "806" | "807" | "808" | "809" | "810" | "811" | "812" | "813" | "814" | "815" | "816" | "817" | "818" | "819" | "820" | "821" | "822" | "823" | "824" | "825" | "826" | "827" | "828" | "829" | "830" | "831" | "832" | "833" | "834" | "835" | "836" | "837" | "838" | "839" | "840" | "841" | "842" | "843" | "844" | "845" | "846" | "847" | "848" | "849" | "850" | "851" | "852" | "853" | "854" | "855" | "856" | "857" | "858" | "859" | "860" | "861" | "862" | "863" | "864" | "865" | "866" | "867" | "868" | "869" | "870" | "871" | "872" | "873" | "874" | "875" | "876" | "877" | "878" | "879" | "880" | "881" | "882" | "883" | "884" | "885" | "886" | "887" | "888" | "889" | "890" | "891" | "892" | "893" | "894" | "895" | "896" | "897" | "898" | "899" | "900" | "901" | "902" | "903" | "904" | "905" | "906" | "907" | "908" | "909" | "910" | "911" | "912" | "913" | "914" | "915" | "916" | "917" | "918" | "919" | "920" | "921" | "922" | "923" | "924" | "925" | "926" | "927" | "928" | "929" | "930" | "931" | "932" | "933" | "934" | "935" | "936" | "937" | "938" | "939" | "940" | "941" | "942" | "943" | "944" | "945" | "946" | "947" | "948" | "949" | "950" | "951" | "952" | "953" | "954" | "955" | "956" | "957" | "958" | "959" | "960" | "961" | "962" | "963" | "964" | "965" | "966" | "967" | "968" | "969" | "970" | "971" | "972" | "973" | "974" | "975" | "976" | "977" | "978" | "979" | "980" | "981" | "982" | "983" | "984" | "985" | "986" | "987" | "988" | "989" | "990" | "991" | "992" | "993" | "994" | "995" | "996" | "997" | "998" | "999" -// Over five million instantiations for one statement. -type Wide = N["length"] extends 6 ? I : { [J in K]: Wide<[...N, 0], [J, I][0]> }[K]; +// Several million instantiations, well over the limit, for one statement. +type Wide = N["length"] extends 8 ? I : { [J in K]: Wide<[...N, 0], [J, I][0]> }[K]; >Wide : Wide type WideAll = Wide<[], "">; @@ -21,14 +20,14 @@ type WideAll = Wide<[], "">; // The same, but half of the instantiations already happened for another // statement. -type Wide2 = N["length"] extends 6 ? I : { [J in K]: Wide2<[...N, 0], [J, I][0]> }[K]; +type Wide2 = N["length"] extends 8 ? I : { [J in K]: Wide2<[...N, 0], [J, I][0]> }[K]; >Wide2 : Wide2 -type Wide2Tail = Wide2<[0, 0, 0], "">; +type Wide2Tail = Wide2<[0, 0, 0, 0], "">; >Wide2Tail : "000" | "001" | "002" | "003" | "004" | "005" | "006" | "007" | "008" | "009" | "010" | "011" | "012" | "013" | "014" | "015" | "016" | "017" | "018" | "019" | "020" | "021" | "022" | "023" | "024" | "025" | "026" | "027" | "028" | "029" | "030" | "031" | "032" | "033" | "034" | "035" | "036" | "037" | "038" | "039" | "040" | "041" | "042" | "043" | "044" | "045" | "046" | "047" | "048" | "049" | "050" | "051" | "052" | "053" | "054" | "055" | "056" | "057" | "058" | "059" | "060" | "061" | "062" | "063" | "064" | "065" | "066" | "067" | "068" | "069" | "070" | "071" | "072" | "073" | "074" | "075" | "076" | "077" | "078" | "079" | "080" | "081" | "082" | "083" | "084" | "085" | "086" | "087" | "088" | "089" | "090" | "091" | "092" | "093" | "094" | "095" | "096" | "097" | "098" | "099" | "100" | "101" | "102" | "103" | "104" | "105" | "106" | "107" | "108" | "109" | "110" | "111" | "112" | "113" | "114" | "115" | "116" | "117" | "118" | "119" | "120" | "121" | "122" | "123" | "124" | "125" | "126" | "127" | "128" | "129" | "130" | "131" | "132" | "133" | "134" | "135" | "136" | "137" | "138" | "139" | "140" | "141" | "142" | "143" | "144" | "145" | "146" | "147" | "148" | "149" | "150" | "151" | "152" | "153" | "154" | "155" | "156" | "157" | "158" | "159" | "160" | "161" | "162" | "163" | "164" | "165" | "166" | "167" | "168" | "169" | "170" | "171" | "172" | "173" | "174" | "175" | "176" | "177" | "178" | "179" | "180" | "181" | "182" | "183" | "184" | "185" | "186" | "187" | "188" | "189" | "190" | "191" | "192" | "193" | "194" | "195" | "196" | "197" | "198" | "199" | "200" | "201" | "202" | "203" | "204" | "205" | "206" | "207" | "208" | "209" | "210" | "211" | "212" | "213" | "214" | "215" | "216" | "217" | "218" | "219" | "220" | "221" | "222" | "223" | "224" | "225" | "226" | "227" | "228" | "229" | "230" | "231" | "232" | "233" | "234" | "235" | "236" | "237" | "238" | "239" | "240" | "241" | "242" | "243" | "244" | "245" | "246" | "247" | "248" | "249" | "250" | "251" | "252" | "253" | "254" | "255" | "256" | "257" | "258" | "259" | "260" | "261" | "262" | "263" | "264" | "265" | "266" | "267" | "268" | "269" | "270" | "271" | "272" | "273" | "274" | "275" | "276" | "277" | "278" | "279" | "280" | "281" | "282" | "283" | "284" | "285" | "286" | "287" | "288" | "289" | "290" | "291" | "292" | "293" | "294" | "295" | "296" | "297" | "298" | "299" | "300" | "301" | "302" | "303" | "304" | "305" | "306" | "307" | "308" | "309" | "310" | "311" | "312" | "313" | "314" | "315" | "316" | "317" | "318" | "319" | "320" | "321" | "322" | "323" | "324" | "325" | "326" | "327" | "328" | "329" | "330" | "331" | "332" | "333" | "334" | "335" | "336" | "337" | "338" | "339" | "340" | "341" | "342" | "343" | "344" | "345" | "346" | "347" | "348" | "349" | "350" | "351" | "352" | "353" | "354" | "355" | "356" | "357" | "358" | "359" | "360" | "361" | "362" | "363" | "364" | "365" | "366" | "367" | "368" | "369" | "370" | "371" | "372" | "373" | "374" | "375" | "376" | "377" | "378" | "379" | "380" | "381" | "382" | "383" | "384" | "385" | "386" | "387" | "388" | "389" | "390" | "391" | "392" | "393" | "394" | "395" | "396" | "397" | "398" | "399" | "400" | "401" | "402" | "403" | "404" | "405" | "406" | "407" | "408" | "409" | "410" | "411" | "412" | "413" | "414" | "415" | "416" | "417" | "418" | "419" | "420" | "421" | "422" | "423" | "424" | "425" | "426" | "427" | "428" | "429" | "430" | "431" | "432" | "433" | "434" | "435" | "436" | "437" | "438" | "439" | "440" | "441" | "442" | "443" | "444" | "445" | "446" | "447" | "448" | "449" | "450" | "451" | "452" | "453" | "454" | "455" | "456" | "457" | "458" | "459" | "460" | "461" | "462" | "463" | "464" | "465" | "466" | "467" | "468" | "469" | "470" | "471" | "472" | "473" | "474" | "475" | "476" | "477" | "478" | "479" | "480" | "481" | "482" | "483" | "484" | "485" | "486" | "487" | "488" | "489" | "490" | "491" | "492" | "493" | "494" | "495" | "496" | "497" | "498" | "499" | "500" | "501" | "502" | "503" | "504" | "505" | "506" | "507" | "508" | "509" | "510" | "511" | "512" | "513" | "514" | "515" | "516" | "517" | "518" | "519" | "520" | "521" | "522" | "523" | "524" | "525" | "526" | "527" | "528" | "529" | "530" | "531" | "532" | "533" | "534" | "535" | "536" | "537" | "538" | "539" | "540" | "541" | "542" | "543" | "544" | "545" | "546" | "547" | "548" | "549" | "550" | "551" | "552" | "553" | "554" | "555" | "556" | "557" | "558" | "559" | "560" | "561" | "562" | "563" | "564" | "565" | "566" | "567" | "568" | "569" | "570" | "571" | "572" | "573" | "574" | "575" | "576" | "577" | "578" | "579" | "580" | "581" | "582" | "583" | "584" | "585" | "586" | "587" | "588" | "589" | "590" | "591" | "592" | "593" | "594" | "595" | "596" | "597" | "598" | "599" | "600" | "601" | "602" | "603" | "604" | "605" | "606" | "607" | "608" | "609" | "610" | "611" | "612" | "613" | "614" | "615" | "616" | "617" | "618" | "619" | "620" | "621" | "622" | "623" | "624" | "625" | "626" | "627" | "628" | "629" | "630" | "631" | "632" | "633" | "634" | "635" | "636" | "637" | "638" | "639" | "640" | "641" | "642" | "643" | "644" | "645" | "646" | "647" | "648" | "649" | "650" | "651" | "652" | "653" | "654" | "655" | "656" | "657" | "658" | "659" | "660" | "661" | "662" | "663" | "664" | "665" | "666" | "667" | "668" | "669" | "670" | "671" | "672" | "673" | "674" | "675" | "676" | "677" | "678" | "679" | "680" | "681" | "682" | "683" | "684" | "685" | "686" | "687" | "688" | "689" | "690" | "691" | "692" | "693" | "694" | "695" | "696" | "697" | "698" | "699" | "700" | "701" | "702" | "703" | "704" | "705" | "706" | "707" | "708" | "709" | "710" | "711" | "712" | "713" | "714" | "715" | "716" | "717" | "718" | "719" | "720" | "721" | "722" | "723" | "724" | "725" | "726" | "727" | "728" | "729" | "730" | "731" | "732" | "733" | "734" | "735" | "736" | "737" | "738" | "739" | "740" | "741" | "742" | "743" | "744" | "745" | "746" | "747" | "748" | "749" | "750" | "751" | "752" | "753" | "754" | "755" | "756" | "757" | "758" | "759" | "760" | "761" | "762" | "763" | "764" | "765" | "766" | "767" | "768" | "769" | "770" | "771" | "772" | "773" | "774" | "775" | "776" | "777" | "778" | "779" | "780" | "781" | "782" | "783" | "784" | "785" | "786" | "787" | "788" | "789" | "790" | "791" | "792" | "793" | "794" | "795" | "796" | "797" | "798" | "799" | "800" | "801" | "802" | "803" | "804" | "805" | "806" | "807" | "808" | "809" | "810" | "811" | "812" | "813" | "814" | "815" | "816" | "817" | "818" | "819" | "820" | "821" | "822" | "823" | "824" | "825" | "826" | "827" | "828" | "829" | "830" | "831" | "832" | "833" | "834" | "835" | "836" | "837" | "838" | "839" | "840" | "841" | "842" | "843" | "844" | "845" | "846" | "847" | "848" | "849" | "850" | "851" | "852" | "853" | "854" | "855" | "856" | "857" | "858" | "859" | "860" | "861" | "862" | "863" | "864" | "865" | "866" | "867" | "868" | "869" | "870" | "871" | "872" | "873" | "874" | "875" | "876" | "877" | "878" | "879" | "880" | "881" | "882" | "883" | "884" | "885" | "886" | "887" | "888" | "889" | "890" | "891" | "892" | "893" | "894" | "895" | "896" | "897" | "898" | "899" | "900" | "901" | "902" | "903" | "904" | "905" | "906" | "907" | "908" | "909" | "910" | "911" | "912" | "913" | "914" | "915" | "916" | "917" | "918" | "919" | "920" | "921" | "922" | "923" | "924" | "925" | "926" | "927" | "928" | "929" | "930" | "931" | "932" | "933" | "934" | "935" | "936" | "937" | "938" | "939" | "940" | "941" | "942" | "943" | "944" | "945" | "946" | "947" | "948" | "949" | "950" | "951" | "952" | "953" | "954" | "955" | "956" | "957" | "958" | "959" | "960" | "961" | "962" | "963" | "964" | "965" | "966" | "967" | "968" | "969" | "970" | "971" | "972" | "973" | "974" | "975" | "976" | "977" | "978" | "979" | "980" | "981" | "982" | "983" | "984" | "985" | "986" | "987" | "988" | "989" | "990" | "991" | "992" | "993" | "994" | "995" | "996" | "997" | "998" | "999" type Wide2All = Wide2<[], "">; ->Wide2All : "000" | "001" | "002" | "003" | "004" | "005" | "006" | "007" | "008" | "009" | "010" | "011" | "012" | "013" | "014" | "015" | "016" | "017" | "018" | "019" | "020" | "021" | "022" | "023" | "024" | "025" | "026" | "027" | "028" | "029" | "030" | "031" | "032" | "033" | "034" | "035" | "036" | "037" | "038" | "039" | "040" | "041" | "042" | "043" | "044" | "045" | "046" | "047" | "048" | "049" | "050" | "051" | "052" | "053" | "054" | "055" | "056" | "057" | "058" | "059" | "060" | "061" | "062" | "063" | "064" | "065" | "066" | "067" | "068" | "069" | "070" | "071" | "072" | "073" | "074" | "075" | "076" | "077" | "078" | "079" | "080" | "081" | "082" | "083" | "084" | "085" | "086" | "087" | "088" | "089" | "090" | "091" | "092" | "093" | "094" | "095" | "096" | "097" | "098" | "099" | "100" | "101" | "102" | "103" | "104" | "105" | "106" | "107" | "108" | "109" | "110" | "111" | "112" | "113" | "114" | "115" | "116" | "117" | "118" | "119" | "120" | "121" | "122" | "123" | "124" | "125" | "126" | "127" | "128" | "129" | "130" | "131" | "132" | "133" | "134" | "135" | "136" | "137" | "138" | "139" | "140" | "141" | "142" | "143" | "144" | "145" | "146" | "147" | "148" | "149" | "150" | "151" | "152" | "153" | "154" | "155" | "156" | "157" | "158" | "159" | "160" | "161" | "162" | "163" | "164" | "165" | "166" | "167" | "168" | "169" | "170" | "171" | "172" | "173" | "174" | "175" | "176" | "177" | "178" | "179" | "180" | "181" | "182" | "183" | "184" | "185" | "186" | "187" | "188" | "189" | "190" | "191" | "192" | "193" | "194" | "195" | "196" | "197" | "198" | "199" | "200" | "201" | "202" | "203" | "204" | "205" | "206" | "207" | "208" | "209" | "210" | "211" | "212" | "213" | "214" | "215" | "216" | "217" | "218" | "219" | "220" | "221" | "222" | "223" | "224" | "225" | "226" | "227" | "228" | "229" | "230" | "231" | "232" | "233" | "234" | "235" | "236" | "237" | "238" | "239" | "240" | "241" | "242" | "243" | "244" | "245" | "246" | "247" | "248" | "249" | "250" | "251" | "252" | "253" | "254" | "255" | "256" | "257" | "258" | "259" | "260" | "261" | "262" | "263" | "264" | "265" | "266" | "267" | "268" | "269" | "270" | "271" | "272" | "273" | "274" | "275" | "276" | "277" | "278" | "279" | "280" | "281" | "282" | "283" | "284" | "285" | "286" | "287" | "288" | "289" | "290" | "291" | "292" | "293" | "294" | "295" | "296" | "297" | "298" | "299" | "300" | "301" | "302" | "303" | "304" | "305" | "306" | "307" | "308" | "309" | "310" | "311" | "312" | "313" | "314" | "315" | "316" | "317" | "318" | "319" | "320" | "321" | "322" | "323" | "324" | "325" | "326" | "327" | "328" | "329" | "330" | "331" | "332" | "333" | "334" | "335" | "336" | "337" | "338" | "339" | "340" | "341" | "342" | "343" | "344" | "345" | "346" | "347" | "348" | "349" | "350" | "351" | "352" | "353" | "354" | "355" | "356" | "357" | "358" | "359" | "360" | "361" | "362" | "363" | "364" | "365" | "366" | "367" | "368" | "369" | "370" | "371" | "372" | "373" | "374" | "375" | "376" | "377" | "378" | "379" | "380" | "381" | "382" | "383" | "384" | "385" | "386" | "387" | "388" | "389" | "390" | "391" | "392" | "393" | "394" | "395" | "396" | "397" | "398" | "399" | "400" | "401" | "402" | "403" | "404" | "405" | "406" | "407" | "408" | "409" | "410" | "411" | "412" | "413" | "414" | "415" | "416" | "417" | "418" | "419" | "420" | "421" | "422" | "423" | "424" | "425" | "426" | "427" | "428" | "429" | "430" | "431" | "432" | "433" | "434" | "435" | "436" | "437" | "438" | "439" | "440" | "441" | "442" | "443" | "444" | "445" | "446" | "447" | "448" | "449" | "450" | "451" | "452" | "453" | "454" | "455" | "456" | "457" | "458" | "459" | "460" | "461" | "462" | "463" | "464" | "465" | "466" | "467" | "468" | "469" | "470" | "471" | "472" | "473" | "474" | "475" | "476" | "477" | "478" | "479" | "480" | "481" | "482" | "483" | "484" | "485" | "486" | "487" | "488" | "489" | "490" | "491" | "492" | "493" | "494" | "495" | "496" | "497" | "498" | "499" | "500" | "501" | "502" | "503" | "504" | "505" | "506" | "507" | "508" | "509" | "510" | "511" | "512" | "513" | "514" | "515" | "516" | "517" | "518" | "519" | "520" | "521" | "522" | "523" | "524" | "525" | "526" | "527" | "528" | "529" | "530" | "531" | "532" | "533" | "534" | "535" | "536" | "537" | "538" | "539" | "540" | "541" | "542" | "543" | "544" | "545" | "546" | "547" | "548" | "549" | "550" | "551" | "552" | "553" | "554" | "555" | "556" | "557" | "558" | "559" | "560" | "561" | "562" | "563" | "564" | "565" | "566" | "567" | "568" | "569" | "570" | "571" | "572" | "573" | "574" | "575" | "576" | "577" | "578" | "579" | "580" | "581" | "582" | "583" | "584" | "585" | "586" | "587" | "588" | "589" | "590" | "591" | "592" | "593" | "594" | "595" | "596" | "597" | "598" | "599" | "600" | "601" | "602" | "603" | "604" | "605" | "606" | "607" | "608" | "609" | "610" | "611" | "612" | "613" | "614" | "615" | "616" | "617" | "618" | "619" | "620" | "621" | "622" | "623" | "624" | "625" | "626" | "627" | "628" | "629" | "630" | "631" | "632" | "633" | "634" | "635" | "636" | "637" | "638" | "639" | "640" | "641" | "642" | "643" | "644" | "645" | "646" | "647" | "648" | "649" | "650" | "651" | "652" | "653" | "654" | "655" | "656" | "657" | "658" | "659" | "660" | "661" | "662" | "663" | "664" | "665" | "666" | "667" | "668" | "669" | "670" | "671" | "672" | "673" | "674" | "675" | "676" | "677" | "678" | "679" | "680" | "681" | "682" | "683" | "684" | "685" | "686" | "687" | "688" | "689" | "690" | "691" | "692" | "693" | "694" | "695" | "696" | "697" | "698" | "699" | "700" | "701" | "702" | "703" | "704" | "705" | "706" | "707" | "708" | "709" | "710" | "711" | "712" | "713" | "714" | "715" | "716" | "717" | "718" | "719" | "720" | "721" | "722" | "723" | "724" | "725" | "726" | "727" | "728" | "729" | "730" | "731" | "732" | "733" | "734" | "735" | "736" | "737" | "738" | "739" | "740" | "741" | "742" | "743" | "744" | "745" | "746" | "747" | "748" | "749" | "750" | "751" | "752" | "753" | "754" | "755" | "756" | "757" | "758" | "759" | "760" | "761" | "762" | "763" | "764" | "765" | "766" | "767" | "768" | "769" | "770" | "771" | "772" | "773" | "774" | "775" | "776" | "777" | "778" | "779" | "780" | "781" | "782" | "783" | "784" | "785" | "786" | "787" | "788" | "789" | "790" | "791" | "792" | "793" | "794" | "795" | "796" | "797" | "798" | "799" | "800" | "801" | "802" | "803" | "804" | "805" | "806" | "807" | "808" | "809" | "810" | "811" | "812" | "813" | "814" | "815" | "816" | "817" | "818" | "819" | "820" | "821" | "822" | "823" | "824" | "825" | "826" | "827" | "828" | "829" | "830" | "831" | "832" | "833" | "834" | "835" | "836" | "837" | "838" | "839" | "840" | "841" | "842" | "843" | "844" | "845" | "846" | "847" | "848" | "849" | "850" | "851" | "852" | "853" | "854" | "855" | "856" | "857" | "858" | "859" | "860" | "861" | "862" | "863" | "864" | "865" | "866" | "867" | "868" | "869" | "870" | "871" | "872" | "873" | "874" | "875" | "876" | "877" | "878" | "879" | "880" | "881" | "882" | "883" | "884" | "885" | "886" | "887" | "888" | "889" | "890" | "891" | "892" | "893" | "894" | "895" | "896" | "897" | "898" | "899" | "900" | "901" | "902" | "903" | "904" | "905" | "906" | "907" | "908" | "909" | "910" | "911" | "912" | "913" | "914" | "915" | "916" | "917" | "918" | "919" | "920" | "921" | "922" | "923" | "924" | "925" | "926" | "927" | "928" | "929" | "930" | "931" | "932" | "933" | "934" | "935" | "936" | "937" | "938" | "939" | "940" | "941" | "942" | "943" | "944" | "945" | "946" | "947" | "948" | "949" | "950" | "951" | "952" | "953" | "954" | "955" | "956" | "957" | "958" | "959" | "960" | "961" | "962" | "963" | "964" | "965" | "966" | "967" | "968" | "969" | "970" | "971" | "972" | "973" | "974" | "975" | "976" | "977" | "978" | "979" | "980" | "981" | "982" | "983" | "984" | "985" | "986" | "987" | "988" | "989" | "990" | "991" | "992" | "993" | "994" | "995" | "996" | "997" | "998" | "999" +>Wide2All : any // Over a hundred nested instantiations, half of which already happened for // another statement. diff --git a/tsc/testdata/tests/cases/compiler/instantiationLimitsCheckOrder.ts b/tsc/testdata/tests/cases/compiler/instantiationLimitsCheckOrder.ts index 2047e52a8329c..82102e539c51b 100644 --- a/tsc/testdata/tests/cases/compiler/instantiationLimitsCheckOrder.ts +++ b/tsc/testdata/tests/cases/compiler/instantiationLimitsCheckOrder.ts @@ -1,21 +1,20 @@ // @noEmit: true -// Instantiation limits must not depend on what was instantiated before. -// This holds for the depth limit, but not yet for the limit on the number -// of instantiations, which Wide2All only reaches if Wide2Tail was not -// checked first. +// Instantiation limits must not depend on what was instantiated before: +// Wide2All reaches the limit on the number of instantiations like WideAll, +// although Wide2Tail already performed half of them. type D = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; type K = `${D}${D}${D}`; -// Over five million instantiations for one statement. -type Wide = N["length"] extends 6 ? I : { [J in K]: Wide<[...N, 0], [J, I][0]> }[K]; +// Several million instantiations, well over the limit, for one statement. +type Wide = N["length"] extends 8 ? I : { [J in K]: Wide<[...N, 0], [J, I][0]> }[K]; type WideAll = Wide<[], "">; // The same, but half of the instantiations already happened for another // statement. -type Wide2 = N["length"] extends 6 ? I : { [J in K]: Wide2<[...N, 0], [J, I][0]> }[K]; -type Wide2Tail = Wide2<[0, 0, 0], "">; +type Wide2 = N["length"] extends 8 ? I : { [J in K]: Wide2<[...N, 0], [J, I][0]> }[K]; +type Wide2Tail = Wide2<[0, 0, 0, 0], "">; type Wide2All = Wide2<[], "">; // Over a hundred nested instantiations, half of which already happened for From 5671fe7bb383d95e1ed21ae8e1264cb16bcd8f20 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 22 Oct 2026 00:42:10 -0700 Subject: [PATCH 065/194] Vary emit order with checkOrder Declaration emit queries the checker as much as checking does, and in a different order: emit visits files one at a time, and with several checkers the order within each checker is arbitrary. Results that depend on that order show up as emit that changes between runs, so the check orders need to apply to emit as well to make such dependence visible in baselines. --- .../testutil/harnessutil/harnessutil.go | 64 +++++++++++++++++-- ...nstraint(checkorder=typesfirst).errors.txt | 1 - ...uleExportsAlias(checkorder=isolated).types | 4 +- 3 files changed, 59 insertions(+), 10 deletions(-) diff --git a/tsc/internal/testutil/harnessutil/harnessutil.go b/tsc/internal/testutil/harnessutil/harnessutil.go index 17e39a1a5104d..65d2405be8fca 100644 --- a/tsc/internal/testutil/harnessutil/harnessutil.go +++ b/tsc/internal/testutil/harnessutil/harnessutil.go @@ -373,16 +373,19 @@ var harnessCommandLineOptions = []*tsoptions.CommandLineOption{ } // Checker results should not depend on the order in which files and -// locations are queried. These orders let tests demonstrate that. +// locations are queried. These orders let tests demonstrate that. Each +// applies to both checking and emit, which queries the checker too. var checkOrders = []string{ - // Check all files in program order. + // Check and emit all files in program order. "default", - // Check files one at a time in reverse program order. + // Check and emit files one at a time in reverse program order. "reverse", - // Check each file with a fresh program that has checked nothing else. + // Check and emit each file with a fresh program that has checked + // nothing else. "isolated", - // Before checking, ask for the type and symbol of every expression and - // name in each file, innermost and last first, as an editor might. + // Before checking or emitting, ask for the type and symbol of every + // expression and name in each file, innermost and last first, as an + // editor might. "typesfirst", } @@ -682,7 +685,7 @@ func compileFilesWithHost( preErrors = compiler.SortAndDeduplicateDiagnostics(preErrors) postProgram := createProgram(host, config) - emitResult := postProgram.Emit(ctx, compiler.EmitOptions{}) + emitResult := emitInOrder(ctx, host, config, postProgram, harnessOptions.CheckOrder) var postErrors []*ast.Diagnostic postErrors = append(postErrors, postProgram.GetConfigFileParsingDiagnostics()...) postErrors = append(postErrors, postProgram.GetProgramDiagnostics()...) @@ -767,6 +770,53 @@ func getCheckerDiagnostics(ctx context.Context, host compiler.CompilerHost, conf return compiler.SortAndDeduplicateDiagnostics(result) } +// emitInOrder emits program, querying the checker in the given order: each +// file emitted separately, in reverse or in a program of its own, or after +// querying the types and symbols of every file in reverse. +func emitInOrder(ctx context.Context, host compiler.CompilerHost, config *tsoptions.ParsedCommandLine, program compiler.ProgramLike, order string) *compiler.EmitResult { + options := program.Options() + if order == "" || order == "default" || options.OutFile != "" || options.NoEmitOnError.IsTrue() { + // Emitting files separately would change what a bundle or an emit + // blocked by errors contains. + return program.Emit(ctx, compiler.EmitOptions{}) + } + files := program.GetSourceFiles() + if order == "typesfirst" { + for _, file := range slices.Backward(files) { + if program.Program().SkipTypeChecking(file, false) { + continue + } + c, done := program.Program().GetTypeCheckerForFile(ctx, file) + queryTypesAndSymbols(c, file) + done() + } + return program.Emit(ctx, compiler.EmitOptions{}) + } + result := &compiler.EmitResult{} + emitFile := func(p compiler.ProgramLike, file *ast.SourceFile) { + r := p.Emit(ctx, compiler.EmitOptions{TargetSourceFiles: []*ast.SourceFile{file}}) + result.EmitSkipped = result.EmitSkipped || r.EmitSkipped + result.Diagnostics = append(result.Diagnostics, r.Diagnostics...) + result.EmittedFiles = append(result.EmittedFiles, r.EmittedFiles...) + result.SourceMaps = append(result.SourceMaps, r.SourceMaps...) + } + switch order { + case "reverse": + for _, file := range slices.Backward(files) { + emitFile(program, file) + } + case "isolated": + for _, file := range files { + isolated := createProgram(host, config) + emitFile(isolated, isolated.GetSourceFile(file.FileName())) + } + default: + panic("unknown check order " + order) + } + result.Diagnostics = compiler.SortAndDeduplicateDiagnostics(result.Diagnostics) + return result +} + func queryTypesAndSymbols(c *checker.Checker, file *ast.SourceFile) { var nodes []*ast.Node var visit func(n *ast.Node) bool diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=typesfirst).errors.txt index 938f4b7bb63d2..9309ae4c7eb15 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=typesfirst).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=typesfirst).errors.txt @@ -15,7 +15,6 @@ checkOrderCircularConstraint.ts(10,17): error TS2349: This expression is not cal class A { ~ !!! error TS2313: Type parameter 'T' has a circular constraint. -!!! related TS2751 checkOrderCircularConstraint.ts:7:17: Circularity originates in type at this location. foo() { var x!: T; var a = x.foo(); diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=isolated).types b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=isolated).types index f940f148c6541..9de3e5f594946 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=isolated).types +++ b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=isolated).types @@ -13,11 +13,11 @@ module.exports.i = function i() {} module.exports.ii = module.exports.i; >module.exports.ii = module.exports.i : () => void ->module.exports.ii : () => void +>module.exports.ii : error >module.exports : typeof import(".") >module : { exports: typeof import("."); } >exports : typeof import(".") ->ii : () => void +>ii : any >module.exports.i : () => void >module.exports : typeof import(".") >module : { exports: typeof import("."); } From c99b7cf3e9a974421489733c253ddc1abc4e40eb Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 22 Oct 2026 08:51:09 -0700 Subject: [PATCH 066/194] Keep property access symbol lookups inside one query Looking up the symbol of a property access from outside checking checks the access and then reads the resolved symbol back from the node's links. Checking the access is itself a query, and if computing it reported an error at the current node, the symbol was discarded when that query finished, before it was read back. The lookup then found no symbol, depending on whether the results it needed were already cached. Make the whole lookup one query, so the symbol is read back before anything is discarded. --- tsc/internal/checker/checker.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 8a498d345d217..ddc4325a3229f 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -20106,6 +20106,24 @@ func (c *Checker) exitCurrentNode(save savedCurrentNode) { c.currentNodeResolution = save.resolution } +// enterQuery starts a query made outside of checking, unless one is already +// in progress. Results that depend on errors located at the current node are +// discarded when the query finishes (see reportAtCurrentNode), so a query +// that reads results back from caches after computing them must do so before +// then. +func (c *Checker) enterQuery() (savedCurrentNode, bool) { + if c.memoTop != 0 || c.currentNodeResolution != 0 { + return savedCurrentNode{}, false + } + return c.enterCurrentNode(c.currentNode), true +} + +func (c *Checker) exitQuery(save savedCurrentNode, ok bool) { + if ok { + c.exitCurrentNode(save) + } +} + type savedCurrentNode struct { node *ast.Node resolution int @@ -34152,6 +34170,10 @@ func (c *Checker) getSymbolOfNameOrPropertyAccessExpression(name *ast.Node) *ast if links.resolvedSymbol.get(c) != nil { return links.resolvedSymbol.get(c) } + // The symbol is read back from links after checking, before a query + // finishing would discard it. + query, ok := c.enterQuery() + defer c.exitQuery(query, ok) if ast.IsPropertyAccessExpression(name) { c.checkPropertyAccessExpression(name, CheckModeNormal, false /*writeOnly*/) if links.resolvedSymbol.get(c) == nil && !ast.IsPrivateIdentifier(name.Name()) { From c4b294871bfa9b1d9a765470b629ffe55f44b5c2 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 22 Oct 2026 09:36:11 -0700 Subject: [PATCH 067/194] Resolve cycles of type parameter defaults from a canonical member When type parameter defaults form a cycle, only the default that is re-entered fails, and the others are computed from its failure. Which default that is depended on which was resolved first, so it depended on check order, and isolated checks blamed each default in the other's file without reporting anything. Make every such cycle fail at the same member: the one first in program order. When the outermost default of a cycle finishes and another member comes first, everything computed since it started is discarded and that member is resolved first. This is the cycle canonicalization the store needs in general, since results must not depend on what was queried before them. --- tsc/internal/checker/checker.go | 122 +++++++++++++++--- ...larDefaults(checkorder=default).errors.txt | 5 +- ...CircularDefaults(checkorder=default).types | 2 +- ...arDefaults(checkorder=isolated).errors.txt | 5 +- ...ircularDefaults(checkorder=isolated).types | 4 +- ...larDefaults(checkorder=reverse).errors.txt | 5 +- ...CircularDefaults(checkorder=reverse).types | 2 +- ...Defaults(checkorder=typesfirst).errors.txt | 10 +- ...cularDefaults(checkorder=typesfirst).types | 4 +- 9 files changed, 115 insertions(+), 44 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index ddc4325a3229f..1fc9e7ec59075 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -72,6 +72,7 @@ const ( TypeSystemPropertyNameCurrentNode TypeSystemPropertyNameSimplifiedForReading TypeSystemPropertyNameSimplifiedForWriting + TypeSystemPropertyNameDefaultType TypeSystemPropertyNamePatternInitializer ) @@ -79,6 +80,9 @@ type TypeResolution struct { target TypeSystemEntity propertyName TypeSystemPropertyName result bool + // canonical is the member of a cycle headed by this resolution that is + // resolved first; see observeCircularHead. + canonical TypeSystemEntity } // ContextualInfo @@ -20083,6 +20087,44 @@ func (c *Checker) isResolutionInProgress(target TypeSystemEntity, propertyName T return true } +// observeCircularHead is for computations where re-entering one in progress +// fails only that computation, while the others complete from its failed +// result. Which member fails then depends on which was entered first, so the +// cycle records its canonical member, the first in program order, and the +// head resolves that member first when it finishes; see popCircularHead. +// Everything else cached during the cycle is discarded like for +// isResolutionInProgress. +func (c *Checker) observeCircularHead(target TypeSystemEntity, propertyName TypeSystemPropertyName, compare func(a, b TypeSystemEntity) int) { + start := c.findResolutionCycleStartIndex(target, propertyName) + if start < 0 { + return + } + c.markTypeResolutionCircular(start) + head := &c.resolutions[start].typeResolution + canonical := core.OrElse(head.canonical, head.target) + for i := start + 1; i < len(c.resolutions); i++ { + if r := &c.resolutions[i].typeResolution; c.resolutions[i].isTypeResolution && r.propertyName == propertyName && compare(r.target, canonical) < 0 { + canonical = r.target + } + } + head.canonical = canonical +} + +// popCircularHead pops a resolution that may head a cycle observed by +// observeCircularHead. It returns the cycle's canonical member when that is +// not the head itself, in which case everything cached during the cycle has +// been discarded and the caller must resolve the canonical member before +// resolving the head again. +func (c *Checker) popCircularHead() TypeSystemEntity { + r := c.topTypeResolution() + canonical := r.canonical + if canonical == r.target { + canonical = nil + } + c.popTypeResolution() + return canonical +} + // enterCurrentNode makes node the node being checked, until the matching // exitCurrentNode. Its type resolution delimits the results that errors // located at node (see reportAtCurrentNode) depend on. @@ -20279,8 +20321,7 @@ func (c *Checker) typeResolutionHasProperty(r *TypeResolution) bool { case TypeSystemPropertyNameAliasTarget: return c.aliasSymbolLinks.Get(r.target.(*ast.Symbol)).aliasTarget.peek() != nil case TypeSystemPropertyNameContextChecked, TypeSystemPropertyNameStructuredMembers, TypeSystemPropertyNameCurrentNode, - TypeSystemPropertyNameSimplifiedForReading, TypeSystemPropertyNameSimplifiedForWriting, - TypeSystemPropertyNamePatternInitializer: + TypeSystemPropertyNameSimplifiedForReading, TypeSystemPropertyNameSimplifiedForWriting, TypeSystemPropertyNameDefaultType, TypeSystemPropertyNamePatternInitializer: // Marked as checked or resolved on entry, so it is only on the stack // while in progress. return false @@ -23938,32 +23979,71 @@ func (c *Checker) getResolvedTypeParameterDefault(t *Type) *Type { d.resolvedDefaultType.set(c, c.noConstraintType) } } else { - // To block recursion, set the initial value to the resolvingDefaultType. - d.resolvedDefaultType.set(c, c.resolvingDefaultType) - defaultType := c.noConstraintType - if t.symbol != nil { - defaultDeclaration := core.FirstNonNil(t.symbol.Declarations(), func(decl *ast.Node) *ast.Node { - if ast.IsTypeParameterDeclaration(decl) { - return decl.AsTypeParameterDeclaration().DefaultType - } - return nil - }) - if defaultDeclaration != nil { - defaultType = c.getTypeFromTypeNode(defaultDeclaration) - } - } - if d.resolvedDefaultType.get(c) == c.resolvingDefaultType { - // If we have not been called recursively, set the correct default type. - d.resolvedDefaultType.set(c, defaultType) - } + c.resolveTypeParameterDefault(t) } } else if d.resolvedDefaultType.get(c) == c.resolvingDefaultType { // If we are called recursively for this type parameter, mark the default as circular. - d.resolvedDefaultType.set(c, c.circularConstraintType) + c.observeCircularHead(t, TypeSystemPropertyNameDefaultType, c.compareTypeParameterDeclarations) + d.resolvedDefaultType.swap(c.circularConstraintType) + return c.circularConstraintType } return d.resolvedDefaultType.get(c) } +// resolveTypeParameterDefault resolves the default of a declared type +// parameter. When defaults form a cycle, the first default resolved is the +// one found to be circular, so the default first in program order is always +// resolved first, discarding whatever was computed starting from another. +func (c *Checker) resolveTypeParameterDefault(t *Type) { + d := t.AsTypeParameter() + if c.checking { + // Results computed starting from another default are discarded + // along with their effects, so resolve while recording effects. + c.withoutChecking(func() { + c.resolveTypeParameterDefault(t) + }) + return + } + d.resolvedDefaultType.begin(c) + mark := c.markDiscard() + for { + // To block recursion, set the initial value to the resolvingDefaultType. + // Markers of a resolution in progress are never observed once it + // finishes, so they are not results to discard. + d.resolvedDefaultType.swap(c.resolvingDefaultType) + c.pushTypeResolution(t, TypeSystemPropertyNameDefaultType) + defaultType := c.noConstraintType + if t.symbol != nil { + defaultDeclaration := core.FirstNonNil(t.symbol.Declarations(), func(decl *ast.Node) *ast.Node { + if ast.IsTypeParameterDeclaration(decl) { + return decl.AsTypeParameterDeclaration().DefaultType + } + return nil + }) + if defaultDeclaration != nil { + defaultType = c.getTypeFromTypeNode(defaultDeclaration) + } + } + if d.resolvedDefaultType.swap(nil) != c.resolvingDefaultType { + // We were called recursively, so the default is circular. + defaultType = c.circularConstraintType + } + canonical := c.popCircularHead() + if canonical == nil { + d.resolvedDefaultType.set(c, defaultType) + break + } + c.discardSince(mark) + c.getResolvedTypeParameterDefault(canonical.(*Type)) + } + c.releaseDiscardMark(mark) + c.endMemo() +} + +func (c *Checker) compareTypeParameterDeclarations(a, b TypeSystemEntity) int { + return c.compareSymbols(a.(*Type).symbol, b.(*Type).symbol) +} + func (c *Checker) getDefaultOrUnknownFromTypeParameter(t *Type) *Type { result := c.getDefaultFromTypeParameter(t) return core.IfElse(result != nil, result, c.unknownType) diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).errors.txt index 23492f7603f78..4dee4171e029f 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).errors.txt @@ -1,12 +1,9 @@ -a.ts(2,24): error TS2716: Type parameter 'T' has a circular default. b.ts(2,24): error TS2716: Type parameter 'U' has a circular default. -==== a.ts (1 errors) ==== +==== a.ts (0 errors) ==== import type { B } from "./b"; export interface A { a: T } - ~ -!!! error TS2716: Type parameter 'T' has a circular default. export declare const a: A; ==== b.ts (1 errors) ==== diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).types b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).types index c7a4cbd1e5e66..a88d998c374ec 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).types +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=default).types @@ -8,7 +8,7 @@ export interface A { a: T } >a : T export declare const a: A; ->a : A +>a : A> === b.ts === import type { A } from "./a"; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=isolated).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=isolated).errors.txt index 23492f7603f78..4dee4171e029f 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=isolated).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=isolated).errors.txt @@ -1,12 +1,9 @@ -a.ts(2,24): error TS2716: Type parameter 'T' has a circular default. b.ts(2,24): error TS2716: Type parameter 'U' has a circular default. -==== a.ts (1 errors) ==== +==== a.ts (0 errors) ==== import type { B } from "./b"; export interface A { a: T } - ~ -!!! error TS2716: Type parameter 'T' has a circular default. export declare const a: A; ==== b.ts (1 errors) ==== diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=isolated).types b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=isolated).types index 145f91d78caf3..a88d998c374ec 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=isolated).types +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=isolated).types @@ -8,7 +8,7 @@ export interface A { a: T } >a : T export declare const a: A; ->a : A +>a : A> === b.ts === import type { A } from "./a"; @@ -18,5 +18,5 @@ export interface B { b: U } >b : U export declare const b: B; ->b : B> +>b : B diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).errors.txt index 23492f7603f78..4dee4171e029f 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).errors.txt @@ -1,12 +1,9 @@ -a.ts(2,24): error TS2716: Type parameter 'T' has a circular default. b.ts(2,24): error TS2716: Type parameter 'U' has a circular default. -==== a.ts (1 errors) ==== +==== a.ts (0 errors) ==== import type { B } from "./b"; export interface A { a: T } - ~ -!!! error TS2716: Type parameter 'T' has a circular default. export declare const a: A; ==== b.ts (1 errors) ==== diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).types b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).types index c7a4cbd1e5e66..a88d998c374ec 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).types +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=reverse).types @@ -8,7 +8,7 @@ export interface A { a: T } >a : T export declare const a: A; ->a : A +>a : A> === b.ts === import type { A } from "./a"; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=typesfirst).errors.txt index 5c28d3ee0a214..4dee4171e029f 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=typesfirst).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=typesfirst).errors.txt @@ -1,15 +1,15 @@ -a.ts(2,24): error TS2716: Type parameter 'T' has a circular default. +b.ts(2,24): error TS2716: Type parameter 'U' has a circular default. -==== a.ts (1 errors) ==== +==== a.ts (0 errors) ==== import type { B } from "./b"; export interface A { a: T } - ~ -!!! error TS2716: Type parameter 'T' has a circular default. export declare const a: A; -==== b.ts (0 errors) ==== +==== b.ts (1 errors) ==== import type { A } from "./a"; export interface B { b: U } + ~ +!!! error TS2716: Type parameter 'U' has a circular default. export declare const b: B; \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=typesfirst).types index 145f91d78caf3..a88d998c374ec 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=typesfirst).types +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularDefaults(checkorder=typesfirst).types @@ -8,7 +8,7 @@ export interface A { a: T } >a : T export declare const a: A; ->a : A +>a : A> === b.ts === import type { A } from "./a"; @@ -18,5 +18,5 @@ export interface B { b: U } >b : U export declare const b: B; ->b : B> +>b : B From 241c29a4587bdc48380a23cc8473d92b43e94d86 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 22 Oct 2026 09:49:12 -0700 Subject: [PATCH 068/194] Do not blame a use for the circular constraint of a declaration A declared type parameter with a circular constraint is circular no matter how it is used, and checking its declaration reports it. Which use happened to resolve the constraint before that is an accident of check order, so pointing at it as the origin of the cycle made the diagnostic depend on that order. Only an instantiated type parameter has a cycle that originates at a use. --- tsc/internal/checker/checker.go | 6 +++++- ...ckOrderCircularConstraint(checkorder=default).errors.txt | 1 - ...ckOrderCircularConstraint(checkorder=reverse).errors.txt | 1 - .../typeParameterWithInvalidConstraintType.errors.txt | 1 - .../reference/conformance/recursiveMappedTypes.errors.txt | 1 - 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 1fc9e7ec59075..987440f946e21 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -29746,9 +29746,13 @@ func (c *Checker) getResolvedBaseConstraintUncached(t *Type, stack []RecursionId // circularity is intrinsic to the declarations, so it is reported once // and the circular result is kept. Discarding it would let a later // computation reuse cycle participants that hide the cycle. + // Only the cycle of an instantiation originates at a use; that of a + // declared type parameter is found by checking its declaration, and + // whichever use happens to find it first is no origin. + instantiated := t.AsTypeParameter().target != nil c.reportAtCurrentNodeOnce(func(c *Checker, node *ast.Node) { diagnostic := c.error(errorNode, diagnostics.Type_parameter_0_has_a_circular_constraint, typeString) - if node != nil && !isNodeDescendantOf(errorNode, node) && !isNodeDescendantOf(node, errorNode) { + if instantiated && node != nil && !isNodeDescendantOf(errorNode, node) && !isNodeDescendantOf(node, errorNode) { diagnostic.AddRelatedInfo(NewDiagnosticForNode(node, diagnostics.Circularity_originates_in_type_at_this_location)) } }) diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=default).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=default).errors.txt index 938f4b7bb63d2..9309ae4c7eb15 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=default).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=default).errors.txt @@ -15,7 +15,6 @@ checkOrderCircularConstraint.ts(10,17): error TS2349: This expression is not cal class A { ~ !!! error TS2313: Type parameter 'T' has a circular constraint. -!!! related TS2751 checkOrderCircularConstraint.ts:7:17: Circularity originates in type at this location. foo() { var x!: T; var a = x.foo(); diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=reverse).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=reverse).errors.txt index 938f4b7bb63d2..9309ae4c7eb15 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=reverse).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/checkOrderCircularConstraint(checkorder=reverse).errors.txt @@ -15,7 +15,6 @@ checkOrderCircularConstraint.ts(10,17): error TS2349: This expression is not cal class A { ~ !!! error TS2313: Type parameter 'T' has a circular constraint. -!!! related TS2751 checkOrderCircularConstraint.ts:7:17: Circularity originates in type at this location. foo() { var x!: T; var a = x.foo(); diff --git a/tsc/testdata/baselines/reference/compiler/typeParameterWithInvalidConstraintType.errors.txt b/tsc/testdata/baselines/reference/compiler/typeParameterWithInvalidConstraintType.errors.txt index 7ee5828671802..342cb732ba6ff 100644 --- a/tsc/testdata/baselines/reference/compiler/typeParameterWithInvalidConstraintType.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/typeParameterWithInvalidConstraintType.errors.txt @@ -10,7 +10,6 @@ typeParameterWithInvalidConstraintType.ts(7,17): error TS2349: This expression i class A { ~ !!! error TS2313: Type parameter 'T' has a circular constraint. -!!! related TS2751 typeParameterWithInvalidConstraintType.ts:4:17: Circularity originates in type at this location. foo() { var x!: T; var a = x.foo(); diff --git a/tsc/testdata/baselines/reference/conformance/recursiveMappedTypes.errors.txt b/tsc/testdata/baselines/reference/conformance/recursiveMappedTypes.errors.txt index e2cd22aa096b4..e695d2a6d96a6 100644 --- a/tsc/testdata/baselines/reference/conformance/recursiveMappedTypes.errors.txt +++ b/tsc/testdata/baselines/reference/conformance/recursiveMappedTypes.errors.txt @@ -36,7 +36,6 @@ recursiveMappedTypes.ts(73,13): error TS2615: Type of property '"each"' circular [K in keyof Recurse1]: Recurse1[K] ~~~~~~~~~~~~~~ !!! error TS2313: Type parameter 'K' has a circular constraint. -!!! related TS2751 recursiveMappedTypes.ts:8:17: Circularity originates in type at this location. } // Repro from #27881 From d5fba8a8f1e686c888a34072c9ca2959c664f95b Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 22 Oct 2026 16:11:34 -0700 Subject: [PATCH 069/194] Resolve mapped type constraints whenever the mapped type is requested A mapped type resolves its constraint eagerly so that errors in the constraint are reported at the mapped type. It did so only when the type was created, so when the type was first created while checking another node, the mapped type itself never reported those errors. --- tsc/internal/checker/checker.go | 11 +++++++---- ...siveLength(checkorder=typesfirst).errors.txt | 17 ++++++++++++++++- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 987440f946e21..119d2ab9bba6a 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -26434,11 +26434,14 @@ func (c *Checker) getTypeFromMappedTypeNode(node *ast.Node) *Type { t.AsMappedType().declaration = node.AsMappedTypeNode() t.alias = c.getAliasForTypeNode(node) links.resolvedType.set(c, t) - // Eagerly resolve the constraint type which forces an error if the constraint type circularly - // references itself through one or more type aliases. - c.getConstraintTypeFromMappedType(t) } - return links.resolvedType.get(c) + t := links.resolvedType.get(c) + // Eagerly resolve the constraint type which forces an error if the constraint type circularly + // references itself through one or more type aliases. This happens on every request rather + // than only when the type is created, so its errors do not depend on whether the type was + // created while checking another node. + c.getConstraintTypeFromMappedType(t) + return t } func (c *Checker) getTypeFromConditionalTypeNode(node *ast.Node) *Type { diff --git a/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).errors.txt index 75017c0b48808..afb511fd91c39 100644 --- a/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/templateLiteralTypeExcessiveLength(checkorder=typesfirst).errors.txt @@ -1,15 +1,18 @@ +templateLiteralTypeExcessiveLength.ts(14,16): error TS2589: Type instantiation is excessively deep and possibly infinite. templateLiteralTypeExcessiveLength.ts(15,6): error TS2589: Type instantiation is excessively deep and possibly infinite. templateLiteralTypeExcessiveLength.ts(15,11): error TS2589: Type instantiation is excessively deep and possibly infinite. templateLiteralTypeExcessiveLength.ts(15,28): error TS2589: Type instantiation is excessively deep and possibly infinite. +templateLiteralTypeExcessiveLength.ts(19,21): error TS2589: Type instantiation is excessively deep and possibly infinite. templateLiteralTypeExcessiveLength.ts(20,6): error TS2589: Type instantiation is excessively deep and possibly infinite. templateLiteralTypeExcessiveLength.ts(20,11): error TS2589: Type instantiation is excessively deep and possibly infinite. templateLiteralTypeExcessiveLength.ts(20,31): error TS2589: Type instantiation is excessively deep and possibly infinite. +templateLiteralTypeExcessiveLength.ts(33,24): error TS2589: Type instantiation is excessively deep and possibly infinite. templateLiteralTypeExcessiveLength.ts(34,6): error TS2589: Type instantiation is excessively deep and possibly infinite. templateLiteralTypeExcessiveLength.ts(34,11): error TS2589: Type instantiation is excessively deep and possibly infinite. templateLiteralTypeExcessiveLength.ts(34,38): error TS2589: Type instantiation is excessively deep and possibly infinite. -==== templateLiteralTypeExcessiveLength.ts (9 errors) ==== +==== templateLiteralTypeExcessiveLength.ts (12 errors) ==== // Regression test for #63271: `Dec<2>` is `any`, so `Recur` produces both conditional branches and // keeps tail-recursing forever. The checker must report an error instead of building an unbounded // template literal type. @@ -24,7 +27,9 @@ templateLiteralTypeExcessiveLength.ts(34,38): error TS2589: Type instantiation i // The string literal doubles on every iteration. type Explode = { + ~ [P in Recur<5, "a"> as `${P}_key`]: any; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ !!! error TS2589: Type instantiation is excessively deep and possibly infinite. ~~~~~~~~~~~~~ @@ -32,10 +37,14 @@ templateLiteralTypeExcessiveLength.ts(34,38): error TS2589: Type instantiation i ~~~~~~~~~~ !!! error TS2589: Type instantiation is excessively deep and possibly infinite. }; + ~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. // The number of placeholders doubles on every iteration. type ExplodeSpans = { + ~ [P in Recur<5, string> as `${P}_key`]: any; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~ !!! error TS2589: Type instantiation is excessively deep and possibly infinite. ~~~~~~~~~~~~~~~~ @@ -43,6 +52,8 @@ templateLiteralTypeExcessiveLength.ts(34,38): error TS2589: Type instantiation i ~~~~~~~~~~ !!! error TS2589: Type instantiation is excessively deep and possibly infinite. }; + ~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. // Every text segment stays small, but the number of segments doubles on every iteration, // so the combined text length grows without bound. @@ -55,7 +66,9 @@ templateLiteralTypeExcessiveLength.ts(34,38): error TS2589: Type instantiation i N extends 0 ? S : RecurSegments, `${S}${string}${S}`>; type ExplodeSegments = { + ~ [P in RecurSegments<5, A1024> as `${P}_key`]: any; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2589: Type instantiation is excessively deep and possibly infinite. ~~~~~~~~~~~~~~~~~~~~~~~ @@ -63,4 +76,6 @@ templateLiteralTypeExcessiveLength.ts(34,38): error TS2589: Type instantiation i ~~~~~~~~~~ !!! error TS2589: Type instantiation is excessively deep and possibly infinite. }; + ~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. \ No newline at end of file From 3a7b26dbbd11b19a2bc130456e1b93abcef4074e Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 23 Oct 2026 00:25:29 -0700 Subject: [PATCH 070/194] Report relation complexity overflows in every comparison needing them A comparison that overflowed was cached as a failure, and only the comparison that first overflowed reported it. A later comparison that reached the cached overflow reported it only while elaborating, so whether a statement got the complexity error depended on which statements were checked before it. Computing a comparison from scratch overflows whenever it needs a comparison that overflows, so reading a cached overflow now overflows the reading comparison too, and that comparison reports it like any other overflow. This makes the separate overflow cell, which replayed the error only inside memoized computations, unnecessary. --- tsc/internal/checker/memo.go | 1 - tsc/internal/checker/relater.go | 71 +++++---------- ...lexityError(checkorder=default).errors.txt | 52 +++++++++++ ...omplexityError(checkorder=default).symbols | 91 +++++++++++++++++++ ...nComplexityError(checkorder=default).types | 77 ++++++++++++++++ ...ityError(checkorder=typesfirst).errors.txt | 55 +++++++++++ ...lexityError(checkorder=typesfirst).symbols | 91 +++++++++++++++++++ ...mplexityError(checkorder=typesfirst).types | 77 ++++++++++++++++ .../relationComplexityError.errors.txt | 23 ----- .../compiler/relationComplexityError.symbols | 46 ---------- .../compiler/relationComplexityError.types | 38 -------- .../cases/compiler/relationComplexityError.ts | 49 ++++++---- 12 files changed, 498 insertions(+), 173 deletions(-) create mode 100644 tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=default).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=default).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=default).types create mode 100644 tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=typesfirst).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=typesfirst).types delete mode 100644 tsc/testdata/baselines/reference/compiler/relationComplexityError.errors.txt delete mode 100644 tsc/testdata/baselines/reference/compiler/relationComplexityError.symbols delete mode 100644 tsc/testdata/baselines/reference/compiler/relationComplexityError.types diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index f1a9454534f03..15cb7968b6c89 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -55,7 +55,6 @@ const ( memoJsxImplicitImportContainer memoModuleExports memoInstantiationExpressionType - memoRelationOverflow memoTypePredicate memoDeclaredMembers memoCouldContainTypeVariables diff --git a/tsc/internal/checker/relater.go b/tsc/internal/checker/relater.go index f98de8c55ef1a..38d5c4ef6ce75 100644 --- a/tsc/internal/checker/relater.go +++ b/tsc/internal/checker/relater.go @@ -103,35 +103,7 @@ func asRecursionId[T *ast.Node | *ast.Symbol | *Type](value T) RecursionId { const relationCountLimit = 16_000_000 / 8 type Relation struct { - results memoMap[CacheHashKey, RelationComparisonResult] - overflows map[CacheHashKey]*relationOverflow -} - -// relationOverflow identifies the computation that found a relation to be -// too complex, whose errors are replayed wherever the cached result is used. -type relationOverflow struct { - _ byte // ensure distinct addresses -} - -func (r *Relation) overflowCell(key CacheHashKey) *relationOverflow { - if r.overflows == nil { - r.overflows = make(map[CacheHashKey]*relationOverflow) - } - cell := r.overflows[key] - if cell == nil { - cell = &relationOverflow{} - r.overflows[key] = cell - } - return cell -} - -func (c *Checker) observeRelationOverflow(relation *Relation, key CacheHashKey) { - if c.memoActive() { - if cell := relation.overflows[key]; cell != nil { - c.beginMemo(memoKeyOf(cell, memoRelationOverflow)) - c.endMemo() - } - } + results memoMap[CacheHashKey, RelationComparisonResult] } func (r *Relation) get(c *Checker, key CacheHashKey) RelationComparisonResult { @@ -222,11 +194,10 @@ func (c *Checker) isTypeRelatedTo(source *Type, target *Type, relation *Relation } if source.flags&TypeFlagsObject != 0 && target.flags&TypeFlagsObject != 0 { id, _ := c.getRelationKey(source, target, IntersectionStateNone, relation == c.identityRelation, false) + // An overflow is reported by each comparison that reaches it, so it + // is left to checkTypeRelatedTo. related := relation.get(c, id) - if related != RelationComparisonResultNone { - if related&RelationComparisonResultOverflow != 0 { - c.observeRelationOverflow(relation, id) - } + if related != RelationComparisonResultNone && related&RelationComparisonResultOverflow == 0 { return related&RelationComparisonResultSucceeded != 0 } } @@ -416,15 +387,20 @@ func (c *Checker) checkTypeRelatedToEx( // caches accounts for the effects of the whole comparison. Errors are // reported after it, since they belong to the caller rather than the result. id, _ := c.getRelationKey(source, target, IntersectionStateNone, relation == c.identityRelation, false /*ignoreConstraints*/) - relation.results.begin(c, id) - result := r.isRelatedToEx(source, target, RecursionFlagsBoth, errorNode != nil /*reportErrors*/, headMessage, IntersectionStateNone) - if r.overflow { - // Record this relation as having failed such that we don't attempt the overflowing operation again. - relation.set(c, id, RelationComparisonResultFailed|RelationComparisonResultComplexityOverflow, nil) + var result Ternary + if relation.get(c, id)&RelationComparisonResultOverflow != 0 { + // The comparison overflowed before, and would again. + r.overflow = true + } else { + relation.results.begin(c, id) + result = r.isRelatedToEx(source, target, RecursionFlagsBoth, errorNode != nil /*reportErrors*/, headMessage, IntersectionStateNone) + if r.overflow { + // Record this relation as having failed such that we don't attempt the overflowing operation again. + relation.set(c, id, RelationComparisonResultFailed|RelationComparisonResultComplexityOverflow, nil) + } + c.endMemo() } - c.endMemo() if r.overflow { - c.beginMemo(memoKeyOf(relation.overflowCell(id), memoRelationOverflow)) if tr := c.tracer; tr != nil { tr.Instant(tracing.PhaseCheckTypes, "checkTypeRelatedTo_DepthLimit", map[string]any{"sourceId": source.id, "targetId": target.id, "depth": len(r.sourceStack), "targetDepth": len(r.targetStack)}) } @@ -437,7 +413,6 @@ func (c *Checker) checkTypeRelatedToEx( default: c.errorAtCurrentNode(message, sourceString, targetString) } - c.endMemo() } else if r.errorChain != nil { // Check if we should issue an extra diagnostic to produce a quickfix for a slightly incorrect import statement if headMessage != nil && errorNode != nil && result == TernaryFalse && source.symbol != nil && c.exportTypeLinks.Has(source.symbol) { @@ -3480,17 +3455,17 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError } id, constrained := r.c.getRelationKey(source, target, intersectionState, r.relation == r.c.identityRelation, false /*ignoreConstraints*/) if entry := r.relation.get(r.c, id); entry != RelationComparisonResultNone { - if reportErrors && entry&RelationComparisonResultFailed != 0 && entry&RelationComparisonResultOverflow == 0 { + if entry&RelationComparisonResultOverflow != 0 { + // Computing the comparison overflowed, so computing this one, + // which needs it, overflows too. + r.overflow = true + return TernaryFalse + } + if reportErrors && entry&RelationComparisonResultFailed != 0 { // We are elaborating errors and the cached result is a failure not due to a comparison overflow, // so we will do the comparison again to generate an error message. } else { r.c.reliabilityFlags |= entry & (RelationComparisonResultReportsUnmeasurable | RelationComparisonResultReportsUnreliable) - if entry&RelationComparisonResultOverflow != 0 { - r.c.observeRelationOverflow(r.relation, id) - } - if reportErrors && entry&RelationComparisonResultOverflow != 0 { - r.reportError(diagnostics.Excessive_complexity_comparing_types_0_and_1, r.c.TypeToString(source), r.c.TypeToString(target)) - } if entry&RelationComparisonResultSucceeded != 0 { return TernaryTrue } diff --git a/tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=default).errors.txt b/tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=default).errors.txt new file mode 100644 index 0000000000000..28f464ba7c0ec --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=default).errors.txt @@ -0,0 +1,52 @@ +relationComplexityError.ts(10,5): error TS2859: Excessive complexity comparing types '{ p: T1 & T2; }' and '{ p: T1 | null; }'. +relationComplexityError.ts(10,5): error TS2859: Excessive complexity comparing types '{ p: T1 & T2; }' and '{ p: T1 | null; }'. +relationComplexityError.ts(18,5): error TS2859: Excessive complexity comparing types 'T1 & T2' and 'T1 | null'. +relationComplexityError.ts(22,5): error TS2859: Excessive complexity comparing types 'T1 & T2' and 'T1 | null'. +relationComplexityError.ts(22,5): error TS2859: Excessive complexity comparing types 'T1 & T2' and 'T1 | null'. +relationComplexityError.ts(26,5): error TS2859: Excessive complexity comparing types '{ p: T1 & T2; }' and '{ p: T1 | null; }'. +relationComplexityError.ts(26,5): error TS2859: Excessive complexity comparing types '{ p: T1 & T2; }' and '{ p: T1 | null; }'. + + +==== relationComplexityError.ts (7 errors) ==== + // Repro from #55630 + // Every comparison that needs a comparison that is too complex is too complex + // itself, whether or not that comparison happened before. + + type Digits = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7'; + type T1 = `${Digits}${Digits}${Digits}${Digits}` | undefined; + type T2 = { a: string } | { b: number }; + + function f0(x: { p: T1 | null }, y: { p: T1 & T2 }) { + x = y; // Complexity error + ~ +!!! error TS2859: Excessive complexity comparing types '{ p: T1 & T2; }' and '{ p: T1 | null; }'. + ~~~~~ +!!! error TS2859: Excessive complexity comparing types '{ p: T1 & T2; }' and '{ p: T1 | null; }'. + } + + function f1(x: T1, y: T1 & T2) { + x = y; + } + + function f2(x: T1 | null, y: T1 & T2) { + x = y; // Complexity error + ~ +!!! error TS2859: Excessive complexity comparing types 'T1 & T2' and 'T1 | null'. + } + + function f3(x: T1 | null, y: T1 & T2) { + x = y; // Complexity error + ~ +!!! error TS2859: Excessive complexity comparing types 'T1 & T2' and 'T1 | null'. + ~~~~~ +!!! error TS2859: Excessive complexity comparing types 'T1 & T2' and 'T1 | null'. + } + + function f4(x: { p: T1 | null }, y: { p: T1 & T2 }) { + x = y; // Complexity error + ~ +!!! error TS2859: Excessive complexity comparing types '{ p: T1 & T2; }' and '{ p: T1 | null; }'. + ~~~~~ +!!! error TS2859: Excessive complexity comparing types '{ p: T1 & T2; }' and '{ p: T1 | null; }'. + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=default).symbols b/tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=default).symbols new file mode 100644 index 0000000000000..ea9543f81e755 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=default).symbols @@ -0,0 +1,91 @@ +//// [tests/cases/compiler/relationComplexityError.ts] //// + +=== relationComplexityError.ts === +// Repro from #55630 +// Every comparison that needs a comparison that is too complex is too complex +// itself, whether or not that comparison happened before. + +type Digits = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7'; +>Digits : Symbol(Digits, Decl(relationComplexityError.ts, 0, 0)) + +type T1 = `${Digits}${Digits}${Digits}${Digits}` | undefined; +>T1 : Symbol(T1, Decl(relationComplexityError.ts, 4, 60)) +>Digits : Symbol(Digits, Decl(relationComplexityError.ts, 0, 0)) +>Digits : Symbol(Digits, Decl(relationComplexityError.ts, 0, 0)) +>Digits : Symbol(Digits, Decl(relationComplexityError.ts, 0, 0)) +>Digits : Symbol(Digits, Decl(relationComplexityError.ts, 0, 0)) + +type T2 = { a: string } | { b: number }; +>T2 : Symbol(T2, Decl(relationComplexityError.ts, 5, 61)) +>a : Symbol(a, Decl(relationComplexityError.ts, 6, 11)) +>b : Symbol(b, Decl(relationComplexityError.ts, 6, 27)) + +function f0(x: { p: T1 | null }, y: { p: T1 & T2 }) { +>f0 : Symbol(f0, Decl(relationComplexityError.ts, 6, 40)) +>x : Symbol(x, Decl(relationComplexityError.ts, 8, 12)) +>p : Symbol(p, Decl(relationComplexityError.ts, 8, 16)) +>T1 : Symbol(T1, Decl(relationComplexityError.ts, 4, 60)) +>y : Symbol(y, Decl(relationComplexityError.ts, 8, 32)) +>p : Symbol(p, Decl(relationComplexityError.ts, 8, 37)) +>T1 : Symbol(T1, Decl(relationComplexityError.ts, 4, 60)) +>T2 : Symbol(T2, Decl(relationComplexityError.ts, 5, 61)) + + x = y; // Complexity error +>x : Symbol(x, Decl(relationComplexityError.ts, 8, 12)) +>y : Symbol(y, Decl(relationComplexityError.ts, 8, 32)) +} + +function f1(x: T1, y: T1 & T2) { +>f1 : Symbol(f1, Decl(relationComplexityError.ts, 10, 1)) +>x : Symbol(x, Decl(relationComplexityError.ts, 12, 12)) +>T1 : Symbol(T1, Decl(relationComplexityError.ts, 4, 60)) +>y : Symbol(y, Decl(relationComplexityError.ts, 12, 18)) +>T1 : Symbol(T1, Decl(relationComplexityError.ts, 4, 60)) +>T2 : Symbol(T2, Decl(relationComplexityError.ts, 5, 61)) + + x = y; +>x : Symbol(x, Decl(relationComplexityError.ts, 12, 12)) +>y : Symbol(y, Decl(relationComplexityError.ts, 12, 18)) +} + +function f2(x: T1 | null, y: T1 & T2) { +>f2 : Symbol(f2, Decl(relationComplexityError.ts, 14, 1)) +>x : Symbol(x, Decl(relationComplexityError.ts, 16, 12)) +>T1 : Symbol(T1, Decl(relationComplexityError.ts, 4, 60)) +>y : Symbol(y, Decl(relationComplexityError.ts, 16, 25)) +>T1 : Symbol(T1, Decl(relationComplexityError.ts, 4, 60)) +>T2 : Symbol(T2, Decl(relationComplexityError.ts, 5, 61)) + + x = y; // Complexity error +>x : Symbol(x, Decl(relationComplexityError.ts, 16, 12)) +>y : Symbol(y, Decl(relationComplexityError.ts, 16, 25)) +} + +function f3(x: T1 | null, y: T1 & T2) { +>f3 : Symbol(f3, Decl(relationComplexityError.ts, 18, 1)) +>x : Symbol(x, Decl(relationComplexityError.ts, 20, 12)) +>T1 : Symbol(T1, Decl(relationComplexityError.ts, 4, 60)) +>y : Symbol(y, Decl(relationComplexityError.ts, 20, 25)) +>T1 : Symbol(T1, Decl(relationComplexityError.ts, 4, 60)) +>T2 : Symbol(T2, Decl(relationComplexityError.ts, 5, 61)) + + x = y; // Complexity error +>x : Symbol(x, Decl(relationComplexityError.ts, 20, 12)) +>y : Symbol(y, Decl(relationComplexityError.ts, 20, 25)) +} + +function f4(x: { p: T1 | null }, y: { p: T1 & T2 }) { +>f4 : Symbol(f4, Decl(relationComplexityError.ts, 22, 1)) +>x : Symbol(x, Decl(relationComplexityError.ts, 24, 12)) +>p : Symbol(p, Decl(relationComplexityError.ts, 24, 16)) +>T1 : Symbol(T1, Decl(relationComplexityError.ts, 4, 60)) +>y : Symbol(y, Decl(relationComplexityError.ts, 24, 32)) +>p : Symbol(p, Decl(relationComplexityError.ts, 24, 37)) +>T1 : Symbol(T1, Decl(relationComplexityError.ts, 4, 60)) +>T2 : Symbol(T2, Decl(relationComplexityError.ts, 5, 61)) + + x = y; // Complexity error +>x : Symbol(x, Decl(relationComplexityError.ts, 24, 12)) +>y : Symbol(y, Decl(relationComplexityError.ts, 24, 32)) +} + diff --git a/tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=default).types b/tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=default).types new file mode 100644 index 0000000000000..a6085a90e7675 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=default).types @@ -0,0 +1,77 @@ +//// [tests/cases/compiler/relationComplexityError.ts] //// + +=== relationComplexityError.ts === +// Repro from #55630 +// Every comparison that needs a comparison that is too complex is too complex +// itself, whether or not that comparison happened before. + +type Digits = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7'; +>Digits : Digits + +type T1 = `${Digits}${Digits}${Digits}${Digits}` | undefined; +>T1 : T1 + +type T2 = { a: string } | { b: number }; +>T2 : T2 +>a : string +>b : number + +function f0(x: { p: T1 | null }, y: { p: T1 & T2 }) { +>f0 : (x: { p: T1 | null; }, y: { p: T1 & T2; }) => void +>x : { p: T1 | null; } +>p : T1 | null +>y : { p: T1 & T2; } +>p : T1 & T2 + + x = y; // Complexity error +>x = y : { p: T1 & T2; } +>x : { p: T1 | null; } +>y : { p: T1 & T2; } +} + +function f1(x: T1, y: T1 & T2) { +>f1 : (x: T1, y: T1 & T2) => void +>x : T1 +>y : T1 & T2 + + x = y; +>x = y : T1 & T2 +>x : T1 +>y : T1 & T2 +} + +function f2(x: T1 | null, y: T1 & T2) { +>f2 : (x: T1 | null, y: T1 & T2) => void +>x : T1 | null +>y : T1 & T2 + + x = y; // Complexity error +>x = y : T1 & T2 +>x : T1 | null +>y : T1 & T2 +} + +function f3(x: T1 | null, y: T1 & T2) { +>f3 : (x: T1 | null, y: T1 & T2) => void +>x : T1 | null +>y : T1 & T2 + + x = y; // Complexity error +>x = y : T1 & T2 +>x : T1 | null +>y : T1 & T2 +} + +function f4(x: { p: T1 | null }, y: { p: T1 & T2 }) { +>f4 : (x: { p: T1 | null; }, y: { p: T1 & T2; }) => void +>x : { p: T1 | null; } +>p : T1 | null +>y : { p: T1 & T2; } +>p : T1 & T2 + + x = y; // Complexity error +>x = y : { p: T1 & T2; } +>x : { p: T1 | null; } +>y : { p: T1 & T2; } +} + diff --git a/tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..e208e03814c1f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=typesfirst).errors.txt @@ -0,0 +1,55 @@ +relationComplexityError.ts(10,5): error TS2859: Excessive complexity comparing types '{ p: T1 & T2; }' and '{ p: T1 | null; }'. +relationComplexityError.ts(10,5): error TS2859: Excessive complexity comparing types '{ p: T1 & T2; }' and '{ p: T1 | null; }'. +relationComplexityError.ts(18,5): error TS2859: Excessive complexity comparing types 'T1 & T2' and 'T1 | null'. +relationComplexityError.ts(18,5): error TS2859: Excessive complexity comparing types 'T1 & T2' and 'T1 | null'. +relationComplexityError.ts(22,5): error TS2859: Excessive complexity comparing types 'T1 & T2' and 'T1 | null'. +relationComplexityError.ts(22,5): error TS2859: Excessive complexity comparing types 'T1 & T2' and 'T1 | null'. +relationComplexityError.ts(26,5): error TS2859: Excessive complexity comparing types '{ p: T1 & T2; }' and '{ p: T1 | null; }'. +relationComplexityError.ts(26,5): error TS2859: Excessive complexity comparing types '{ p: T1 & T2; }' and '{ p: T1 | null; }'. + + +==== relationComplexityError.ts (8 errors) ==== + // Repro from #55630 + // Every comparison that needs a comparison that is too complex is too complex + // itself, whether or not that comparison happened before. + + type Digits = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7'; + type T1 = `${Digits}${Digits}${Digits}${Digits}` | undefined; + type T2 = { a: string } | { b: number }; + + function f0(x: { p: T1 | null }, y: { p: T1 & T2 }) { + x = y; // Complexity error + ~ +!!! error TS2859: Excessive complexity comparing types '{ p: T1 & T2; }' and '{ p: T1 | null; }'. + ~~~~~ +!!! error TS2859: Excessive complexity comparing types '{ p: T1 & T2; }' and '{ p: T1 | null; }'. + } + + function f1(x: T1, y: T1 & T2) { + x = y; + } + + function f2(x: T1 | null, y: T1 & T2) { + x = y; // Complexity error + ~ +!!! error TS2859: Excessive complexity comparing types 'T1 & T2' and 'T1 | null'. + ~~~~~ +!!! error TS2859: Excessive complexity comparing types 'T1 & T2' and 'T1 | null'. + } + + function f3(x: T1 | null, y: T1 & T2) { + x = y; // Complexity error + ~ +!!! error TS2859: Excessive complexity comparing types 'T1 & T2' and 'T1 | null'. + ~~~~~ +!!! error TS2859: Excessive complexity comparing types 'T1 & T2' and 'T1 | null'. + } + + function f4(x: { p: T1 | null }, y: { p: T1 & T2 }) { + x = y; // Complexity error + ~ +!!! error TS2859: Excessive complexity comparing types '{ p: T1 & T2; }' and '{ p: T1 | null; }'. + ~~~~~ +!!! error TS2859: Excessive complexity comparing types '{ p: T1 & T2; }' and '{ p: T1 | null; }'. + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..ea9543f81e755 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=typesfirst).symbols @@ -0,0 +1,91 @@ +//// [tests/cases/compiler/relationComplexityError.ts] //// + +=== relationComplexityError.ts === +// Repro from #55630 +// Every comparison that needs a comparison that is too complex is too complex +// itself, whether or not that comparison happened before. + +type Digits = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7'; +>Digits : Symbol(Digits, Decl(relationComplexityError.ts, 0, 0)) + +type T1 = `${Digits}${Digits}${Digits}${Digits}` | undefined; +>T1 : Symbol(T1, Decl(relationComplexityError.ts, 4, 60)) +>Digits : Symbol(Digits, Decl(relationComplexityError.ts, 0, 0)) +>Digits : Symbol(Digits, Decl(relationComplexityError.ts, 0, 0)) +>Digits : Symbol(Digits, Decl(relationComplexityError.ts, 0, 0)) +>Digits : Symbol(Digits, Decl(relationComplexityError.ts, 0, 0)) + +type T2 = { a: string } | { b: number }; +>T2 : Symbol(T2, Decl(relationComplexityError.ts, 5, 61)) +>a : Symbol(a, Decl(relationComplexityError.ts, 6, 11)) +>b : Symbol(b, Decl(relationComplexityError.ts, 6, 27)) + +function f0(x: { p: T1 | null }, y: { p: T1 & T2 }) { +>f0 : Symbol(f0, Decl(relationComplexityError.ts, 6, 40)) +>x : Symbol(x, Decl(relationComplexityError.ts, 8, 12)) +>p : Symbol(p, Decl(relationComplexityError.ts, 8, 16)) +>T1 : Symbol(T1, Decl(relationComplexityError.ts, 4, 60)) +>y : Symbol(y, Decl(relationComplexityError.ts, 8, 32)) +>p : Symbol(p, Decl(relationComplexityError.ts, 8, 37)) +>T1 : Symbol(T1, Decl(relationComplexityError.ts, 4, 60)) +>T2 : Symbol(T2, Decl(relationComplexityError.ts, 5, 61)) + + x = y; // Complexity error +>x : Symbol(x, Decl(relationComplexityError.ts, 8, 12)) +>y : Symbol(y, Decl(relationComplexityError.ts, 8, 32)) +} + +function f1(x: T1, y: T1 & T2) { +>f1 : Symbol(f1, Decl(relationComplexityError.ts, 10, 1)) +>x : Symbol(x, Decl(relationComplexityError.ts, 12, 12)) +>T1 : Symbol(T1, Decl(relationComplexityError.ts, 4, 60)) +>y : Symbol(y, Decl(relationComplexityError.ts, 12, 18)) +>T1 : Symbol(T1, Decl(relationComplexityError.ts, 4, 60)) +>T2 : Symbol(T2, Decl(relationComplexityError.ts, 5, 61)) + + x = y; +>x : Symbol(x, Decl(relationComplexityError.ts, 12, 12)) +>y : Symbol(y, Decl(relationComplexityError.ts, 12, 18)) +} + +function f2(x: T1 | null, y: T1 & T2) { +>f2 : Symbol(f2, Decl(relationComplexityError.ts, 14, 1)) +>x : Symbol(x, Decl(relationComplexityError.ts, 16, 12)) +>T1 : Symbol(T1, Decl(relationComplexityError.ts, 4, 60)) +>y : Symbol(y, Decl(relationComplexityError.ts, 16, 25)) +>T1 : Symbol(T1, Decl(relationComplexityError.ts, 4, 60)) +>T2 : Symbol(T2, Decl(relationComplexityError.ts, 5, 61)) + + x = y; // Complexity error +>x : Symbol(x, Decl(relationComplexityError.ts, 16, 12)) +>y : Symbol(y, Decl(relationComplexityError.ts, 16, 25)) +} + +function f3(x: T1 | null, y: T1 & T2) { +>f3 : Symbol(f3, Decl(relationComplexityError.ts, 18, 1)) +>x : Symbol(x, Decl(relationComplexityError.ts, 20, 12)) +>T1 : Symbol(T1, Decl(relationComplexityError.ts, 4, 60)) +>y : Symbol(y, Decl(relationComplexityError.ts, 20, 25)) +>T1 : Symbol(T1, Decl(relationComplexityError.ts, 4, 60)) +>T2 : Symbol(T2, Decl(relationComplexityError.ts, 5, 61)) + + x = y; // Complexity error +>x : Symbol(x, Decl(relationComplexityError.ts, 20, 12)) +>y : Symbol(y, Decl(relationComplexityError.ts, 20, 25)) +} + +function f4(x: { p: T1 | null }, y: { p: T1 & T2 }) { +>f4 : Symbol(f4, Decl(relationComplexityError.ts, 22, 1)) +>x : Symbol(x, Decl(relationComplexityError.ts, 24, 12)) +>p : Symbol(p, Decl(relationComplexityError.ts, 24, 16)) +>T1 : Symbol(T1, Decl(relationComplexityError.ts, 4, 60)) +>y : Symbol(y, Decl(relationComplexityError.ts, 24, 32)) +>p : Symbol(p, Decl(relationComplexityError.ts, 24, 37)) +>T1 : Symbol(T1, Decl(relationComplexityError.ts, 4, 60)) +>T2 : Symbol(T2, Decl(relationComplexityError.ts, 5, 61)) + + x = y; // Complexity error +>x : Symbol(x, Decl(relationComplexityError.ts, 24, 12)) +>y : Symbol(y, Decl(relationComplexityError.ts, 24, 32)) +} + diff --git a/tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=typesfirst).types new file mode 100644 index 0000000000000..a6085a90e7675 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=typesfirst).types @@ -0,0 +1,77 @@ +//// [tests/cases/compiler/relationComplexityError.ts] //// + +=== relationComplexityError.ts === +// Repro from #55630 +// Every comparison that needs a comparison that is too complex is too complex +// itself, whether or not that comparison happened before. + +type Digits = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7'; +>Digits : Digits + +type T1 = `${Digits}${Digits}${Digits}${Digits}` | undefined; +>T1 : T1 + +type T2 = { a: string } | { b: number }; +>T2 : T2 +>a : string +>b : number + +function f0(x: { p: T1 | null }, y: { p: T1 & T2 }) { +>f0 : (x: { p: T1 | null; }, y: { p: T1 & T2; }) => void +>x : { p: T1 | null; } +>p : T1 | null +>y : { p: T1 & T2; } +>p : T1 & T2 + + x = y; // Complexity error +>x = y : { p: T1 & T2; } +>x : { p: T1 | null; } +>y : { p: T1 & T2; } +} + +function f1(x: T1, y: T1 & T2) { +>f1 : (x: T1, y: T1 & T2) => void +>x : T1 +>y : T1 & T2 + + x = y; +>x = y : T1 & T2 +>x : T1 +>y : T1 & T2 +} + +function f2(x: T1 | null, y: T1 & T2) { +>f2 : (x: T1 | null, y: T1 & T2) => void +>x : T1 | null +>y : T1 & T2 + + x = y; // Complexity error +>x = y : T1 & T2 +>x : T1 | null +>y : T1 & T2 +} + +function f3(x: T1 | null, y: T1 & T2) { +>f3 : (x: T1 | null, y: T1 & T2) => void +>x : T1 | null +>y : T1 & T2 + + x = y; // Complexity error +>x = y : T1 & T2 +>x : T1 | null +>y : T1 & T2 +} + +function f4(x: { p: T1 | null }, y: { p: T1 & T2 }) { +>f4 : (x: { p: T1 | null; }, y: { p: T1 & T2; }) => void +>x : { p: T1 | null; } +>p : T1 | null +>y : { p: T1 & T2; } +>p : T1 & T2 + + x = y; // Complexity error +>x = y : { p: T1 & T2; } +>x : { p: T1 | null; } +>y : { p: T1 & T2; } +} + diff --git a/tsc/testdata/baselines/reference/compiler/relationComplexityError.errors.txt b/tsc/testdata/baselines/reference/compiler/relationComplexityError.errors.txt deleted file mode 100644 index 1a00aed2aaaef..0000000000000 --- a/tsc/testdata/baselines/reference/compiler/relationComplexityError.errors.txt +++ /dev/null @@ -1,23 +0,0 @@ -relationComplexityError.ts(12,5): error TS2859: Excessive complexity comparing types 'T1 & T2' and 'T1 | null'. -relationComplexityError.ts(12,5): error TS2859: Excessive complexity comparing types 'T1 & T2' and 'T1 | null'. - - -==== relationComplexityError.ts (2 errors) ==== - // Repro from #55630 - - type Digits = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7'; - type T1 = `${Digits}${Digits}${Digits}${Digits}` | undefined; - type T2 = { a: string } | { b: number }; - - function f1(x: T1, y: T1 & T2) { - x = y; - } - - function f2(x: T1 | null, y: T1 & T2) { - x = y; // Complexity error - ~ -!!! error TS2859: Excessive complexity comparing types 'T1 & T2' and 'T1 | null'. - ~~~~~ -!!! error TS2859: Excessive complexity comparing types 'T1 & T2' and 'T1 | null'. - } - \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/relationComplexityError.symbols b/tsc/testdata/baselines/reference/compiler/relationComplexityError.symbols deleted file mode 100644 index d0cbb9ffcdf57..0000000000000 --- a/tsc/testdata/baselines/reference/compiler/relationComplexityError.symbols +++ /dev/null @@ -1,46 +0,0 @@ -//// [tests/cases/compiler/relationComplexityError.ts] //// - -=== relationComplexityError.ts === -// Repro from #55630 - -type Digits = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7'; ->Digits : Symbol(Digits, Decl(relationComplexityError.ts, 0, 0)) - -type T1 = `${Digits}${Digits}${Digits}${Digits}` | undefined; ->T1 : Symbol(T1, Decl(relationComplexityError.ts, 2, 60)) ->Digits : Symbol(Digits, Decl(relationComplexityError.ts, 0, 0)) ->Digits : Symbol(Digits, Decl(relationComplexityError.ts, 0, 0)) ->Digits : Symbol(Digits, Decl(relationComplexityError.ts, 0, 0)) ->Digits : Symbol(Digits, Decl(relationComplexityError.ts, 0, 0)) - -type T2 = { a: string } | { b: number }; ->T2 : Symbol(T2, Decl(relationComplexityError.ts, 3, 61)) ->a : Symbol(a, Decl(relationComplexityError.ts, 4, 11)) ->b : Symbol(b, Decl(relationComplexityError.ts, 4, 27)) - -function f1(x: T1, y: T1 & T2) { ->f1 : Symbol(f1, Decl(relationComplexityError.ts, 4, 40)) ->x : Symbol(x, Decl(relationComplexityError.ts, 6, 12)) ->T1 : Symbol(T1, Decl(relationComplexityError.ts, 2, 60)) ->y : Symbol(y, Decl(relationComplexityError.ts, 6, 18)) ->T1 : Symbol(T1, Decl(relationComplexityError.ts, 2, 60)) ->T2 : Symbol(T2, Decl(relationComplexityError.ts, 3, 61)) - - x = y; ->x : Symbol(x, Decl(relationComplexityError.ts, 6, 12)) ->y : Symbol(y, Decl(relationComplexityError.ts, 6, 18)) -} - -function f2(x: T1 | null, y: T1 & T2) { ->f2 : Symbol(f2, Decl(relationComplexityError.ts, 8, 1)) ->x : Symbol(x, Decl(relationComplexityError.ts, 10, 12)) ->T1 : Symbol(T1, Decl(relationComplexityError.ts, 2, 60)) ->y : Symbol(y, Decl(relationComplexityError.ts, 10, 25)) ->T1 : Symbol(T1, Decl(relationComplexityError.ts, 2, 60)) ->T2 : Symbol(T2, Decl(relationComplexityError.ts, 3, 61)) - - x = y; // Complexity error ->x : Symbol(x, Decl(relationComplexityError.ts, 10, 12)) ->y : Symbol(y, Decl(relationComplexityError.ts, 10, 25)) -} - diff --git a/tsc/testdata/baselines/reference/compiler/relationComplexityError.types b/tsc/testdata/baselines/reference/compiler/relationComplexityError.types deleted file mode 100644 index 9008a9aad88b3..0000000000000 --- a/tsc/testdata/baselines/reference/compiler/relationComplexityError.types +++ /dev/null @@ -1,38 +0,0 @@ -//// [tests/cases/compiler/relationComplexityError.ts] //// - -=== relationComplexityError.ts === -// Repro from #55630 - -type Digits = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7'; ->Digits : Digits - -type T1 = `${Digits}${Digits}${Digits}${Digits}` | undefined; ->T1 : T1 - -type T2 = { a: string } | { b: number }; ->T2 : T2 ->a : string ->b : number - -function f1(x: T1, y: T1 & T2) { ->f1 : (x: T1, y: T1 & T2) => void ->x : T1 ->y : T1 & T2 - - x = y; ->x = y : T1 & T2 ->x : T1 ->y : T1 & T2 -} - -function f2(x: T1 | null, y: T1 & T2) { ->f2 : (x: T1 | null, y: T1 & T2) => void ->x : T1 | null ->y : T1 & T2 - - x = y; // Complexity error ->x = y : T1 & T2 ->x : T1 | null ->y : T1 & T2 -} - diff --git a/tsc/testdata/tests/cases/compiler/relationComplexityError.ts b/tsc/testdata/tests/cases/compiler/relationComplexityError.ts index 7b83dcf8dc6fd..ac2c6c2559ab7 100644 --- a/tsc/testdata/tests/cases/compiler/relationComplexityError.ts +++ b/tsc/testdata/tests/cases/compiler/relationComplexityError.ts @@ -1,17 +1,32 @@ -// @target: es2015 -// @strict: true -// @noEmit: true - -// Repro from #55630 - -type Digits = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7'; -type T1 = `${Digits}${Digits}${Digits}${Digits}` | undefined; -type T2 = { a: string } | { b: number }; - -function f1(x: T1, y: T1 & T2) { - x = y; -} - -function f2(x: T1 | null, y: T1 & T2) { - x = y; // Complexity error -} +// @target: es2015 +// @strict: true +// @noEmit: true +// @checkOrder: default, typesfirst + +// Repro from #55630 +// Every comparison that needs a comparison that is too complex is too complex +// itself, whether or not that comparison happened before. + +type Digits = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7'; +type T1 = `${Digits}${Digits}${Digits}${Digits}` | undefined; +type T2 = { a: string } | { b: number }; + +function f0(x: { p: T1 | null }, y: { p: T1 & T2 }) { + x = y; // Complexity error +} + +function f1(x: T1, y: T1 & T2) { + x = y; +} + +function f2(x: T1 | null, y: T1 & T2) { + x = y; // Complexity error +} + +function f3(x: T1 | null, y: T1 & T2) { + x = y; // Complexity error +} + +function f4(x: { p: T1 | null }, y: { p: T1 & T2 }) { + x = y; // Complexity error +} From 1026f25f55a5c239fa1bd6ece1eff280bf7cda30 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 23 Oct 2026 00:25:47 -0700 Subject: [PATCH 071/194] Cache no results of a comparison cut short by an overflow Once a comparison overflows, every comparison it makes afterwards fails, so the comparisons still in progress complete with failures they may not have had otherwise. They were cached like any other failure, and a later comparison reading one failed silently instead of overflowing, so a statement checked after another that overflowed through the same comparison lost its complexity error. --- tsc/internal/checker/relater.go | 6 ++++++ .../relationComplexityError(checkorder=default).errors.txt | 5 ++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/tsc/internal/checker/relater.go b/tsc/internal/checker/relater.go index 38d5c4ef6ce75..dfb64f08484be 100644 --- a/tsc/internal/checker/relater.go +++ b/tsc/internal/checker/relater.go @@ -3576,6 +3576,12 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError low, truncated := r.low, r.truncated r.low, r.truncated = saveLow, saveTruncated switch { + case r.overflow: + // The comparison was cut short, so its result and those of the + // comparisons that completed assuming it are not what computing them + // from scratch would give. Only the overflow is cached. + r.resetMaybeStack(maybeStart, propagatingVarianceFlags, false, nil) + result = TernaryFalse case result == TernaryFalse: // A false result goes straight into global cache (when something is false under // assumptions it will also be false without assumptions) diff --git a/tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=default).errors.txt b/tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=default).errors.txt index 28f464ba7c0ec..e208e03814c1f 100644 --- a/tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=default).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/relationComplexityError(checkorder=default).errors.txt @@ -1,13 +1,14 @@ relationComplexityError.ts(10,5): error TS2859: Excessive complexity comparing types '{ p: T1 & T2; }' and '{ p: T1 | null; }'. relationComplexityError.ts(10,5): error TS2859: Excessive complexity comparing types '{ p: T1 & T2; }' and '{ p: T1 | null; }'. relationComplexityError.ts(18,5): error TS2859: Excessive complexity comparing types 'T1 & T2' and 'T1 | null'. +relationComplexityError.ts(18,5): error TS2859: Excessive complexity comparing types 'T1 & T2' and 'T1 | null'. relationComplexityError.ts(22,5): error TS2859: Excessive complexity comparing types 'T1 & T2' and 'T1 | null'. relationComplexityError.ts(22,5): error TS2859: Excessive complexity comparing types 'T1 & T2' and 'T1 | null'. relationComplexityError.ts(26,5): error TS2859: Excessive complexity comparing types '{ p: T1 & T2; }' and '{ p: T1 | null; }'. relationComplexityError.ts(26,5): error TS2859: Excessive complexity comparing types '{ p: T1 & T2; }' and '{ p: T1 | null; }'. -==== relationComplexityError.ts (7 errors) ==== +==== relationComplexityError.ts (8 errors) ==== // Repro from #55630 // Every comparison that needs a comparison that is too complex is too complex // itself, whether or not that comparison happened before. @@ -31,6 +32,8 @@ relationComplexityError.ts(26,5): error TS2859: Excessive complexity comparing t function f2(x: T1 | null, y: T1 & T2) { x = y; // Complexity error ~ +!!! error TS2859: Excessive complexity comparing types 'T1 & T2' and 'T1 | null'. + ~~~~~ !!! error TS2859: Excessive complexity comparing types 'T1 & T2' and 'T1 | null'. } From 7eac030f7e6a237a43a4c72527adac32722f9a6f Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 23 Oct 2026 01:00:59 -0700 Subject: [PATCH 072/194] Fail awaited types that refer back to themselves as a cycle Awaiting a type whose promised type refers back to it fails, and the failure is not cached, so that every await of it reports the error. The types computed around the failure were cached, though, as their own computation did not fail where it happened. A later await reusing them then did not report the error, although computing them from scratch would. Finding the awaited type of a type in progress now marks a cycle, so that what was cached since that computation started is discarded once it finishes, like any other result of a failure. --- tsc/internal/checker/checker.go | 44 ++++++++++++++----- ...waitedCycle(checkorder=default).errors.txt | 5 ++- ...waitedCycle(checkorder=reverse).errors.txt | 5 ++- ...tedCycle(checkorder=typesfirst).errors.txt | 5 ++- 4 files changed, 45 insertions(+), 14 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 119d2ab9bba6a..602c3788e00f1 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -73,6 +73,7 @@ const ( TypeSystemPropertyNameSimplifiedForReading TypeSystemPropertyNameSimplifiedForWriting TypeSystemPropertyNameDefaultType + TypeSystemPropertyNameAwaitedType TypeSystemPropertyNamePatternInitializer ) @@ -712,7 +713,6 @@ type Checker struct { renamedBindingElementsInTypes []*ast.Node contextualInfos []ContextualInfo inferenceContextInfos []InferenceContextInfo - awaitedTypeStack []*Type reverseMappedSourceStack []*Type reverseMappedTargetStack []*Type resolvingObjectTypeStack []ResolvingObjectType @@ -20321,7 +20321,8 @@ func (c *Checker) typeResolutionHasProperty(r *TypeResolution) bool { case TypeSystemPropertyNameAliasTarget: return c.aliasSymbolLinks.Get(r.target.(*ast.Symbol)).aliasTarget.peek() != nil case TypeSystemPropertyNameContextChecked, TypeSystemPropertyNameStructuredMembers, TypeSystemPropertyNameCurrentNode, - TypeSystemPropertyNameSimplifiedForReading, TypeSystemPropertyNameSimplifiedForWriting, TypeSystemPropertyNameDefaultType, TypeSystemPropertyNamePatternInitializer: + TypeSystemPropertyNameSimplifiedForReading, TypeSystemPropertyNameSimplifiedForWriting, TypeSystemPropertyNameDefaultType, + TypeSystemPropertyNameAwaitedType, TypeSystemPropertyNamePatternInitializer: // Marked as checked or resolved on entry, so it is only on the stack // while in progress. return false @@ -33663,16 +33664,16 @@ func (c *Checker) getAwaitedTypeNoAliasEx(t *Type, errorNode *ast.Node, diagnost defer c.endMemo() // For a union, get a union of the awaited types of each constituent. if t.flags&TypeFlagsUnion != 0 { - if slices.Contains(c.awaitedTypeStack, t) { + if c.isAwaitingType(t) { if errorNode != nil { c.error(errorNode, diagnostics.Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method) } return nil } - c.awaitedTypeStack = append(c.awaitedTypeStack, t) + c.pushAwaitingType(t) mapped := c.mapType(t, func(t *Type) *Type { return c.getAwaitedTypeNoAliasEx(t, errorNode, diagnosticMessage, args...) }) - c.awaitedTypeStack = c.awaitedTypeStack[:len(c.awaitedTypeStack)-1] c.cachedTypes.set(c, key, mapped) + c.popTypeResolution() return mapped } // If `type` is generic and should be wrapped in `Awaited`, return it. @@ -33683,7 +33684,7 @@ func (c *Checker) getAwaitedTypeNoAliasEx(t *Type, errorNode *ast.Node, diagnost var thisTypeForError *Type promisedType := c.getPromisedTypeOfPromiseEx(t, nil /*errorNode*/, &thisTypeForError) if promisedType != nil { - if t == promisedType || slices.Contains(c.awaitedTypeStack, promisedType) { + if t == promisedType || c.isAwaitingType(promisedType) { // Verify that we don't have a bad actor in the form of a promise whose // promised type is the same as the promise type, or a mutually recursive // promise. If so, we return undefined as we cannot guess the shape. If this @@ -33724,13 +33725,12 @@ func (c *Checker) getAwaitedTypeNoAliasEx(t *Type, errorNode *ast.Node, diagnost } // Keep track of the type we're about to unwrap to avoid bad recursive promise types. // See the comments above for more information. - c.awaitedTypeStack = append(c.awaitedTypeStack, t) + c.pushAwaitingType(t) awaitedType := c.getAwaitedTypeNoAliasEx(promisedType, errorNode, diagnosticMessage, args...) - c.awaitedTypeStack = c.awaitedTypeStack[:len(c.awaitedTypeStack)-1] - if awaitedType == nil { - return nil + if awaitedType != nil { + c.cachedTypes.set(c, key, awaitedType) } - c.cachedTypes.set(c, key, awaitedType) + c.popTypeResolution() return awaitedType } // The type was not a promise, so it could not be unwrapped any further. @@ -33762,6 +33762,28 @@ func (c *Checker) getAwaitedTypeNoAliasEx(t *Type, errorNode *ast.Node, diagnost return t } +// pushAwaitingType records that the awaited type of t is being computed, until +// the matching popTypeResolution. +func (c *Checker) pushAwaitingType(t *Type) { + c.beginTypeResolution(t, TypeSystemPropertyNameAwaitedType) +} + +// isAwaitingType reports whether the awaited type of t is being computed. A +// computation finding it so fails, as computing it from scratch would, so +// the results cached since it started are discarded when it finishes, like +// those of any other failure, and every caller computes them again and +// reports the failure. Unlike isResolutionInProgress, it searches the whole +// stack, since the computation would not otherwise stop. +func (c *Checker) isAwaitingType(t *Type) bool { + for i := c.typeResolutionTop - 1; i >= 0; i = int(c.resolutions[i].prevTypeResolution) - 1 { + if r := &c.resolutions[i].typeResolution; r.target == t && r.propertyName == TypeSystemPropertyNameAwaitedType { + c.markTypeResolutionCircular(i) + return true + } + } + return false +} + func (c *Checker) isAwaitedTypeInstantiation(t *Type) bool { if t.flags&TypeFlagsConditional != 0 { awaitedSymbol := c.getGlobalAwaitedSymbolOrNil() diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=default).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=default).errors.txt index fbdc7623ca157..126b9485926f5 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=default).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=default).errors.txt @@ -1,6 +1,7 @@ a.ts(5,11): error TS2322: Type 'string' is not assignable to type 'number'. a.ts(5,23): error TS1062: Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method. b.ts(2,11): error TS2322: Type 'string' is not assignable to type 'number'. +b.ts(2,23): error TS1062: Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method. ==== a.ts (2 errors) ==== @@ -15,10 +16,12 @@ b.ts(2,11): error TS2322: Type 'string' is not assignable to type 'number'. !!! error TS1062: Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method. } -==== b.ts (1 errors) ==== +==== b.ts (2 errors) ==== async function f2() { const b: number = await s; ~ !!! error TS2322: Type 'string' is not assignable to type 'number'. + ~~~~~~~ +!!! error TS1062: Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method. } \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=reverse).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=reverse).errors.txt index 55a3e6d752ab1..126b9485926f5 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=reverse).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=reverse).errors.txt @@ -1,9 +1,10 @@ a.ts(5,11): error TS2322: Type 'string' is not assignable to type 'number'. +a.ts(5,23): error TS1062: Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method. b.ts(2,11): error TS2322: Type 'string' is not assignable to type 'number'. b.ts(2,23): error TS1062: Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method. -==== a.ts (1 errors) ==== +==== a.ts (2 errors) ==== type S = string | Promise; declare const s: S; declare const p: Promise; @@ -11,6 +12,8 @@ b.ts(2,23): error TS1062: Type is referenced directly or indirectly in the fulfi const a: number = await p; ~ !!! error TS2322: Type 'string' is not assignable to type 'number'. + ~~~~~~~ +!!! error TS1062: Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method. } ==== b.ts (2 errors) ==== diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=typesfirst).errors.txt index 55a3e6d752ab1..126b9485926f5 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=typesfirst).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/checkOrderAwaitedCycle(checkorder=typesfirst).errors.txt @@ -1,9 +1,10 @@ a.ts(5,11): error TS2322: Type 'string' is not assignable to type 'number'. +a.ts(5,23): error TS1062: Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method. b.ts(2,11): error TS2322: Type 'string' is not assignable to type 'number'. b.ts(2,23): error TS1062: Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method. -==== a.ts (1 errors) ==== +==== a.ts (2 errors) ==== type S = string | Promise; declare const s: S; declare const p: Promise; @@ -11,6 +12,8 @@ b.ts(2,23): error TS1062: Type is referenced directly or indirectly in the fulfi const a: number = await p; ~ !!! error TS2322: Type 'string' is not assignable to type 'number'. + ~~~~~~~ +!!! error TS1062: Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method. } ==== b.ts (2 errors) ==== From 80e94e015d61cad703039239ffb09fee13921a22 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 25 Oct 2026 22:43:11 -0700 Subject: [PATCH 073/194] Combine late-bound members without re-entering their resolution Combining the early and late symbols of a table asked for each early symbol's merged symbol, which resolves the very table being combined. The answer it got back was only right because nothing else runs in between, and re-entering a resolution in progress is otherwise a sign of a result that depends on the order of checking. Since re-entering late binding now discards what it derived, the merge of the accessors and property in checkOrderLateBoundMembers was lost, and with it their duplicate identifier errors. The merges late binding made are looked up directly instead. --- tsc/internal/checker/checker.go | 14 +++++++-- ...oundMembers(checkorder=default).errors.txt | 22 ++++++++++++++ ...teBoundMembers(checkorder=default).symbols | 6 ++-- ...undMembers(checkorder=isolated).errors.txt | 22 ++++++++++++++ ...eBoundMembers(checkorder=isolated).symbols | 6 ++-- ...oundMembers(checkorder=reverse).errors.txt | 22 ++++++++++++++ ...teBoundMembers(checkorder=reverse).symbols | 6 ++-- ...dMembers(checkorder=typesfirst).errors.txt | 22 ++++++++++++++ ...oundMembers(checkorder=typesfirst).symbols | 6 ++-- .../duplicateIdentifierChecks.errors.txt | 29 ++++++++++++++----- .../duplicateIdentifierChecks.symbols | 22 +++++++------- .../compiler/dynamicNamesErrors.errors.txt | 8 ++++- .../compiler/dynamicNamesErrors.symbols | 4 +-- ...s2015,usedefineforclassfields=false).types | 6 ++-- ...es2015,usedefineforclassfields=true).types | 6 ++-- 15 files changed, 160 insertions(+), 41 deletions(-) create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).errors.txt diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 602c3788e00f1..75c9610032fd6 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -14914,8 +14914,18 @@ func (c *Checker) combineSymbolTables(first ast.SymbolTable, second ast.SymbolTa if second.Len() == 0 { return first } - combined := ast.NewSymbolTable() - c.mergeSymbolTable(combined, first, false, nil) + // Late binding has merged into early symbols already; the merges are + // looked up without resolving the table, whose resolution is this one. + combined := ast.NewSymbolTableWithCapacity(first.Len() + second.Len()) + for id, symbol := range first.All() { + if merged := c.mergedSymbols.TryGet(symbol); merged != nil && *merged != nil { + symbol = *merged + } + if merged, _ := c.lateMergedSymbols.get(c, symbol); merged != nil { + symbol = merged + } + combined.Set(id, symbol) + } c.mergeSymbolTable(combined, second, false, nil) return combined } diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).errors.txt new file mode 100644 index 0000000000000..22ee511f52182 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).errors.txt @@ -0,0 +1,22 @@ +checkOrderLateBoundMembers.ts(6,9): error TS2300: Duplicate identifier 'foo'. +checkOrderLateBoundMembers.ts(7,5): error TS2300: Duplicate identifier 'foo'. +checkOrderLateBoundMembers.ts(8,9): error TS2300: Duplicate identifier 'foo'. + + +==== checkOrderLateBoundMembers.ts (3 errors) ==== + // Resolving the name in a computed property name looks it up in the members + // of the enclosing interface. That must not late-bind those same members, + // or the accessors would not merge with the property when asked first. + const foo = "foo" + interface I { + get [foo](): number; + ~~~~~ +!!! error TS2300: Duplicate identifier 'foo'. + foo: number; + ~~~ +!!! error TS2300: Duplicate identifier 'foo'. + set [foo](value: number); + ~~~~~ +!!! error TS2300: Duplicate identifier 'foo'. + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).symbols index 5387d7a163cae..5d947b8a60834 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).symbols +++ b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=default).symbols @@ -11,14 +11,14 @@ interface I { >I : Symbol(I, Decl(checkOrderLateBoundMembers.ts, 3, 17)) get [foo](): number; ->[foo] : Symbol(I[foo], Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>[foo] : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) >foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) foo: number; ->foo : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24)) +>foo : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) set [foo](value: number); ->[foo] : Symbol(I[foo], Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>[foo] : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) >foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) >value : Symbol(value, Decl(checkOrderLateBoundMembers.ts, 7, 14)) } diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).errors.txt new file mode 100644 index 0000000000000..22ee511f52182 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).errors.txt @@ -0,0 +1,22 @@ +checkOrderLateBoundMembers.ts(6,9): error TS2300: Duplicate identifier 'foo'. +checkOrderLateBoundMembers.ts(7,5): error TS2300: Duplicate identifier 'foo'. +checkOrderLateBoundMembers.ts(8,9): error TS2300: Duplicate identifier 'foo'. + + +==== checkOrderLateBoundMembers.ts (3 errors) ==== + // Resolving the name in a computed property name looks it up in the members + // of the enclosing interface. That must not late-bind those same members, + // or the accessors would not merge with the property when asked first. + const foo = "foo" + interface I { + get [foo](): number; + ~~~~~ +!!! error TS2300: Duplicate identifier 'foo'. + foo: number; + ~~~ +!!! error TS2300: Duplicate identifier 'foo'. + set [foo](value: number); + ~~~~~ +!!! error TS2300: Duplicate identifier 'foo'. + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).symbols index 5387d7a163cae..5d947b8a60834 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).symbols +++ b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=isolated).symbols @@ -11,14 +11,14 @@ interface I { >I : Symbol(I, Decl(checkOrderLateBoundMembers.ts, 3, 17)) get [foo](): number; ->[foo] : Symbol(I[foo], Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>[foo] : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) >foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) foo: number; ->foo : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24)) +>foo : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) set [foo](value: number); ->[foo] : Symbol(I[foo], Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>[foo] : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) >foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) >value : Symbol(value, Decl(checkOrderLateBoundMembers.ts, 7, 14)) } diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).errors.txt new file mode 100644 index 0000000000000..22ee511f52182 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).errors.txt @@ -0,0 +1,22 @@ +checkOrderLateBoundMembers.ts(6,9): error TS2300: Duplicate identifier 'foo'. +checkOrderLateBoundMembers.ts(7,5): error TS2300: Duplicate identifier 'foo'. +checkOrderLateBoundMembers.ts(8,9): error TS2300: Duplicate identifier 'foo'. + + +==== checkOrderLateBoundMembers.ts (3 errors) ==== + // Resolving the name in a computed property name looks it up in the members + // of the enclosing interface. That must not late-bind those same members, + // or the accessors would not merge with the property when asked first. + const foo = "foo" + interface I { + get [foo](): number; + ~~~~~ +!!! error TS2300: Duplicate identifier 'foo'. + foo: number; + ~~~ +!!! error TS2300: Duplicate identifier 'foo'. + set [foo](value: number); + ~~~~~ +!!! error TS2300: Duplicate identifier 'foo'. + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).symbols index 5387d7a163cae..5d947b8a60834 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).symbols +++ b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=reverse).symbols @@ -11,14 +11,14 @@ interface I { >I : Symbol(I, Decl(checkOrderLateBoundMembers.ts, 3, 17)) get [foo](): number; ->[foo] : Symbol(I[foo], Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>[foo] : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) >foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) foo: number; ->foo : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24)) +>foo : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) set [foo](value: number); ->[foo] : Symbol(I[foo], Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>[foo] : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) >foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) >value : Symbol(value, Decl(checkOrderLateBoundMembers.ts, 7, 14)) } diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).errors.txt new file mode 100644 index 0000000000000..22ee511f52182 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).errors.txt @@ -0,0 +1,22 @@ +checkOrderLateBoundMembers.ts(6,9): error TS2300: Duplicate identifier 'foo'. +checkOrderLateBoundMembers.ts(7,5): error TS2300: Duplicate identifier 'foo'. +checkOrderLateBoundMembers.ts(8,9): error TS2300: Duplicate identifier 'foo'. + + +==== checkOrderLateBoundMembers.ts (3 errors) ==== + // Resolving the name in a computed property name looks it up in the members + // of the enclosing interface. That must not late-bind those same members, + // or the accessors would not merge with the property when asked first. + const foo = "foo" + interface I { + get [foo](): number; + ~~~~~ +!!! error TS2300: Duplicate identifier 'foo'. + foo: number; + ~~~ +!!! error TS2300: Duplicate identifier 'foo'. + set [foo](value: number); + ~~~~~ +!!! error TS2300: Duplicate identifier 'foo'. + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).symbols index 5387d7a163cae..5d947b8a60834 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).symbols +++ b/tsc/testdata/baselines/reference/compiler/checkOrderLateBoundMembers(checkorder=typesfirst).symbols @@ -11,14 +11,14 @@ interface I { >I : Symbol(I, Decl(checkOrderLateBoundMembers.ts, 3, 17)) get [foo](): number; ->[foo] : Symbol(I[foo], Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>[foo] : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) >foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) foo: number; ->foo : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24)) +>foo : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) set [foo](value: number); ->[foo] : Symbol(I[foo], Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) +>[foo] : Symbol(I.foo, Decl(checkOrderLateBoundMembers.ts, 5, 24), Decl(checkOrderLateBoundMembers.ts, 4, 13), Decl(checkOrderLateBoundMembers.ts, 6, 16)) >foo : Symbol(foo, Decl(checkOrderLateBoundMembers.ts, 3, 5)) >value : Symbol(value, Decl(checkOrderLateBoundMembers.ts, 7, 14)) } diff --git a/tsc/testdata/baselines/reference/compiler/duplicateIdentifierChecks.errors.txt b/tsc/testdata/baselines/reference/compiler/duplicateIdentifierChecks.errors.txt index 6ccaadce52d68..8ee196cc83acb 100644 --- a/tsc/testdata/baselines/reference/compiler/duplicateIdentifierChecks.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/duplicateIdentifierChecks.errors.txt @@ -71,15 +71,20 @@ duplicateIdentifierChecks.ts(140,9): error TS2300: Duplicate identifier 'x'. duplicateIdentifierChecks.ts(146,9): error TS2300: Duplicate identifier '[foo]'. duplicateIdentifierChecks.ts(147,5): error TS2300: Duplicate identifier '[foo]'. duplicateIdentifierChecks.ts(148,9): error TS2300: Duplicate identifier '[foo]'. +duplicateIdentifierChecks.ts(152,9): error TS2300: Duplicate identifier 'foo'. +duplicateIdentifierChecks.ts(153,5): error TS2300: Duplicate identifier 'foo'. +duplicateIdentifierChecks.ts(154,9): error TS2300: Duplicate identifier 'foo'. duplicateIdentifierChecks.ts(158,9): error TS2300: Duplicate identifier '[foo]'. duplicateIdentifierChecks.ts(159,9): error TS2300: Duplicate identifier '[foo]'. duplicateIdentifierChecks.ts(160,9): error TS2300: Duplicate identifier '[foo]'. +duplicateIdentifierChecks.ts(164,5): error TS2300: Duplicate identifier 'foo'. +duplicateIdentifierChecks.ts(165,5): error TS2300: Duplicate identifier 'foo'. duplicateIdentifierChecks.ts(169,5): error TS2300: Duplicate identifier 'foo'. duplicateIdentifierChecks.ts(170,5): error TS2300: Duplicate identifier 'foo'. -duplicateIdentifierChecks.ts(171,5): error TS2300: Duplicate identifier '[foo]'. +duplicateIdentifierChecks.ts(171,5): error TS2300: Duplicate identifier 'foo'. duplicateIdentifierChecks.ts(175,5): error TS2300: Duplicate identifier 'foo'. -duplicateIdentifierChecks.ts(176,5): error TS2300: Duplicate identifier '[foo]'. -duplicateIdentifierChecks.ts(177,5): error TS2300: Duplicate identifier '[foo]'. +duplicateIdentifierChecks.ts(176,5): error TS2300: Duplicate identifier 'foo'. +duplicateIdentifierChecks.ts(177,5): error TS2300: Duplicate identifier 'foo'. duplicateIdentifierChecks.ts(181,9): error TS2300: Duplicate identifier '[foo]'. duplicateIdentifierChecks.ts(182,5): error TS2300: Duplicate identifier '[foo]'. duplicateIdentifierChecks.ts(183,9): error TS2300: Duplicate identifier '[foo]'. @@ -97,7 +102,7 @@ duplicateIdentifierChecks.ts(208,5): error TS2300: Duplicate identifier '[sym]'. duplicateIdentifierChecks.ts(209,9): error TS2300: Duplicate identifier '[sym]'. -==== duplicateIdentifierChecks.ts (97 errors) ==== +==== duplicateIdentifierChecks.ts (102 errors) ==== // Every member declaration in the following should produce a duplicate identifier error. interface I1 { @@ -396,8 +401,14 @@ duplicateIdentifierChecks.ts(209,9): error TS2300: Duplicate identifier '[sym]'. interface I11 { get [foo](): number; + ~~~~~ +!!! error TS2300: Duplicate identifier 'foo'. foo: number; + ~~~ +!!! error TS2300: Duplicate identifier 'foo'. set [foo](value: number); + ~~~~~ +!!! error TS2300: Duplicate identifier 'foo'. } interface I12 { @@ -418,7 +429,11 @@ duplicateIdentifierChecks.ts(209,9): error TS2300: Duplicate identifier '[sym]'. interface I13 { foo: number; + ~~~ +!!! error TS2300: Duplicate identifier 'foo'. [foo]: number; + ~~~~~ +!!! error TS2300: Duplicate identifier 'foo'. } interface I14 { @@ -430,7 +445,7 @@ duplicateIdentifierChecks.ts(209,9): error TS2300: Duplicate identifier '[sym]'. !!! error TS2300: Duplicate identifier 'foo'. [foo]: number; ~~~~~ -!!! error TS2300: Duplicate identifier '[foo]'. +!!! error TS2300: Duplicate identifier 'foo'. } interface I15 { @@ -439,10 +454,10 @@ duplicateIdentifierChecks.ts(209,9): error TS2300: Duplicate identifier '[sym]'. !!! error TS2300: Duplicate identifier 'foo'. [foo]: number; ~~~~~ -!!! error TS2300: Duplicate identifier '[foo]'. +!!! error TS2300: Duplicate identifier 'foo'. [foo]: number; ~~~~~ -!!! error TS2300: Duplicate identifier '[foo]'. +!!! error TS2300: Duplicate identifier 'foo'. } declare class C10 { diff --git a/tsc/testdata/baselines/reference/compiler/duplicateIdentifierChecks.symbols b/tsc/testdata/baselines/reference/compiler/duplicateIdentifierChecks.symbols index a4a9f345f0020..ee4b6c5df85f7 100644 --- a/tsc/testdata/baselines/reference/compiler/duplicateIdentifierChecks.symbols +++ b/tsc/testdata/baselines/reference/compiler/duplicateIdentifierChecks.symbols @@ -354,14 +354,14 @@ interface I11 { >I11 : Symbol(I11, Decl(duplicateIdentifierChecks.ts, 148, 1)) get [foo](): number; ->[foo] : Symbol(I11[foo], Decl(duplicateIdentifierChecks.ts, 150, 15), Decl(duplicateIdentifierChecks.ts, 152, 16)) +>[foo] : Symbol(I11.foo, Decl(duplicateIdentifierChecks.ts, 151, 24), Decl(duplicateIdentifierChecks.ts, 150, 15), Decl(duplicateIdentifierChecks.ts, 152, 16)) >foo : Symbol(foo, Decl(duplicateIdentifierChecks.ts, 142, 5)) foo: number; ->foo : Symbol(I11.foo, Decl(duplicateIdentifierChecks.ts, 151, 24)) +>foo : Symbol(I11.foo, Decl(duplicateIdentifierChecks.ts, 151, 24), Decl(duplicateIdentifierChecks.ts, 150, 15), Decl(duplicateIdentifierChecks.ts, 152, 16)) set [foo](value: number); ->[foo] : Symbol(I11[foo], Decl(duplicateIdentifierChecks.ts, 150, 15), Decl(duplicateIdentifierChecks.ts, 152, 16)) +>[foo] : Symbol(I11.foo, Decl(duplicateIdentifierChecks.ts, 151, 24), Decl(duplicateIdentifierChecks.ts, 150, 15), Decl(duplicateIdentifierChecks.ts, 152, 16)) >foo : Symbol(foo, Decl(duplicateIdentifierChecks.ts, 142, 5)) >value : Symbol(value, Decl(duplicateIdentifierChecks.ts, 153, 14)) } @@ -386,10 +386,10 @@ interface I13 { >I13 : Symbol(I13, Decl(duplicateIdentifierChecks.ts, 160, 1)) foo: number; ->foo : Symbol(I13.foo, Decl(duplicateIdentifierChecks.ts, 162, 15)) +>foo : Symbol(I13.foo, Decl(duplicateIdentifierChecks.ts, 162, 15), Decl(duplicateIdentifierChecks.ts, 163, 16)) [foo]: number; ->[foo] : Symbol(I13[foo], Decl(duplicateIdentifierChecks.ts, 163, 16)) +>[foo] : Symbol(I13.foo, Decl(duplicateIdentifierChecks.ts, 162, 15), Decl(duplicateIdentifierChecks.ts, 163, 16)) >foo : Symbol(foo, Decl(duplicateIdentifierChecks.ts, 142, 5)) } @@ -397,13 +397,13 @@ interface I14 { >I14 : Symbol(I14, Decl(duplicateIdentifierChecks.ts, 165, 1)) foo: number; ->foo : Symbol(I14.foo, Decl(duplicateIdentifierChecks.ts, 167, 15), Decl(duplicateIdentifierChecks.ts, 168, 16)) +>foo : Symbol(I14.foo, Decl(duplicateIdentifierChecks.ts, 167, 15), Decl(duplicateIdentifierChecks.ts, 168, 16), Decl(duplicateIdentifierChecks.ts, 169, 16)) foo: number; ->foo : Symbol(I14.foo, Decl(duplicateIdentifierChecks.ts, 167, 15), Decl(duplicateIdentifierChecks.ts, 168, 16)) +>foo : Symbol(I14.foo, Decl(duplicateIdentifierChecks.ts, 167, 15), Decl(duplicateIdentifierChecks.ts, 168, 16), Decl(duplicateIdentifierChecks.ts, 169, 16)) [foo]: number; ->[foo] : Symbol(I14[foo], Decl(duplicateIdentifierChecks.ts, 169, 16)) +>[foo] : Symbol(I14.foo, Decl(duplicateIdentifierChecks.ts, 167, 15), Decl(duplicateIdentifierChecks.ts, 168, 16), Decl(duplicateIdentifierChecks.ts, 169, 16)) >foo : Symbol(foo, Decl(duplicateIdentifierChecks.ts, 142, 5)) } @@ -411,14 +411,14 @@ interface I15 { >I15 : Symbol(I15, Decl(duplicateIdentifierChecks.ts, 171, 1)) foo: number; ->foo : Symbol(I15.foo, Decl(duplicateIdentifierChecks.ts, 173, 15)) +>foo : Symbol(I15.foo, Decl(duplicateIdentifierChecks.ts, 173, 15), Decl(duplicateIdentifierChecks.ts, 174, 16), Decl(duplicateIdentifierChecks.ts, 175, 18)) [foo]: number; ->[foo] : Symbol(I15[foo], Decl(duplicateIdentifierChecks.ts, 174, 16), Decl(duplicateIdentifierChecks.ts, 175, 18)) +>[foo] : Symbol(I15.foo, Decl(duplicateIdentifierChecks.ts, 173, 15), Decl(duplicateIdentifierChecks.ts, 174, 16), Decl(duplicateIdentifierChecks.ts, 175, 18)) >foo : Symbol(foo, Decl(duplicateIdentifierChecks.ts, 142, 5)) [foo]: number; ->[foo] : Symbol(I15[foo], Decl(duplicateIdentifierChecks.ts, 174, 16), Decl(duplicateIdentifierChecks.ts, 175, 18)) +>[foo] : Symbol(I15.foo, Decl(duplicateIdentifierChecks.ts, 173, 15), Decl(duplicateIdentifierChecks.ts, 174, 16), Decl(duplicateIdentifierChecks.ts, 175, 18)) >foo : Symbol(foo, Decl(duplicateIdentifierChecks.ts, 142, 5)) } diff --git a/tsc/testdata/baselines/reference/compiler/dynamicNamesErrors.errors.txt b/tsc/testdata/baselines/reference/compiler/dynamicNamesErrors.errors.txt index e9240517ec9a4..e656bedf2af57 100644 --- a/tsc/testdata/baselines/reference/compiler/dynamicNamesErrors.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/dynamicNamesErrors.errors.txt @@ -1,3 +1,5 @@ +dynamicNamesErrors.ts(5,5): error TS2300: Duplicate identifier '1'. +dynamicNamesErrors.ts(6,5): error TS2300: Duplicate identifier '1'. dynamicNamesErrors.ts(18,5): error TS2300: Duplicate identifier '[c0]'. dynamicNamesErrors.ts(19,5): error TS2300: Duplicate identifier '[c0]'. dynamicNamesErrors.ts(19,5): error TS2717: Subsequent property declarations must have the same type. Property '[c1]' must be of type 'number', but here has type 'string'. @@ -10,13 +12,17 @@ dynamicNamesErrors.ts(25,1): error TS2322: Type 'T1' is not assignable to type ' dynamicNamesErrors.ts(43,5): error TS2564: Property '[x]' has no initializer and is not definitely assigned in the constructor. -==== dynamicNamesErrors.ts (6 errors) ==== +==== dynamicNamesErrors.ts (8 errors) ==== const c0 = "1"; const c1 = 1; interface T0 { [c0]: number; + ~~~~ +!!! error TS2300: Duplicate identifier '1'. 1: number; + ~ +!!! error TS2300: Duplicate identifier '1'. } interface T1 { diff --git a/tsc/testdata/baselines/reference/compiler/dynamicNamesErrors.symbols b/tsc/testdata/baselines/reference/compiler/dynamicNamesErrors.symbols index 7d6b050bd5254..a690a6a1c06df 100644 --- a/tsc/testdata/baselines/reference/compiler/dynamicNamesErrors.symbols +++ b/tsc/testdata/baselines/reference/compiler/dynamicNamesErrors.symbols @@ -11,11 +11,11 @@ interface T0 { >T0 : Symbol(T0, Decl(dynamicNamesErrors.ts, 1, 13)) [c0]: number; ->[c0] : Symbol(T0[c0], Decl(dynamicNamesErrors.ts, 3, 14)) +>[c0] : Symbol(T0[1], Decl(dynamicNamesErrors.ts, 4, 17), Decl(dynamicNamesErrors.ts, 3, 14)) >c0 : Symbol(c0, Decl(dynamicNamesErrors.ts, 0, 5)) 1: number; ->1 : Symbol(T0[1], Decl(dynamicNamesErrors.ts, 4, 17)) +>1 : Symbol(T0[1], Decl(dynamicNamesErrors.ts, 4, 17), Decl(dynamicNamesErrors.ts, 3, 14)) } interface T1 { diff --git a/tsc/testdata/baselines/reference/conformance/staticPropertyNameConflicts(target=es2015,usedefineforclassfields=false).types b/tsc/testdata/baselines/reference/conformance/staticPropertyNameConflicts(target=es2015,usedefineforclassfields=false).types index f5be9eaed3136..fefe61aa299cf 100644 --- a/tsc/testdata/baselines/reference/conformance/staticPropertyNameConflicts(target=es2015,usedefineforclassfields=false).types +++ b/tsc/testdata/baselines/reference/conformance/staticPropertyNameConflicts(target=es2015,usedefineforclassfields=false).types @@ -149,7 +149,7 @@ class StaticPrototype2 { >StaticPrototype2 : StaticPrototype2 static [FunctionPropertyNames.prototype]: number; // always an error ->[FunctionPropertyNames.prototype] : number +>[FunctionPropertyNames.prototype] : StaticPrototype2 >FunctionPropertyNames.prototype : "prototype" >FunctionPropertyNames : { readonly name: 'name'; readonly length: 'length'; readonly prototype: 'prototype'; readonly caller: 'caller'; readonly arguments: 'arguments'; } >prototype : "prototype" @@ -427,7 +427,7 @@ var StaticPrototype_Anonymous2 = class { >class { static [FunctionPropertyNames.prototype]: number; // always an error [FunctionPropertyNames.prototype]: string; // ok} : typeof StaticPrototype_Anonymous2 static [FunctionPropertyNames.prototype]: number; // always an error ->[FunctionPropertyNames.prototype] : number +>[FunctionPropertyNames.prototype] : StaticPrototype_Anonymous2 >FunctionPropertyNames.prototype : "prototype" >FunctionPropertyNames : { readonly name: 'name'; readonly length: 'length'; readonly prototype: 'prototype'; readonly caller: 'caller'; readonly arguments: 'arguments'; } >prototype : "prototype" @@ -725,7 +725,7 @@ export class ExportedStaticPrototype { >ExportedStaticPrototype : ExportedStaticPrototype static [FunctionPropertyNames.prototype]: number; // always an error ->[FunctionPropertyNames.prototype] : number +>[FunctionPropertyNames.prototype] : ExportedStaticPrototype >FunctionPropertyNames.prototype : "prototype" >FunctionPropertyNames : { readonly name: 'name'; readonly length: 'length'; readonly prototype: 'prototype'; readonly caller: 'caller'; readonly arguments: 'arguments'; } >prototype : "prototype" diff --git a/tsc/testdata/baselines/reference/conformance/staticPropertyNameConflicts(target=es2015,usedefineforclassfields=true).types b/tsc/testdata/baselines/reference/conformance/staticPropertyNameConflicts(target=es2015,usedefineforclassfields=true).types index f5be9eaed3136..fefe61aa299cf 100644 --- a/tsc/testdata/baselines/reference/conformance/staticPropertyNameConflicts(target=es2015,usedefineforclassfields=true).types +++ b/tsc/testdata/baselines/reference/conformance/staticPropertyNameConflicts(target=es2015,usedefineforclassfields=true).types @@ -149,7 +149,7 @@ class StaticPrototype2 { >StaticPrototype2 : StaticPrototype2 static [FunctionPropertyNames.prototype]: number; // always an error ->[FunctionPropertyNames.prototype] : number +>[FunctionPropertyNames.prototype] : StaticPrototype2 >FunctionPropertyNames.prototype : "prototype" >FunctionPropertyNames : { readonly name: 'name'; readonly length: 'length'; readonly prototype: 'prototype'; readonly caller: 'caller'; readonly arguments: 'arguments'; } >prototype : "prototype" @@ -427,7 +427,7 @@ var StaticPrototype_Anonymous2 = class { >class { static [FunctionPropertyNames.prototype]: number; // always an error [FunctionPropertyNames.prototype]: string; // ok} : typeof StaticPrototype_Anonymous2 static [FunctionPropertyNames.prototype]: number; // always an error ->[FunctionPropertyNames.prototype] : number +>[FunctionPropertyNames.prototype] : StaticPrototype_Anonymous2 >FunctionPropertyNames.prototype : "prototype" >FunctionPropertyNames : { readonly name: 'name'; readonly length: 'length'; readonly prototype: 'prototype'; readonly caller: 'caller'; readonly arguments: 'arguments'; } >prototype : "prototype" @@ -725,7 +725,7 @@ export class ExportedStaticPrototype { >ExportedStaticPrototype : ExportedStaticPrototype static [FunctionPropertyNames.prototype]: number; // always an error ->[FunctionPropertyNames.prototype] : number +>[FunctionPropertyNames.prototype] : ExportedStaticPrototype >FunctionPropertyNames.prototype : "prototype" >FunctionPropertyNames : { readonly name: 'name'; readonly length: 'length'; readonly prototype: 'prototype'; readonly caller: 'caller'; readonly arguments: 'arguments'; } >prototype : "prototype" From c7966eb96bab6cc5035ebc78fe1a77508fe154f0 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 23 Oct 2026 09:04:27 -0700 Subject: [PATCH 074/194] Track explicit type and assertion operand resolution on the stack The guards against resolving a symbol's explicit type or an assertion's operand re-entrantly were side sets outside the resolution stack, so whatever a re-entrant lookup derived from their failure outlived it and could depend on which was checked first. Recording them as resolutions lets the failure discard what was derived from it, like any other cycle. --- tsc/internal/checker/checker.go | 43 +++++++++++++++++++-------------- tsc/internal/checker/flow.go | 5 ++-- 2 files changed, 28 insertions(+), 20 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 75c9610032fd6..128b2321a86b1 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -74,6 +74,8 @@ const ( TypeSystemPropertyNameSimplifiedForWriting TypeSystemPropertyNameDefaultType TypeSystemPropertyNameAwaitedType + TypeSystemPropertyNameExplicitType + TypeSystemPropertyNameAssertionOperand TypeSystemPropertyNamePatternInitializer ) @@ -691,8 +693,6 @@ type Checker struct { varianceGuessed []*ast.Symbol // Keys of varianceGuesses in order of addition flushStates *[]*memoState // Collects memo states given effects to replay, if non-nil; see withoutChecking callResolutionStack []*ast.Node - resolvingExplicitTypeOfSymbol collections.Set[*ast.Symbol] - resolvingAssertionOperands collections.Set[*ast.Node] resolvingBindingElementParents collections.Set[*ast.Node] // Binding element parents whose types are being resolved to narrow a reference apparentArgumentCount *int lastGetCombinedNodeFlagsNode *ast.Node @@ -12890,7 +12890,7 @@ func (c *Checker) checkAssertion(node *ast.Node, checkMode CheckMode) *Type { var exprType *Type if isConst { exprType = c.checkExpressionEx(node.Expression(), checkMode) - } else if c.resolvingAssertionOperands.AddIfAbsent(node) { + } else if !c.isResolvingAnywhere(node, TypeSystemPropertyNameAssertionOperand) { // Only the deferred check uses the operand type, and it uses the // cached one, so compute that here rather than checking twice. The // operand is contextually typed by the asserted type alone; hiding @@ -12900,10 +12900,11 @@ func (c *Checker) checkAssertion(node *ast.Node, checkMode CheckMode) *Type { // assertion is re-entered when the operand's flow type depends on // a call containing it within a loop; the enclosing computation // then provides the cached type. + c.beginTypeResolution(node, TypeSystemPropertyNameAssertionOperand) c.pushInferenceContext(node.Expression(), nil) c.checkExpressionCached(node.Expression()) c.popInferenceContext() - c.resolvingAssertionOperands.Delete(node) + c.popTypeResolution() } // Always check the type node so its identifiers are resolved. resolveName knows not // to resolve (or report an error for) the `const` in a `const` assertion, so this is @@ -20097,6 +20098,22 @@ func (c *Checker) isResolutionInProgress(target TypeSystemEntity, propertyName T return true } +// isResolvingAnywhere reports whether the property of target is being +// resolved. A computation finding it so fails, as computing it from scratch +// would, so the results cached since it started are discarded when it +// finishes, like those of any other failure, and every caller computes them +// again and reports the failure. Unlike isResolutionInProgress, it searches +// the whole stack, for computations that would not otherwise stop. +func (c *Checker) isResolvingAnywhere(target TypeSystemEntity, propertyName TypeSystemPropertyName) bool { + for i := c.typeResolutionTop - 1; i >= 0; i = int(c.resolutions[i].prevTypeResolution) - 1 { + if r := &c.resolutions[i].typeResolution; r.target == target && r.propertyName == propertyName { + c.markTypeResolutionCircular(i) + return true + } + } + return false +} + // observeCircularHead is for computations where re-entering one in progress // fails only that computation, while the others complete from its failed // result. Which member fails then depends on which was entered first, so the @@ -20332,7 +20349,7 @@ func (c *Checker) typeResolutionHasProperty(r *TypeResolution) bool { return c.aliasSymbolLinks.Get(r.target.(*ast.Symbol)).aliasTarget.peek() != nil case TypeSystemPropertyNameContextChecked, TypeSystemPropertyNameStructuredMembers, TypeSystemPropertyNameCurrentNode, TypeSystemPropertyNameSimplifiedForReading, TypeSystemPropertyNameSimplifiedForWriting, TypeSystemPropertyNameDefaultType, - TypeSystemPropertyNameAwaitedType, TypeSystemPropertyNamePatternInitializer: + TypeSystemPropertyNameAwaitedType, TypeSystemPropertyNameExplicitType, TypeSystemPropertyNameAssertionOperand, TypeSystemPropertyNamePatternInitializer: // Marked as checked or resolved on entry, so it is only on the stack // while in progress. return false @@ -33778,20 +33795,10 @@ func (c *Checker) pushAwaitingType(t *Type) { c.beginTypeResolution(t, TypeSystemPropertyNameAwaitedType) } -// isAwaitingType reports whether the awaited type of t is being computed. A -// computation finding it so fails, as computing it from scratch would, so -// the results cached since it started are discarded when it finishes, like -// those of any other failure, and every caller computes them again and -// reports the failure. Unlike isResolutionInProgress, it searches the whole -// stack, since the computation would not otherwise stop. +// isAwaitingType reports whether the awaited type of t is being computed; +// see isResolvingAnywhere. func (c *Checker) isAwaitingType(t *Type) bool { - for i := c.typeResolutionTop - 1; i >= 0; i = int(c.resolutions[i].prevTypeResolution) - 1 { - if r := &c.resolutions[i].typeResolution; r.target == t && r.propertyName == TypeSystemPropertyNameAwaitedType { - c.markTypeResolutionCircular(i) - return true - } - } - return false + return c.isResolvingAnywhere(t, TypeSystemPropertyNameAwaitedType) } func (c *Checker) isAwaitedTypeInstantiation(t *Type) bool { diff --git a/tsc/internal/checker/flow.go b/tsc/internal/checker/flow.go index 7db6d21859830..59868f7feb10d 100644 --- a/tsc/internal/checker/flow.go +++ b/tsc/internal/checker/flow.go @@ -2199,10 +2199,11 @@ func (c *Checker) getTypeOfDottedName(node *ast.Node, diagnostic *ast.Diagnostic func (c *Checker) getExplicitTypeOfSymbol(symbol *ast.Symbol, diagnostic *ast.Diagnostic) *Type { symbol = c.resolveSymbol(symbol) - if !c.resolvingExplicitTypeOfSymbol.AddIfAbsent(symbol) { + if c.isResolvingAnywhere(symbol, TypeSystemPropertyNameExplicitType) { return nil } - defer c.resolvingExplicitTypeOfSymbol.Delete(symbol) + c.beginTypeResolution(symbol, TypeSystemPropertyNameExplicitType) + defer c.popTypeResolution() if symbol.Flags()&(ast.SymbolFlagsFunction|ast.SymbolFlagsMethod|ast.SymbolFlagsClass|ast.SymbolFlagsValueModule) != 0 { return c.getTypeOfSymbol(symbol) } From 83c577271b724f207cccb3c406ae1f2a89dd38ca Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 23 Oct 2026 11:45:01 -0700 Subject: [PATCH 075/194] Find simplifications in progress on the resolution stack Simplifying an indexed access already pushes a type resolution, so a separate set of simplifications in progress duplicated it. The set was also searched across the whole stack while the cycle it found was only marked circular from the current resolution start, so a re-entry that crossed that boundary returned the unsimplified type without discarding the results that depended on it. --- tsc/internal/checker/checker.go | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 128b2321a86b1..6a3e89a41a4c9 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -634,7 +634,6 @@ type Checker struct { inlineLevel depthLimit serializationLevel depthLimit currentNode *ast.Node - simplifyingIndexedAccess collections.Set[CachedTypeKey] currentNodeResolution int // 1-based index in resolutions of the resolution of currentNode, or 0; see enterCurrentNode varianceTypeParameter *Type isInferencePartiallyBlocked bool @@ -30240,14 +30239,11 @@ func (c *Checker) getSimplifiedIndexedAccessType(t *Type, writing bool) *Type { return cached } propertyName := core.IfElse(writing, TypeSystemPropertyNameSimplifiedForWriting, TypeSystemPropertyNameSimplifiedForReading) - if c.simplifyingIndexedAccess.Has(key) { - // Resolve circular references to t itself while simplifying, which - // depends on the simplification in progress. - c.isResolutionInProgress(t, propertyName) + if c.isResolvingAnywhere(t, propertyName) { + // Resolve circular references to t itself while simplifying. return t } c.cachedTypes.begin(c, key) - c.simplifyingIndexedAccess.Add(key) c.beginTypeResolution(t, propertyName) result := c.getSimplifiedIndexedAccessTypeWorker(t, writing) if result != t { @@ -30255,7 +30251,6 @@ func (c *Checker) getSimplifiedIndexedAccessType(t *Type, writing bool) *Type { result = c.removeType(result, t) } c.cachedTypes.set(c, key, result) - c.simplifyingIndexedAccess.Delete(key) c.popTypeResolution() c.endMemo() return result From 67ecf6edccb3229801858ea64b1372b8e8ee558a Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 23 Oct 2026 09:14:55 -0700 Subject: [PATCH 076/194] Track binding element parent resolution on the resolution stack Narrowing a binding element resolves its parent's type, and guarded against re-entry with a side set outside the resolution stack, so what a re-entrant narrowing derived from finding the parent unresolved outlived it. Recording it as a resolution discards that like any other cycle. --- tsc/internal/checker/checker.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 6a3e89a41a4c9..e051fbbf544f5 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -75,6 +75,7 @@ const ( TypeSystemPropertyNameDefaultType TypeSystemPropertyNameAwaitedType TypeSystemPropertyNameExplicitType + TypeSystemPropertyNameBindingElementParent TypeSystemPropertyNameAssertionOperand TypeSystemPropertyNamePatternInitializer ) @@ -692,7 +693,6 @@ type Checker struct { varianceGuessed []*ast.Symbol // Keys of varianceGuesses in order of addition flushStates *[]*memoState // Collects memo states given effects to replay, if non-nil; see withoutChecking callResolutionStack []*ast.Node - resolvingBindingElementParents collections.Set[*ast.Node] // Binding element parents whose types are being resolved to narrow a reference apparentArgumentCount *int lastGetCombinedNodeFlagsNode *ast.Node lastGetCombinedNodeFlagsResult ast.NodeFlags @@ -14497,15 +14497,15 @@ func (c *Checker) getNarrowedTypeOfSymbol(symbol *ast.Symbol, location *ast.Node } parent := declaration.Parent.Parent if ast.IsVariableDeclaration(rootDeclaration) && c.getCombinedNodeFlagsCached(rootDeclaration)&ast.NodeFlagsConstant != 0 || ast.IsParameterDeclaration(rootDeclaration) { - if !c.resolvingBindingElementParents.Has(parent) { - c.resolvingBindingElementParents.Add(parent) + if !c.isResolvingAnywhere(parent, TypeSystemPropertyNameBindingElementParent) { + c.beginTypeResolution(parent, TypeSystemPropertyNameBindingElementParent) parentType := c.getTypeForBindingElementParent(parent, CheckModeNormal) var parentTypeConstraint *Type if parentType != nil { parentTypeConstraint = c.mapType(parentType, c.getBaseConstraintOrType) } // Guard parent-type resolution only; flow analysis should allow re-entrant narrowing - c.resolvingBindingElementParents.Delete(parent) + c.popTypeResolution() if parentTypeConstraint != nil && parentTypeConstraint.flags&TypeFlagsUnion != 0 && !(ast.IsParameterDeclaration(rootDeclaration) && c.isSomeSymbolAssigned(rootDeclaration)) { pattern := declaration.Parent narrowedType := c.getFlowTypeOfReferenceEx(pattern, parentTypeConstraint, parentTypeConstraint, nil /*flowContainer*/, getFlowNodeOfNode(location)) @@ -20348,7 +20348,9 @@ func (c *Checker) typeResolutionHasProperty(r *TypeResolution) bool { return c.aliasSymbolLinks.Get(r.target.(*ast.Symbol)).aliasTarget.peek() != nil case TypeSystemPropertyNameContextChecked, TypeSystemPropertyNameStructuredMembers, TypeSystemPropertyNameCurrentNode, TypeSystemPropertyNameSimplifiedForReading, TypeSystemPropertyNameSimplifiedForWriting, TypeSystemPropertyNameDefaultType, - TypeSystemPropertyNameAwaitedType, TypeSystemPropertyNameExplicitType, TypeSystemPropertyNameAssertionOperand, TypeSystemPropertyNamePatternInitializer: + TypeSystemPropertyNameAwaitedType, TypeSystemPropertyNameExplicitType, + TypeSystemPropertyNameBindingElementParent, + TypeSystemPropertyNameAssertionOperand, TypeSystemPropertyNamePatternInitializer: // Marked as checked or resolved on entry, so it is only on the stack // while in progress. return false From 43782fc7d4d30a7a6e3435a7b9a6f208490b6ff8 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 23 Oct 2026 11:09:35 -0700 Subject: [PATCH 077/194] Track call resolution on the resolution stack Resolving a call again while it is being resolved skips constraint checks, so what the inner pass derives depends on the outer call's inference in progress and must not be cached as if final. The inner pass is recorded only on a stack of its own, so if the call were the only computation it re-entered, nothing would count it as a cycle and its results would be kept. No test reaches that today: every recursive resolution in the suite also re-enters another computation still in progress, which discards the pass. Recording call resolution as a resolution makes re-entering it a cycle by itself rather than relying on that. --- tsc/internal/checker/checker.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index e051fbbf544f5..7e0772a5db0cf 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -76,6 +76,7 @@ const ( TypeSystemPropertyNameAwaitedType TypeSystemPropertyNameExplicitType TypeSystemPropertyNameBindingElementParent + TypeSystemPropertyNameCallResolution TypeSystemPropertyNameAssertionOperand TypeSystemPropertyNamePatternInitializer ) @@ -692,7 +693,6 @@ type Checker struct { varianceGuesses map[*ast.Symbol][]VarianceFlags // Variances assumed for measurements in progress; see getVariancesWorker varianceGuessed []*ast.Symbol // Keys of varianceGuesses in order of addition flushStates *[]*memoState // Collects memo states given effects to replay, if non-nil; see withoutChecking - callResolutionStack []*ast.Node apparentArgumentCount *int lastGetCombinedNodeFlagsNode *ast.Node lastGetCombinedNodeFlagsResult ast.NodeFlags @@ -9416,15 +9416,15 @@ func (c *Checker) resolveCall(node *ast.Node, signatures []*Signature, candidate // is just important for choosing the best signature. So in the case where there is only one // signature, the subtype pass is useless. So skipping it is an optimization. var result *Signature - s.recursiveResolution = slices.Contains(c.callResolutionStack, s.node) - c.callResolutionStack = append(c.callResolutionStack, s.node) + s.recursiveResolution = c.isResolvingAnywhere(s.node, TypeSystemPropertyNameCallResolution) + c.beginTypeResolution(s.node, TypeSystemPropertyNameCallResolution) if len(s.candidates) > 1 { result = c.chooseOverload(&s, c.subtypeRelation) } if result == nil { result = c.chooseOverload(&s, c.assignableRelation) } - c.callResolutionStack = c.callResolutionStack[:len(c.callResolutionStack)-1] + c.popTypeResolution() if result != nil { return result } @@ -20349,7 +20349,7 @@ func (c *Checker) typeResolutionHasProperty(r *TypeResolution) bool { case TypeSystemPropertyNameContextChecked, TypeSystemPropertyNameStructuredMembers, TypeSystemPropertyNameCurrentNode, TypeSystemPropertyNameSimplifiedForReading, TypeSystemPropertyNameSimplifiedForWriting, TypeSystemPropertyNameDefaultType, TypeSystemPropertyNameAwaitedType, TypeSystemPropertyNameExplicitType, - TypeSystemPropertyNameBindingElementParent, + TypeSystemPropertyNameBindingElementParent, TypeSystemPropertyNameCallResolution, TypeSystemPropertyNameAssertionOperand, TypeSystemPropertyNamePatternInitializer: // Marked as checked or resolved on entry, so it is only on the stack // while in progress. From 91ebc8fee2c8ba9740c2f1e5297da9451a892452 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 23 Oct 2026 11:37:03 -0700 Subject: [PATCH 078/194] Don't keep reverse mappings cut short by enclosing ones A reverse mapping stops expanding when the enclosing reverse mappings show it is deeply nested. That decision depends on the mappings around it, not on the cache key, so caching the truncated result lets the order in which mappings are first computed decide later answers. Only the outermost reverse mapping is computed without enclosing ones, so a stop now marks as circular everything back to it: its result is kept, and the nested results that depended on the stack are recomputed when needed. --- tsc/internal/checker/checker.go | 1 + tsc/internal/checker/inference.go | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 7e0772a5db0cf..87aac2afd8630 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -716,6 +716,7 @@ type Checker struct { reverseMappedTargetStack []*Type resolvingObjectTypeStack []ResolvingObjectType reverseExpandingFlags ExpandingFlags + reverseMappedStart int32 freeRelater *Relater getGlobalESSymbolType func() *Type getGlobalBigIntType func() *Type diff --git a/tsc/internal/checker/inference.go b/tsc/internal/checker/inference.go index 4b63eeb57e0a1..9f390e8057107 100644 --- a/tsc/internal/checker/inference.go +++ b/tsc/internal/checker/inference.go @@ -1082,6 +1082,9 @@ func (c *Checker) inferReverseMappedType(source *Type, target *Type, constraint return core.OrElse(cached, c.unknownType) } c.reverseMappedCache.begin(c, key) + if len(c.reverseMappedSourceStack) == 0 { + c.reverseMappedStart = int32(len(c.resolutions) - 1) + } c.reverseMappedSourceStack = append(c.reverseMappedSourceStack, source) c.reverseMappedTargetStack = append(c.reverseMappedTargetStack, target) saveExpandingFlags := c.reverseExpandingFlags @@ -1094,6 +1097,10 @@ func (c *Checker) inferReverseMappedType(source *Type, target *Type, constraint var t *Type if c.reverseExpandingFlags != ExpandingFlagsBoth { t = c.inferReverseMappedTypeWorker(source, target, constraint) + } else { + // Stopping depends on the enclosing reverse mappings, not just on key, so + // only the outermost one, which has none, may keep a result. + c.markCircular(int(c.reverseMappedStart)) } c.reverseMappedSourceStack = c.reverseMappedSourceStack[:len(c.reverseMappedSourceStack)-1] c.reverseMappedTargetStack = c.reverseMappedTargetStack[:len(c.reverseMappedTargetStack)-1] From bac78336dd558ea3ecd661e01580112c0d3f0e33 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 23 Oct 2026 14:58:12 -0700 Subject: [PATCH 079/194] Document how type comparisons relate to cycles Comparisons assume themselves rather than treating re-entry as a circularity, so they look like an exception to the cycle rules. Spell out why they still compose: the relater caches only results that hold whatever they assumed, and the resolutions it runs in still discard what was cached during a checker cycle. Nested relaters do not share assumptions, which matches computing them first. --- tsc/internal/checker/memo.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 15cb7968b6c89..10ec380214805 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -1095,6 +1095,16 @@ func (c *Checker) memoEffectsAt(i int) *memoEffects { // detected (its participants) are kept: each of them reaches the cycle when // computed from scratch too, so each result is the fallback for a circularity // whichever participant is computed first. +// +// Type comparisons are the exception: a comparison that reaches itself +// assumes it holds rather than being a circularity, since relations are +// coinductive. The Relater tracks those assumptions itself (see +// recursiveTypeRelatedTo), and caches only results that hold whatever they +// assumed. Each comparison is still a resolution, so circularities through +// other computations it needs are handled as above, discarding the relation +// results cached during them. A comparison that needs another relater, as in +// variance measurement, does not see the assumptions of the outer one, so it +// compares from scratch, as it would if run first. // Discard log // From 475d8ed590ed04af88998e445b923983d20b3472 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 26 Oct 2026 13:50:27 -0700 Subject: [PATCH 080/194] Don't cache errors reported at a caller's node The iteration, awaited, and promised types of a type are cached by the type alone, but computing them with an error node also reported errors at that node. Those errors were retained as effects of the cached result, so whatever reused it next replayed them, even a caller that reports nothing. Querying the type of `...c` in var c = {}; [...c] = ["", 0]; checks it as a spread and caches that `{}` is not iterable, and checking the assignment later replayed the error, though `c` is only assigned there. Conversely, a cached success skipped errors that a slow path reports alongside its result, so only the first site reported them. Callers with an error node now compute in their own context, where errors belong to their node, and the cache is only ever computed and read without one. Found with TS_CHECK_ORDER_FUZZ=8 in nonIterableRestElement1, seed 4, querying the type of `...c` first. --- tsc/internal/checker/checker.go | 71 +++++++++++++++++++-------------- 1 file changed, 41 insertions(+), 30 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 87aac2afd8630..698cef24e4353 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -6588,38 +6588,35 @@ func (c *Checker) getIterationTypesOfIterable(t *Type, use IterationUse, errorNo if IsTypeAny(t) { return IterationTypes{c.anyType, c.anyType, c.anyType} } + if errorNode != nil { + // Errors belong to errorNode, so compute them here rather than + // cache them with the types every other use of t shares. + return c.getIterationTypesOfIterableWorker(t, use, errorNode) + } + key := IterationTypesKey{typeId: t.id, use: use & IterationUseCacheFlags} if c.memoActive() { - c.iterationTypesCache.begin(c, IterationTypesKey{typeId: t.id, use: use & IterationUseCacheFlags}) - result := c.getIterationTypesOfIterableCached(t, use, errorNode) + c.iterationTypesCache.begin(c, key) + result := c.getIterationTypesOfIterableCached(t, use, key) c.endMemo() return result } - return c.getIterationTypesOfIterableCached(t, use, errorNode) + return c.getIterationTypesOfIterableCached(t, use, key) } -func (c *Checker) getIterationTypesOfIterableCached(t *Type, use IterationUse, errorNode *ast.Node) IterationTypes { - key := IterationTypesKey{typeId: t.id, use: use & IterationUseCacheFlags} - // If we are reporting errors and encounter a cached `noIterationTypes`, we should ignore the cached value and continue as if nothing was cached. - // In addition, we should not cache any new results for this call. - noCache := false +func (c *Checker) getIterationTypesOfIterableCached(t *Type, use IterationUse, key IterationTypesKey) IterationTypes { if cached, ok := c.iterationTypesCache.get(c, key); ok { - if errorNode == nil || cached.hasTypes() { - return cached - } - noCache = true - } - result := c.getIterationTypesOfIterableWorker(t, use, errorNode, noCache) - if !noCache { - c.iterationTypesCache.set(c, key, result) + return cached } + result := c.getIterationTypesOfIterableWorker(t, use, nil /*errorNode*/) + c.iterationTypesCache.set(c, key, result) return result } -func (c *Checker) getIterationTypesOfIterableWorker(t *Type, use IterationUse, errorNode *ast.Node, noCache bool) IterationTypes { +func (c *Checker) getIterationTypesOfIterableWorker(t *Type, use IterationUse, errorNode *ast.Node) IterationTypes { if t.flags&TypeFlagsUnion != 0 { allIterationTypes := make([]IterationTypes, 0, len(t.Types())) for _, constituent := range t.Types() { - iterationTypes := c.getIterationTypesOfIterableWorker(constituent, use, nil, noCache) + iterationTypes := c.getIterationTypesOfIterableWorker(constituent, use, nil) if !iterationTypes.hasTypes() { if errorNode != nil { c.addDeferredDiagnostic(func(c *Checker) { @@ -31312,16 +31309,26 @@ func (c *Checker) getPromisedTypeOfPromiseEx(t *Type, errorNode *ast.Node, thisT if IsTypeAny(t) { return nil } + if errorNode != nil { + // Errors belong to errorNode; see getIterationTypesOfIterable. + return c.getPromisedTypeOfPromiseWorker(t, errorNode, thisTypeForErrorOut) + } key := CachedTypeKey{kind: CachedTypeKindPromisedTypeOfPromise, typeId: t.id} if cached, _ := c.cachedTypes.get(c, key); cached != nil { return cached } c.cachedTypes.begin(c, key) defer c.endMemo() - if c.isReferenceToType(t, c.getGlobalPromiseType()) { - result := c.getTypeArguments(t)[0] + result := c.getPromisedTypeOfPromiseWorker(t, nil /*errorNode*/, thisTypeForErrorOut) + if result != nil { c.cachedTypes.set(c, key, result) - return result + } + return result +} + +func (c *Checker) getPromisedTypeOfPromiseWorker(t *Type, errorNode *ast.Node, thisTypeForErrorOut **Type) *Type { + if c.isReferenceToType(t, c.getGlobalPromiseType()) { + return c.getTypeArguments(t)[0] } // primitives with a `{ then() }` won't be unwrapped/adopted. if c.allTypesAssignableToKind(c.getBaseConstraintOrType(t), TypeFlagsPrimitive|TypeFlagsNever) { @@ -31373,9 +31380,7 @@ func (c *Checker) getPromisedTypeOfPromiseEx(t *Type, errorNode *ast.Node, thisT } return nil } - result := c.getUnionTypeEx(core.Map(onfulfilledParameterSignatures, c.getTypeOfFirstParameterOfSignature), UnionReductionSubtype, nil, nil) - c.cachedTypes.set(c, key, result) - return result + return c.getUnionTypeEx(core.Map(onfulfilledParameterSignatures, c.getTypeOfFirstParameterOfSignature), UnionReductionSubtype, nil, nil) } func (c *Checker) getTypeOfFirstParameterOfSignature(signature *Signature) *Type { @@ -33680,6 +33685,10 @@ func (c *Checker) getAwaitedTypeNoAliasEx(t *Type, errorNode *ast.Node, diagnost if c.isAwaitedTypeInstantiation(t) { return t } + if errorNode != nil { + // Errors belong to errorNode; see getIterationTypesOfIterable. + return c.getAwaitedTypeNoAliasWorker(t, errorNode, diagnosticMessage, args...) + } // If we've already cached an awaited type, return a possible `Awaited` for it. key := CachedTypeKey{kind: CachedTypeKindAwaitedType, typeId: t.id} if awaitedType, _ := c.cachedTypes.get(c, key); awaitedType != nil { @@ -33687,6 +33696,14 @@ func (c *Checker) getAwaitedTypeNoAliasEx(t *Type, errorNode *ast.Node, diagnost } c.cachedTypes.begin(c, key) defer c.endMemo() + awaitedType := c.getAwaitedTypeNoAliasWorker(t, nil /*errorNode*/, nil /*diagnosticMessage*/) + if awaitedType != nil { + c.cachedTypes.set(c, key, awaitedType) + } + return awaitedType +} + +func (c *Checker) getAwaitedTypeNoAliasWorker(t *Type, errorNode *ast.Node, diagnosticMessage *diagnostics.Message, args ...any) *Type { // For a union, get a union of the awaited types of each constituent. if t.flags&TypeFlagsUnion != 0 { if c.isAwaitingType(t) { @@ -33697,13 +33714,11 @@ func (c *Checker) getAwaitedTypeNoAliasEx(t *Type, errorNode *ast.Node, diagnost } c.pushAwaitingType(t) mapped := c.mapType(t, func(t *Type) *Type { return c.getAwaitedTypeNoAliasEx(t, errorNode, diagnosticMessage, args...) }) - c.cachedTypes.set(c, key, mapped) c.popTypeResolution() return mapped } // If `type` is generic and should be wrapped in `Awaited`, return it. if c.isAwaitedTypeNeeded(t) { - c.cachedTypes.set(c, key, t) return t } var thisTypeForError *Type @@ -33752,9 +33767,6 @@ func (c *Checker) getAwaitedTypeNoAliasEx(t *Type, errorNode *ast.Node, diagnost // See the comments above for more information. c.pushAwaitingType(t) awaitedType := c.getAwaitedTypeNoAliasEx(promisedType, errorNode, diagnosticMessage, args...) - if awaitedType != nil { - c.cachedTypes.set(c, key, awaitedType) - } c.popTypeResolution() return awaitedType } @@ -33783,7 +33795,6 @@ func (c *Checker) getAwaitedTypeNoAliasEx(t *Type, errorNode *ast.Node, diagnost } return nil } - c.cachedTypes.set(c, key, t) return t } From 70f2a46615a217178cb2af70b759a4054e3f4074 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 26 Oct 2026 13:54:37 -0700 Subject: [PATCH 081/194] Report missing helpers at the first location requesting them Errors for missing or incompatible tslib helpers are reported once per file, at whichever location requests a helper first. Checking requested helpers as it went, so that location depended on what had been computed before: after an editor asked for the type of `#field in this`, checking replayed that request while resolving an earlier signature, and the error moved there. Checking a file now collects its requests and checks them in source order at the end, so the error is at the first location in the file that requests the helper, however checking got there. Found with TS_CHECK_ORDER_FUZZ=8 in importHelpersNoHelpersForPrivateFields, seed 5, querying the type of `#field in this` first. --- tsc/internal/checker/checker.go | 39 ++++++++++++++++++++++++++-- tsc/internal/checker/checker_test.go | 1 + tsc/internal/checker/types.go | 1 + 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 698cef24e4353..f087f91b6468d 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -1,6 +1,7 @@ package checker import ( + "cmp" "context" "encoding/binary" "fmt" @@ -2428,6 +2429,7 @@ func (c *Checker) checkSourceFileWorker(ctx context.Context, sourceFile *ast.Sou if !sourceFile.IsDeclarationFile && !c.isCanceled() { c.checkUnusedRenamedBindingElements() } + c.checkExternalHelperRequests(sourceFile) c.produceDeferredDiagnostics() links.typeChecked = true } @@ -30932,11 +30934,44 @@ func (c *Checker) checkExternalEmitHelpers(location *ast.Node, helpers ExternalE return } if !c.checking { - // Helper errors are reported once per file at the first requesting - // location, so the check must happen in checking order. c.recordEffect(func(c *Checker) { c.checkExternalEmitHelpers(location, helpers) }) return } + links := c.sourceFileLinks.Get(sourceFile) + if links.typeChecked { + c.checkExternalEmitHelpersAt(sourceFile, location, helpers) + return + } + links.externalHelperRequests = append(links.externalHelperRequests, externalHelperRequest{location, helpers}) +} + +type externalHelperRequest struct { + location *ast.Node + helpers ExternalEmitHelpers +} + +// checkExternalHelperRequests checks the helpers requested by checking +// sourceFile. Errors are reported once per file, at the first location +// requesting a helper in the file, rather than the first location checked, +// since the order in which checking requests helpers depends on what was +// computed before. +func (c *Checker) checkExternalHelperRequests(sourceFile *ast.SourceFile) { + links := c.sourceFileLinks.Get(sourceFile) + requests := links.externalHelperRequests + links.externalHelperRequests = nil + slices.SortStableFunc(requests, func(a, b externalHelperRequest) int { + return cmp.Or( + cmp.Compare(a.location.Pos(), b.location.Pos()), + cmp.Compare(b.location.End(), a.location.End()), + cmp.Compare(a.location.Kind, b.location.Kind), + ) + }) + for _, r := range requests { + c.checkExternalEmitHelpersAt(sourceFile, r.location, r.helpers) + } +} + +func (c *Checker) checkExternalEmitHelpersAt(sourceFile *ast.SourceFile, location *ast.Node, helpers ExternalEmitHelpers) { helpersModule := c.resolveHelpersModule(sourceFile, location) if helpersModule == c.unknownSymbol { return diff --git a/tsc/internal/checker/checker_test.go b/tsc/internal/checker/checker_test.go index ff89773b352b2..2003bb90ff6ba 100644 --- a/tsc/internal/checker/checker_test.go +++ b/tsc/internal/checker/checker_test.go @@ -645,6 +645,7 @@ var unmemoizedCacheFields = map[string]string{ "NodeBuilderSymbolLinks.specifierCache": unmemoizedNodeBuilder, "SourceFileLinks.externalHelpersModule": unmemoizedChecking, "SourceFileLinks.requestedExternalEmitHelpers": unmemoizedChecking, + "SourceFileLinks.externalHelperRequests": unmemoizedChecking, "AliasSymbolLinks.typeOnlyDeclaration": unmemoizedGuarded, "NodeLinks.flags": unmemoizedNodeFlags, } diff --git a/tsc/internal/checker/types.go b/tsc/internal/checker/types.go index 9b10af5438862..fb8870905d3ea 100644 --- a/tsc/internal/checker/types.go +++ b/tsc/internal/checker/types.go @@ -480,6 +480,7 @@ type SourceFileLinks struct { typeChecked bool unusedChecked bool externalHelpersModule *ast.Symbol + externalHelperRequests []externalHelperRequest requestedExternalEmitHelpers ExternalEmitHelpers deferredNodes collections.OrderedSet[*ast.Node] identifierCheckNodes []*ast.Node From f5a182d2c1fae6f752674874f846d189c56b8034 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 27 Oct 2026 07:42:12 -0700 Subject: [PATCH 082/194] Observe a resolution's result only when it hides a cycle The cycle search reads the result of each resolution on the stack that already has one, so it records a dependency on that result. But the outcome of the search depends on it only when the target is in progress below it; otherwise the search fails whatever the result is. The spurious dependency made unrelated computations replay effects of the in-progress one, such as a circularity error, so the error moved to wherever the unrelated result was first reused, which depends on query order. --- tsc/internal/checker/checker.go | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index f087f91b6468d..771e4496cb55a 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -20304,9 +20304,10 @@ func (c *Checker) findResolutionCycleStartIndex(target TypeSystemEntity, propert for i := c.typeResolutionTop - 1; i >= c.resolutionStart; i = int(c.resolutions[i].prevTypeResolution) - 1 { resolution := &c.resolutions[i].typeResolution if c.typeResolutionHasProperty(resolution) { - // Only now does the search depend on the result, which was set - // before its computation finished. - if c.memoActive() { + // The result was set before its computation finished, which + // hides a cycle below it. Only then does the search depend on + // the result. + if c.memoActive() && c.findResolutionBelow(i, target, propertyName) { if p := c.typeResolutionMemo(resolution); p != nil { c.observeCell(p) } @@ -20320,6 +20321,18 @@ func (c *Checker) findResolutionCycleStartIndex(target TypeSystemEntity, propert return -1 } +// findResolutionBelow reports whether a type resolution of target below the +// one at index i is in progress. +func (c *Checker) findResolutionBelow(i int, target TypeSystemEntity, propertyName TypeSystemPropertyName) bool { + for i = int(c.resolutions[i].prevTypeResolution) - 1; i >= c.resolutionStart; i = int(c.resolutions[i].prevTypeResolution) - 1 { + r := &c.resolutions[i].typeResolution + if r.target == target && r.propertyName == propertyName { + return true + } + } + return false +} + // typeResolutionHasProperty reports whether a resolution on the stack already // has a result. Its computation is in progress, so the result is read without // observing it; see findResolutionCycleStartIndex. From 5070f5be0709ae7aad334bccbbf3254da4b2334e Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 27 Oct 2026 07:42:23 -0700 Subject: [PATCH 083/194] Break type cycles at their first-declared symbol A cycle through the types of several symbols fails at whichever symbol was entered first, and everything else in the cycle is computed from that failure. Which symbol that is depends on which file or declaration was checked or queried first, so both the circularity errors and the types computed around them depended on query order. On re-entering a cycle, compute the type of its first-declared symbol from scratch instead, with everything already in progress hidden, so the cycle always fails at the same symbol. Members published while they are still being resolved cannot be hidden, so reading them during such a recomputation fails it as a cycle, which matches what computing them from scratch would see. Every cycle member is now reported, the circular mapped type prints with its resolved members, and inference through a failed symbol now proceeds from its `any` type as it would from scratch. --- tsc/internal/checker/checker.go | 162 ++++++++++++++++-- tsc/internal/checker/memo.go | 18 +- tsc/internal/checker/resolutions.go | 12 +- ...BeforeCheck(checkorder=default).errors.txt | 4 +- ...eforeCheck(checkorder=isolated).errors.txt | 4 +- .../circularReferenceInReturnType2.types | 8 +- ...andoIndexedAssignmentDiagnostic.errors.txt | 8 +- ...oFlakyDeclarationEmitSharedCheckerOrder.js | 29 +++- ...yDeclarationEmitSharedCheckerOrder.symbols | 1 + ...akyDeclarationEmitSharedCheckerOrder.types | 28 +-- .../recursiveMappedTypes.errors.txt | 4 +- 11 files changed, 226 insertions(+), 52 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 771e4496cb55a..01bfeb7a98e9a 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -682,6 +682,8 @@ type Checker struct { resolving map[memoKey]int32 // Index in resolutions of the outermost computation of each key in progress typeResolutionTop int // 1-based index in resolutions of the innermost resolution, or 0 resolutionStart int // Index in resolutions below which resolutions are not searched for cycles + visibleStart int // Index in resolutions below which nothing in progress is visible; see yieldCycle + cycleYields []cycleYield // Canonical recomputations in progress; see yieldCycle circularityStart int // 1-based index in resolutions of the outermost cycle in progress, or 0; see memo.go currentNodeErrors []*currentNodeError // Errors reported at the current node while collecting; see startCurrentNodeErrors currentNodeErrorCollectors int // Number of computations collecting currentNodeErrors @@ -702,7 +704,7 @@ type Checker struct { freeinferenceState *InferenceState freeFlowState *FlowState flowLoopStack []FlowLoopInfo - signaturesResolving []*SignatureLinks // Calls whose resolution is in progress + signaturesResolving []signatureResolving // Calls whose resolution is in progress sharedFlows []SharedFlow flowLoopFrameCount uint64 antecedentTypes []*Type @@ -8869,6 +8871,9 @@ func (c *Checker) getResolvedSignatureUncached(node *ast.Node, candidatesOutArra // or that a different candidatesOutArray was passed in. Therefore, we need to redo the work // to correctly fill the candidatesOutArray. cached := links.resolvedSignature.get(c) + if cached == c.resolvingSignature && c.isSignatureResolutionHidden(links) { + cached = nil + } if cached != nil && cached != c.resolvingSignature && candidatesOutArray == nil { return cached } @@ -8882,6 +8887,9 @@ func (c *Checker) getResolvedSignatureUncached(node *ast.Node, candidatesOutArra c.getContextualType(node, ContextFlagsNone) } cached = links.resolvedSignature.get(c) + if cached == c.resolvingSignature && c.isSignatureResolutionHidden(links) { + cached = nil + } if cached != nil && cached != c.resolvingSignature && candidatesOutArray == nil { return cached } @@ -8897,7 +8905,7 @@ func (c *Checker) getResolvedSignatureUncached(node *ast.Node, candidatesOutArra c.resolutionStart = len(c.resolutions) } links.resolvedSignature.swap(c.resolvingSignature) - c.signaturesResolving = append(c.signaturesResolving, links) + c.signaturesResolving = append(c.signaturesResolving, signatureResolving{links, len(c.resolutions)}) result := c.resolveSignature(node, candidatesOutArray, checkMode) c.signaturesResolving = c.signaturesResolving[:len(c.signaturesResolving)-1] c.resolutionStart = saveResolutionStart @@ -8932,7 +8940,26 @@ func (c *Checker) setResolvedSignature(links *SignatureLinks, signature *Signatu } func isStaleSignatureMarker(c *Checker, links *SignatureLinks, s *Signature) bool { - return s == c.resolvingSignature && !slices.Contains(c.signaturesResolving, links) + return s == c.resolvingSignature && !slices.ContainsFunc(c.signaturesResolving, func(r signatureResolving) bool { return r.links == links }) +} + +type signatureResolving struct { + links *SignatureLinks + start int // Index in resolutions on entry +} + +// isSignatureResolutionHidden reports whether the resolution of the call +// with the given links is in progress below what is visible; see yieldCycle. +func (c *Checker) isSignatureResolutionHidden(links *SignatureLinks) bool { + if c.visibleStart == 0 { + return false + } + for _, r := range slices.Backward(c.signaturesResolving) { + if r.links == links { + return r.start < c.visibleStart + } + } + return false } func (c *Checker) resolveSignature(node *ast.Node, candidatesOutArray *[]*Signature, checkMode CheckMode) *Signature { @@ -9416,7 +9443,10 @@ func (c *Checker) resolveCall(node *ast.Node, signatures []*Signature, candidate // is just important for choosing the best signature. So in the case where there is only one // signature, the subtype pass is useless. So skipping it is an optimization. var result *Signature - s.recursiveResolution = c.isResolvingAnywhere(s.node, TypeSystemPropertyNameCallResolution) + if i := c.resolvingAnywhereIndex(s.node, TypeSystemPropertyNameCallResolution); i >= 0 && !c.yieldCycle(i) { + c.markTypeResolutionCircular(i) + s.recursiveResolution = true + } c.beginTypeResolution(s.node, TypeSystemPropertyNameCallResolution) if len(s.candidates) > 1 { result = c.chooseOverload(&s, c.subtypeRelation) @@ -20056,13 +20086,108 @@ func (c *Checker) getCombinedModifierFlagsCached(node *ast.Node) ast.ModifierFla func (c *Checker) pushTypeResolution(target TypeSystemEntity, propertyName TypeSystemPropertyName) bool { resolutionCycleStartIndex := c.findResolutionCycleStartIndex(target, propertyName) if resolutionCycleStartIndex >= 0 { - c.markResolutionCycle(resolutionCycleStartIndex) - return false + if !c.yieldCycle(resolutionCycleStartIndex) { + c.markResolutionCycle(resolutionCycleStartIndex) + return false + } } c.beginTypeResolution(target, propertyName) return true } +// cycleYield is a canonical recomputation in progress; see yieldCycle. +type cycleYield struct { + end int // Index in resolutions of the resolution whose pop ends it, or -1 + target TypeSystemEntity + propertyName TypeSystemPropertyName + savedResolutionStart int + savedVisibleStart int + savedDepths [3]depthLimit + shadowed []shadowedResolving +} + +type shadowedResolving struct { + key memoKey + index int32 +} + +// yieldCycle handles re-entering the resolution in progress at start, a +// cycle that would fail the resolution re-entered. Which resolution is +// re-entered depends on which was entered first, so a cycle through the +// types of symbols declared before the one re-entered (if it is one) +// fails at the first of those instead, as if that symbol had been resolved +// first: its type is computed again from scratch, with nothing in progress +// visible, and the resolution re-entered is then computed again likewise, +// by the caller, which pushes it. The computations in progress then continue +// from those results. Termination: a resolution is never computed again +// while it is already being computed again. +func (c *Checker) yieldCycle(start int) bool { + r := &c.resolutions[start].typeResolution + var first *ast.Symbol + if r.propertyName == TypeSystemPropertyNameType { + first = r.target.(*ast.Symbol) + } + entered := first + for i := start + 1; i < len(c.resolutions); i++ { + if f := &c.resolutions[i]; f.isTypeResolution && f.typeResolution.propertyName == TypeSystemPropertyNameType { + if s := f.typeResolution.target.(*ast.Symbol); first == nil || c.compareSymbols(s, first) < 0 { + first = s + } + } + } + if first == nil || first == entered || c.isYieldingTo(first, TypeSystemPropertyNameType) || c.isYieldingTo(r.target, r.propertyName) { + return false + } + c.beginCycleYield(first, TypeSystemPropertyNameType, -1) + c.getTypeOfSymbol(first) + c.endCycleYield() + c.beginCycleYield(r.target, r.propertyName, len(c.resolutions)) + return true +} + +// observeHiddenMembers fails the cycle yield in progress if the members of t +// are being resolved below it. Members are made available while they are +// resolved, so the yield would see whatever part of them the hidden +// resolution has published, rather than compute them from scratch. +func (c *Checker) observeHiddenMembers(t *Type) { + if i, ok := c.resolving[memoKeyOf(t, memoStructuredMembers)]; ok && int(i) < c.visibleStart { + c.markResolutionCycle(c.visibleStart) + } +} + +func (c *Checker) isYieldingTo(target TypeSystemEntity, propertyName TypeSystemPropertyName) bool { + return slices.ContainsFunc(c.cycleYields, func(y cycleYield) bool { return y.target == target && y.propertyName == propertyName }) +} + +// beginCycleYield hides everything in progress until endCycleYield, which +// popping the resolution at end calls if it is not -1. +func (c *Checker) beginCycleYield(target TypeSystemEntity, propertyName TypeSystemPropertyName, end int) { + n := len(c.resolutions) + c.cycleYields = append(c.cycleYields, cycleYield{ + end: end, + target: target, + propertyName: propertyName, + savedResolutionStart: c.resolutionStart, + savedVisibleStart: c.visibleStart, + savedDepths: [3]depthLimit{c.serializationLevel, c.inlineLevel, c.conditionalConstraintDepth}, + }) + c.resolutionStart = n + c.visibleStart = n + c.serializationLevel, c.inlineLevel, c.conditionalConstraintDepth = depthLimit{}, depthLimit{}, depthLimit{} +} + +func (c *Checker) endCycleYield() { + y := &c.cycleYields[len(c.cycleYields)-1] + c.resolutionStart = y.savedResolutionStart + c.visibleStart = y.savedVisibleStart + c.serializationLevel, c.inlineLevel, c.conditionalConstraintDepth = y.savedDepths[0], y.savedDepths[1], y.savedDepths[2] + for _, sh := range y.shadowed { + c.resolving[sh.key] = sh.index + } + c.cycleYields[len(c.cycleYields)-1] = cycleYield{} + c.cycleYields = c.cycleYields[:len(c.cycleYields)-1] +} + // markResolutionCycle records that the type resolution entries from start to // the top of the stack form a cycle, so each of them fails. func (c *Checker) markResolutionCycle(start int) { @@ -20104,13 +20229,22 @@ func (c *Checker) isResolutionInProgress(target TypeSystemEntity, propertyName T // again and reports the failure. Unlike isResolutionInProgress, it searches // the whole stack, for computations that would not otherwise stop. func (c *Checker) isResolvingAnywhere(target TypeSystemEntity, propertyName TypeSystemPropertyName) bool { - for i := c.typeResolutionTop - 1; i >= 0; i = int(c.resolutions[i].prevTypeResolution) - 1 { + if i := c.resolvingAnywhereIndex(target, propertyName); i >= 0 { + c.markTypeResolutionCircular(i) + return true + } + return false +} + +// resolvingAnywhereIndex returns the index in resolutions of the visible +// resolution of the property of target in progress, or -1. +func (c *Checker) resolvingAnywhereIndex(target TypeSystemEntity, propertyName TypeSystemPropertyName) int { + for i := c.typeResolutionTop - 1; i >= c.visibleStart; i = int(c.resolutions[i].prevTypeResolution) - 1 { if r := &c.resolutions[i].typeResolution; r.target == target && r.propertyName == propertyName { - c.markTypeResolutionCircular(i) - return true + return i } } - return false + return -1 } // observeCircularHead is for computations where re-entering one in progress @@ -20271,6 +20405,9 @@ func (c *Checker) popTypeResolution() bool { if c.circularityStart > n { c.endCircularity() } + if len(c.cycleYields) != 0 && c.cycleYields[len(c.cycleYields)-1].end == n { + c.endCycleYield() + } return result } @@ -20690,6 +20827,9 @@ func (c *Checker) resolveStructuredTypeMembers(t *Type) *StructuredType { // Resolving members may observe the type itself, whose members are // then incomplete. c.isResolutionInProgress(t, TypeSystemPropertyNameStructuredMembers) + if len(c.cycleYields) != 0 { + c.observeHiddenMembers(t) + } } c.beginMemo(memoKeyOf(t, memoStructuredMembers)) result := c.resolveStructuredTypeMembersUncached(t) @@ -32235,7 +32375,7 @@ func (c *Checker) getContextualTypeForArgumentAtIndex(callTarget *ast.Node, argI // If we're already in the process of resolving the given signature, don't resolve again as // that could cause infinite recursion. Instead, return anySignature. var signature *Signature - if c.signatureLinks.Get(callTarget).resolvedSignature.get(c) == c.resolvingSignature { + if links := c.signatureLinks.Get(callTarget); links.resolvedSignature.get(c) == c.resolvingSignature && !c.isSignatureResolutionHidden(links) { signature = c.resolvingSignature } else { signature = c.getResolvedSignature(callTarget, nil, CheckModeNormal) diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 10ec380214805..9bc5e0c1e0b56 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -503,13 +503,23 @@ func (m *memoMap[K, V]) begin(c *Checker, k K) { // resolvingIndex returns 1 + the index in resolutions of the computation of // the entry for k in progress, or 0. func (m *memoMap[K, V]) resolvingIndex(c *Checker, k K) int { - i := slices.Index(m.resolvingKeys, k) - if i < 0 { - return 0 + for i, key := range m.resolvingKeys { + if key != k { + continue + } + j := m.resolutionIndex(c, i) + if j >= c.visibleStart { + return j + 1 + } + // Hidden; see yieldCycle. } + return 0 +} + +func (m *memoMap[K, V]) resolutionIndex(c *Checker, i int) int { for j := len(c.resolutions) - 1; j >= 0; j-- { if f := &c.resolutions[j]; f.source == memoStateSource(m) && int(f.index) == i { - return j + 1 + return j } } panic("entry in progress without a resolution") diff --git a/tsc/internal/checker/resolutions.go b/tsc/internal/checker/resolutions.go index e0f401bfdb425..e8b111c67a0d9 100644 --- a/tsc/internal/checker/resolutions.go +++ b/tsc/internal/checker/resolutions.go @@ -166,7 +166,7 @@ func (c *Checker) forgetCost() { // resolvingIndex returns 1 + the index in resolutions of the outermost // computation of key in progress, or 0. func (c *Checker) resolvingIndex(key memoKey) int { - if i, ok := c.resolving[key]; ok { + if i, ok := c.resolving[key]; ok && int(i) >= c.visibleStart { return int(i) + 1 } return 0 @@ -177,10 +177,14 @@ func (c *Checker) resolvingIndex(key memoKey) int { // one re-enters it as the policy of its kind says; see memoReentry. func (c *Checker) beginResolving(key memoKey) { if i, ok := c.resolving[key]; ok { - if memoReentry[key.field()] == reentryCircular { - c.markCircular(int(i)) + if int(i) >= c.visibleStart { + if memoReentry[key.field()] == reentryCircular { + c.markCircular(int(i)) + } + return } - return + y := &c.cycleYields[len(c.cycleYields)-1] + y.shadowed = append(y.shadowed, shadowedResolving{key, i}) } if c.resolving == nil { c.resolving = make(map[memoKey]int32) diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=default).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=default).errors.txt index c220c7e1092af..81bd46c132406 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=default).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=default).errors.txt @@ -1,5 +1,5 @@ checkOrderEmitBeforeCheck.ts(9,5): error TS2502: '"each"' is referenced directly or indirectly in its own type annotation. -checkOrderEmitBeforeCheck.ts(9,13): error TS2615: Type of property '"each"' circularly references itself in mapped type '{ [P in keyof ListWidget]: undefined extends ListWidget[P] ? never : P; }'. +checkOrderEmitBeforeCheck.ts(9,13): error TS2615: Type of property '"each"' circularly references itself in mapped type '{ type: "type"; each: any; }'. ==== checkOrderEmitBeforeCheck.ts (2 errors) ==== @@ -15,7 +15,7 @@ checkOrderEmitBeforeCheck.ts(9,13): error TS2615: Type of property '"each"' circ ~~~~~~ !!! error TS2502: '"each"' is referenced directly or indirectly in its own type annotation. ~~~~~~~~~~~~~~~~~ -!!! error TS2615: Type of property '"each"' circularly references itself in mapped type '{ [P in keyof ListWidget]: undefined extends ListWidget[P] ? never : P; }'. +!!! error TS2615: Type of property '"each"' circularly references itself in mapped type '{ type: "type"; each: any; }'. } type ListChild = Child diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=isolated).errors.txt b/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=isolated).errors.txt index c220c7e1092af..81bd46c132406 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=isolated).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/checkOrderEmitBeforeCheck(checkorder=isolated).errors.txt @@ -1,5 +1,5 @@ checkOrderEmitBeforeCheck.ts(9,5): error TS2502: '"each"' is referenced directly or indirectly in its own type annotation. -checkOrderEmitBeforeCheck.ts(9,13): error TS2615: Type of property '"each"' circularly references itself in mapped type '{ [P in keyof ListWidget]: undefined extends ListWidget[P] ? never : P; }'. +checkOrderEmitBeforeCheck.ts(9,13): error TS2615: Type of property '"each"' circularly references itself in mapped type '{ type: "type"; each: any; }'. ==== checkOrderEmitBeforeCheck.ts (2 errors) ==== @@ -15,7 +15,7 @@ checkOrderEmitBeforeCheck.ts(9,13): error TS2615: Type of property '"each"' circ ~~~~~~ !!! error TS2502: '"each"' is referenced directly or indirectly in its own type annotation. ~~~~~~~~~~~~~~~~~ -!!! error TS2615: Type of property '"each"' circularly references itself in mapped type '{ [P in keyof ListWidget]: undefined extends ListWidget[P] ? never : P; }'. +!!! error TS2615: Type of property '"each"' circularly references itself in mapped type '{ type: "type"; each: any; }'. } type ListChild = Child diff --git a/tsc/testdata/baselines/reference/compiler/circularReferenceInReturnType2.types b/tsc/testdata/baselines/reference/compiler/circularReferenceInReturnType2.types index 1a6dae9f5f0df..4dbb229f1a8ba 100644 --- a/tsc/testdata/baselines/reference/compiler/circularReferenceInReturnType2.types +++ b/tsc/testdata/baselines/reference/compiler/circularReferenceInReturnType2.types @@ -94,12 +94,12 @@ const A = object()({ fields: () => ({ >fields : () => any >() => ({ a: field({ type: A, resolve() { return { foo: 100, }; }, }), }) : () => any ->({ a: field({ type: A, resolve() { return { foo: 100, }; }, }), }) : { a: Field; } ->{ a: field({ type: A, resolve() { return { foo: 100, }; }, }), } : { a: Field; } +>({ a: field({ type: A, resolve() { return { foo: 100, }; }, }), }) : { a: Field; } +>{ a: field({ type: A, resolve() { return { foo: 100, }; }, }), } : { a: Field; } a: field({ ->a : Field ->field({ type: A, resolve() { return { foo: 100, }; }, }) : Field +>a : Field +>field({ type: A, resolve() { return { foo: 100, }; }, }) : Field >field : , Key extends string>(field: FieldFuncArgs) => Field >{ type: A, resolve() { return { foo: 100, }; }, } : { type: any; resolve(): { foo: number; }; } diff --git a/tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.errors.txt b/tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.errors.txt index bafe2d1546822..108d7440f9df4 100644 --- a/tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/jsExpandoIndexedAssignmentDiagnostic.errors.txt @@ -1,9 +1,11 @@ file.js(4,11): error TS7022: 'pixel' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. file.js(4,19): error TS7053: Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{ skip: any; }'. +file.js(5,11): error TS7022: 'otherPixel' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. file.js(5,24): error TS7053: Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{ skip: any; }'. +file.js(6,5): error TS7022: 'skip' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. -==== file.js (3 errors) ==== +==== file.js (5 errors) ==== /** @param {any} axis @param {any} value */ function updateElements(axis, value) { const properties = {}; @@ -13,7 +15,11 @@ file.js(5,24): error TS7053: Element implicitly has an 'any' type because expres ~~~~~~~~~~~~~~~~ !!! error TS7053: Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{ skip: any; }'. const otherPixel = properties[axis] = value; + ~~~~~~~~~~ +!!! error TS7022: 'otherPixel' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. ~~~~~~~~~~~~~~~~ !!! error TS7053: Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{ skip: any; }'. properties.skip = isNaN(pixel) || isNaN(otherPixel); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS7022: 'skip' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. } \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.js b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.js index 498f2e8c5a4e6..263138eb1bcbe 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.js +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.js @@ -151,12 +151,20 @@ export { v as pb } from "./xb"; export declare const mb = 1; //// [xa.d.ts] export = o; -declare const o: any; +declare const o: { + v: { + pb: any; + mb: 1; + }; +}; //// [ma.d.ts] export { v as pa } from "./xa"; export declare const ma = 1; //// [a.d.ts] -export declare const fromA: any; +export declare const fromA: { + pb: any; + mb: 1; +}; //// [b.d.ts] export declare const fromB: any; //// [c.d.ts] @@ -166,14 +174,11 @@ export declare const c = 1; //// [DtsFileErrors] -/out/ma.d.ts(1,10): error TS2305: Module '"./xa"' has no exported member 'v'. /out/mb.d.ts(1,10): error TS2305: Module '"./xb"' has no exported member 'v'. -==== /out/ma.d.ts (1 errors) ==== +==== /out/ma.d.ts (0 errors) ==== export { v as pa } from "./xa"; - ~ -!!! error TS2305: Module '"./xa"' has no exported member 'v'. export declare const ma = 1; ==== /out/mb.d.ts (1 errors) ==== @@ -184,14 +189,22 @@ export declare const c = 1; ==== /out/xa.d.ts (0 errors) ==== export = o; - declare const o: any; + declare const o: { + v: { + pb: any; + mb: 1; + }; + }; ==== /out/xb.d.ts (0 errors) ==== export = o; declare const o: any; ==== /out/a.d.ts (0 errors) ==== - export declare const fromA: any; + export declare const fromA: { + pb: any; + mb: 1; + }; ==== /out/b.d.ts (0 errors) ==== export declare const fromB: any; diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.symbols b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.symbols index fbfd54c051a3a..d288cb1b8fc30 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.symbols +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.symbols @@ -2,6 +2,7 @@ === /ma.js === export { v as pa } from "./xa"; +>v : Symbol(v, Decl(xa.js, 2, 11)) >pa : Symbol(pa, Decl(ma.js, 0, 8)) export const ma = 1; diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.types b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.types index b139db84af158..8a09cd765126d 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.types +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.types @@ -2,8 +2,8 @@ === /ma.js === export { v as pa } from "./xa"; ->v : any ->pa : any +>v : { pb: any; mb: 1; } +>pa : { pb: any; mb: 1; } export const ma = 1; >ma : 1 @@ -25,18 +25,18 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : any +>o : { v: { pb: any; mb: 1; }; } >{ v: { ...M } } : { v: { pb: any; mb: 1; }; } >v : { pb: any; mb: 1; } >{ ...M } : { pb: any; mb: 1; } >M : typeof import("./mb") module.exports = o; ->module.exports = o : any ->module.exports : any ->module : { exports: any; } ->exports : any ->o : any +>module.exports = o : { v: { pb: any; mb: 1; }; } +>module.exports : { v: { pb: any; mb: 1; }; } +>module : { exports: { v: { pb: any; mb: 1; }; }; } +>exports : { v: { pb: any; mb: 1; }; } +>o : { v: { pb: any; mb: 1; }; } === /xb.js === /** @type {typeof import("./ma")} */ @@ -46,9 +46,9 @@ const M = /** @type {any} */ (null); const o = { v: { ...M } }; >o : any ->{ v: { ...M } } : { v: { pa: any; ma: 1; }; } ->v : { pa: any; ma: 1; } ->{ ...M } : { pa: any; ma: 1; } +>{ v: { ...M } } : { v: { pa: { pb: any; mb: 1; }; ma: 1; }; } +>v : { pa: { pb: any; mb: 1; }; ma: 1; } +>{ ...M } : { pa: { pb: any; mb: 1; }; ma: 1; } >M : typeof import("./ma") module.exports = o; @@ -63,10 +63,10 @@ import * as MA from "./ma"; >MA : typeof MA export const fromA = MA.pa; ->fromA : error ->MA.pa : error +>fromA : { pb: any; mb: 1; } +>MA.pa : { pb: any; mb: 1; } >MA : typeof MA ->pa : any +>pa : { pb: any; mb: 1; } === /b.ts === import * as MB from "./mb"; diff --git a/tsc/testdata/baselines/reference/conformance/recursiveMappedTypes.errors.txt b/tsc/testdata/baselines/reference/conformance/recursiveMappedTypes.errors.txt index e695d2a6d96a6..9d4e77b1bfb1f 100644 --- a/tsc/testdata/baselines/reference/conformance/recursiveMappedTypes.errors.txt +++ b/tsc/testdata/baselines/reference/conformance/recursiveMappedTypes.errors.txt @@ -8,7 +8,7 @@ recursiveMappedTypes.ts(20,14): error TS5114: Instantiations of type 'Circular' recursiveMappedTypes.ts(20,19): error TS5114: Instantiations of type 'Circular' appear infinitely circular. recursiveMappedTypes.ts(21,10): error TS5114: Instantiations of type 'Circular' appear infinitely circular. recursiveMappedTypes.ts(73,5): error TS2502: '"each"' is referenced directly or indirectly in its own type annotation. -recursiveMappedTypes.ts(73,13): error TS2615: Type of property '"each"' circularly references itself in mapped type '{ [P in keyof ListWidget]: undefined extends ListWidget[P] ? never : P; }'. +recursiveMappedTypes.ts(73,13): error TS2615: Type of property '"each"' circularly references itself in mapped type '{ type: "type"; minimum_count: "minimum_count"; maximum_count: "maximum_count"; collapsable?: undefined; each: any; }'. ==== recursiveMappedTypes.ts (11 errors) ==== @@ -106,7 +106,7 @@ recursiveMappedTypes.ts(73,13): error TS2615: Type of property '"each"' circular ~~~~~~ !!! error TS2502: '"each"' is referenced directly or indirectly in its own type annotation. ~~~~~~~~~~~~~~~~~ -!!! error TS2615: Type of property '"each"' circularly references itself in mapped type '{ [P in keyof ListWidget]: undefined extends ListWidget[P] ? never : P; }'. +!!! error TS2615: Type of property '"each"' circularly references itself in mapped type '{ type: "type"; minimum_count: "minimum_count"; maximum_count: "maximum_count"; collapsable?: undefined; each: any; }'. } type ListChild = Child From 3a56a541c6c9bbfce21c952b60f434a0c70efe6b Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 27 Oct 2026 08:36:02 -0700 Subject: [PATCH 084/194] Yield type cycles through member tables to the table A member table publishes its early members while it is resolved, so a cycle entered at the table never fails, while the same cycle entered elsewhere fails at the re-entry. In lateBoundMemberLayoutReentrancy, querying a computed property name first made the class's late-bound members, and the types depending on them, any, while program order gave the declared types. When a type resolution re-enters a cycle passing through a member table, recompute the re-entered resolution with only the table and what it entered visible, as if the table had been entered first. Member tables cached during a cycle are now discarded with it, so the failed attempt's table is not kept. Call resolution re-entry is left to the plain yield: it does not fail, and recomputing from a partial table loses the construct signatures that the full resolution would have found. --- tsc/internal/checker/checker.go | 53 ++++++++++++++++--- ...uleExportsAlias(checkorder=isolated).types | 4 +- ...oFlakyDeclarationEmitSharedCheckerOrder.js | 29 +++------- ...yDeclarationEmitSharedCheckerOrder.symbols | 1 - ...akyDeclarationEmitSharedCheckerOrder.types | 28 +++++----- 5 files changed, 70 insertions(+), 45 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 01bfeb7a98e9a..c71720c3c9190 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -17059,6 +17059,9 @@ func (c *Checker) getResolvedMembersOrExportsOfSymbolUncached(symbol *ast.Symbol } } links[resolutionKind] = c.combineSymbolTables(earlySymbols, lateSymbols) + if c.logResults() { + c.discardLog = append(c.discardLog, discardEntry{nil, func() { links[resolutionKind] = nil }, false}) + } } return links[resolutionKind] } @@ -20086,7 +20089,7 @@ func (c *Checker) getCombinedModifierFlagsCached(node *ast.Node) ast.ModifierFla func (c *Checker) pushTypeResolution(target TypeSystemEntity, propertyName TypeSystemPropertyName) bool { resolutionCycleStartIndex := c.findResolutionCycleStartIndex(target, propertyName) if resolutionCycleStartIndex >= 0 { - if !c.yieldCycle(resolutionCycleStartIndex) { + if !c.yieldCycleToMembers(resolutionCycleStartIndex) { c.markResolutionCycle(resolutionCycleStartIndex) return false } @@ -20138,10 +20141,10 @@ func (c *Checker) yieldCycle(start int) bool { if first == nil || first == entered || c.isYieldingTo(first, TypeSystemPropertyNameType) || c.isYieldingTo(r.target, r.propertyName) { return false } - c.beginCycleYield(first, TypeSystemPropertyNameType, -1) + c.beginCycleYield(first, TypeSystemPropertyNameType, -1, len(c.resolutions)) c.getTypeOfSymbol(first) c.endCycleYield() - c.beginCycleYield(r.target, r.propertyName, len(c.resolutions)) + c.beginCycleYield(r.target, r.propertyName, len(c.resolutions), len(c.resolutions)) return true } @@ -20155,14 +20158,50 @@ func (c *Checker) observeHiddenMembers(t *Type) { } } +// yieldCycleToMembers handles re-entering the type resolution in progress +// at start, a cycle that would fail it, when the cycle passes through a +// member table. Entering the cycle at the member table instead would not +// fail, as the table is available while it is resolved, so the resolution +// re-entered is computed again as if the table had been entered first: by +// the caller, with everything entered before the table hidden. Otherwise it +// yields as yieldCycle does. +func (c *Checker) yieldCycleToMembers(start int) bool { + if m := c.findMembersInCycle(start); m >= 0 { + r := &c.resolutions[start].typeResolution + if c.isYieldingTo(r.target, r.propertyName) { + return false + } + c.beginCycleYield(r.target, r.propertyName, len(c.resolutions), m) + return true + } + return c.yieldCycle(start) +} + +// findMembersInCycle returns the index in resolutions of the outermost +// resolution of a member table in progress above start, or -1. Member +// tables are available while they are resolved, so a cycle entered at its +// member table never fails. +func (c *Checker) findMembersInCycle(start int) int { + for i := start + 1; i < len(c.resolutions); i++ { + f := &c.resolutions[i] + if f.isTypeResolution && f.typeResolution.propertyName == TypeSystemPropertyNameStructuredMembers { + return i + } + if field := f.key.field(); f.key != 0 && (field == memoSymbolMembers || field == memoSymbolExports) { + return i + } + } + return -1 +} + func (c *Checker) isYieldingTo(target TypeSystemEntity, propertyName TypeSystemPropertyName) bool { return slices.ContainsFunc(c.cycleYields, func(y cycleYield) bool { return y.target == target && y.propertyName == propertyName }) } -// beginCycleYield hides everything in progress until endCycleYield, which -// popping the resolution at end calls if it is not -1. -func (c *Checker) beginCycleYield(target TypeSystemEntity, propertyName TypeSystemPropertyName, end int) { - n := len(c.resolutions) +// beginCycleYield hides the resolutions in progress below floor until +// endCycleYield, which popping the resolution at end calls if it is not -1. +func (c *Checker) beginCycleYield(target TypeSystemEntity, propertyName TypeSystemPropertyName, end int, floor int) { + n := floor c.cycleYields = append(c.cycleYields, cycleYield{ end: end, target: target, diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=isolated).types b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=isolated).types index 9de3e5f594946..f940f148c6541 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=isolated).types +++ b/tsc/testdata/baselines/reference/compiler/checkOrderModuleExportsAlias(checkorder=isolated).types @@ -13,11 +13,11 @@ module.exports.i = function i() {} module.exports.ii = module.exports.i; >module.exports.ii = module.exports.i : () => void ->module.exports.ii : error +>module.exports.ii : () => void >module.exports : typeof import(".") >module : { exports: typeof import("."); } >exports : typeof import(".") ->ii : any +>ii : () => void >module.exports.i : () => void >module.exports : typeof import(".") >module : { exports: typeof import("."); } diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.js b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.js index 263138eb1bcbe..498f2e8c5a4e6 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.js +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.js @@ -151,20 +151,12 @@ export { v as pb } from "./xb"; export declare const mb = 1; //// [xa.d.ts] export = o; -declare const o: { - v: { - pb: any; - mb: 1; - }; -}; +declare const o: any; //// [ma.d.ts] export { v as pa } from "./xa"; export declare const ma = 1; //// [a.d.ts] -export declare const fromA: { - pb: any; - mb: 1; -}; +export declare const fromA: any; //// [b.d.ts] export declare const fromB: any; //// [c.d.ts] @@ -174,11 +166,14 @@ export declare const c = 1; //// [DtsFileErrors] +/out/ma.d.ts(1,10): error TS2305: Module '"./xa"' has no exported member 'v'. /out/mb.d.ts(1,10): error TS2305: Module '"./xb"' has no exported member 'v'. -==== /out/ma.d.ts (0 errors) ==== +==== /out/ma.d.ts (1 errors) ==== export { v as pa } from "./xa"; + ~ +!!! error TS2305: Module '"./xa"' has no exported member 'v'. export declare const ma = 1; ==== /out/mb.d.ts (1 errors) ==== @@ -189,22 +184,14 @@ export declare const c = 1; ==== /out/xa.d.ts (0 errors) ==== export = o; - declare const o: { - v: { - pb: any; - mb: 1; - }; - }; + declare const o: any; ==== /out/xb.d.ts (0 errors) ==== export = o; declare const o: any; ==== /out/a.d.ts (0 errors) ==== - export declare const fromA: { - pb: any; - mb: 1; - }; + export declare const fromA: any; ==== /out/b.d.ts (0 errors) ==== export declare const fromB: any; diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.symbols b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.symbols index d288cb1b8fc30..fbfd54c051a3a 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.symbols +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.symbols @@ -2,7 +2,6 @@ === /ma.js === export { v as pa } from "./xa"; ->v : Symbol(v, Decl(xa.js, 2, 11)) >pa : Symbol(pa, Decl(ma.js, 0, 8)) export const ma = 1; diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.types b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.types index 8a09cd765126d..b139db84af158 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.types +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.types @@ -2,8 +2,8 @@ === /ma.js === export { v as pa } from "./xa"; ->v : { pb: any; mb: 1; } ->pa : { pb: any; mb: 1; } +>v : any +>pa : any export const ma = 1; >ma : 1 @@ -25,18 +25,18 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : { v: { pb: any; mb: 1; }; } +>o : any >{ v: { ...M } } : { v: { pb: any; mb: 1; }; } >v : { pb: any; mb: 1; } >{ ...M } : { pb: any; mb: 1; } >M : typeof import("./mb") module.exports = o; ->module.exports = o : { v: { pb: any; mb: 1; }; } ->module.exports : { v: { pb: any; mb: 1; }; } ->module : { exports: { v: { pb: any; mb: 1; }; }; } ->exports : { v: { pb: any; mb: 1; }; } ->o : { v: { pb: any; mb: 1; }; } +>module.exports = o : any +>module.exports : any +>module : { exports: any; } +>exports : any +>o : any === /xb.js === /** @type {typeof import("./ma")} */ @@ -46,9 +46,9 @@ const M = /** @type {any} */ (null); const o = { v: { ...M } }; >o : any ->{ v: { ...M } } : { v: { pa: { pb: any; mb: 1; }; ma: 1; }; } ->v : { pa: { pb: any; mb: 1; }; ma: 1; } ->{ ...M } : { pa: { pb: any; mb: 1; }; ma: 1; } +>{ v: { ...M } } : { v: { pa: any; ma: 1; }; } +>v : { pa: any; ma: 1; } +>{ ...M } : { pa: any; ma: 1; } >M : typeof import("./ma") module.exports = o; @@ -63,10 +63,10 @@ import * as MA from "./ma"; >MA : typeof MA export const fromA = MA.pa; ->fromA : { pb: any; mb: 1; } ->MA.pa : { pb: any; mb: 1; } +>fromA : error +>MA.pa : error >MA : typeof MA ->pa : { pb: any; mb: 1; } +>pa : any === /b.ts === import * as MB from "./mb"; From 9a0156f11bc5bd6f28d4dced5e538ee1046db5df Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 27 Oct 2026 21:07:54 -0700 Subject: [PATCH 085/194] Record effects in checks as queries do In a check, effects were applied as they happened and reading a cached result recorded nothing, so the checker could not tell which effects a kept result depended on. Effects of a computation discarded with a cycle could then only be attributed by stack position, which is wrong when a kept computation reads a result the discarded one cached: dropping the discarded effects lost marks the kept result relied on (a false "declared but never read" in VS Code), and keeping them leaks effects of work that is thrown away. Run each outermost memoized computation started by a check as a query, replaying its effects when it finishes. An effect then survives exactly when a kept result observed it, regardless of which computation happened to run first. Most computations have no effects, so their memo state, and the links from results they cache to their effects, are created only once they have some, keeping the cost of recording close to that of applying effects directly. --- tsc/internal/checker/checker.go | 5 +- tsc/internal/checker/checker_test.go | 1 + tsc/internal/checker/memo.go | 165 ++++++++++++++++++++++++--- tsc/internal/checker/resolutions.go | 26 +++-- 4 files changed, 171 insertions(+), 26 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index c71720c3c9190..1af9aac42d164 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -695,7 +695,9 @@ type Checker struct { varianceStack []VarianceStackEntry varianceGuesses map[*ast.Symbol][]VarianceFlags // Variances assumed for measurements in progress; see getVariancesWorker varianceGuessed []*ast.Symbol // Keys of varianceGuesses in order of addition - flushStates *[]*memoState // Collects memo states given effects to replay, if non-nil; see withoutChecking + flushBuf []*memoState + deferredAttach []*memoState // See attachState + flushStates *[]*memoState // Collects memo states given effects to replay, if non-nil; see withoutChecking apparentArgumentCount *int lastGetCombinedNodeFlagsNode *ast.Node lastGetCombinedNodeFlagsResult ast.NodeFlags @@ -1024,6 +1026,7 @@ type memoStore struct { deferredDiagnosticCallbacks []func(c *Checker) memoStates map[memoKey]*memoState // Memo state of results computed by queries; see memo.go costFilter []uint64 // Memo keys whose memo states may store work; see resolutions.go + stateFilter []uint64 // Memo keys that may have a memo state; see memoState memoPendingCount int // Number of memoStates with unreplayed effects memoErrorStates int // Number of memoStates with reports; see setReported diff --git a/tsc/internal/checker/checker_test.go b/tsc/internal/checker/checker_test.go index 2003bb90ff6ba..7a3e8c0f6d527 100644 --- a/tsc/internal/checker/checker_test.go +++ b/tsc/internal/checker/checker_test.go @@ -588,6 +588,7 @@ var unmemoizedCacheFields = map[string]string{ "memoStore.memoPendingCount": unmemoizedMemoState, "memoStore.memoErrorStates": unmemoizedMemoState, "memoStore.costFilter": unmemoizedMemoState, + "memoStore.stateFilter": unmemoizedMemoState, "memoStore.mu": unmemoizedMemoState, "memoStore.diagnostics": unmemoizedChecking, "memoStore.suggestionDiagnostics": unmemoizedChecking, diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 9bc5e0c1e0b56..419d4a70c974a 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -346,7 +346,7 @@ type memoMap[K comparable, V any] struct { // get returns the cached result for k, accounting for the effects of // computing it. func (m *memoMap[K, V]) get(c *Checker, k K) (V, bool) { - if m.memoStates != nil && c.observing() { + if (m.memoStates != nil || len(m.resolvingKeys) != 0) && c.observing() { m.observe(c, k) } v, ok := m.memoEntries[k] @@ -364,7 +364,9 @@ func (m *memoMap[K, V]) peek(k K) (V, bool) { // //go:noinline func (m *memoMap[K, V]) observe(c *Checker, k K) { - if c.observeState(m.memoStates[k]) { + // A computation in progress may not have a memo state yet; see + // resolutionState. + if state := m.memoStates[k]; c.observeState(state) || state == nil && !c.checking { c.memoCycle(m.resolvingIndex(c, k)) } } @@ -435,9 +437,7 @@ func (m *memoMap[K, V]) setIdentity(c *Checker, k K, v V) { m.memoEntries = make(map[K]V) } m.memoEntries[k] = v - if c.memoTop != 0 { - c.attachState(m.state(k)) - } + m.attach(c, k) } // setWithCost is set for a result whose instantiation count is count, rather @@ -453,9 +453,18 @@ func (m *memoMap[K, V]) setWithCost(c *Checker, k K, v V, count *instantiationCo if count != nil { m.state(k).count = count } - if c.memoTop != 0 { - c.attachState(m.state(k)) + m.attach(c, k) +} + +// attach is memoAttach for the entry for k. +func (m *memoMap[K, V]) attach(c *Checker, k K) { + if c.memoTop == 0 { + return + } + if f := &c.resolutions[c.memoTop-1]; f.source == memoStateSource(m) && m.resolvingKeys[f.index] == k { + return } + c.attachState(m.state(k)) } // intern caches a result constructed from the inputs in k alone, without @@ -495,9 +504,9 @@ func (m *memoMap[K, V]) begin(c *Checker, k K) { if c.memoPendingCount != 0 && m.memoStates != nil { c.replayPending(m.memoStates[k]) } - return + c.beginQueryFromCheck() } - c.beginState(m.state(k), outer) + c.beginState(m.memoStates[k], outer) } // resolvingIndex returns 1 + the index in resolutions of the computation of @@ -600,20 +609,20 @@ func (c *Checker) beginMemo(key memoKey) { if c.memoPendingCount != 0 { c.replayPending(c.memoStates[key]) } - return + c.beginQueryFromCheck() } outer := c.resolvingIndex(key) if outer == len(c.resolutions) { outer = 0 } - c.beginState(c.memoState(key), outer) + c.beginState(c.peekMemoState(key), outer) } // beginState is beginMemo for the memo state of a result, in a query. outer // is 1 + the index in resolutions of the computation of the same result in // progress, if this one re-enters it, or 0. func (c *Checker) beginState(state *memoState, outer int) { - if state.pending != nil { + if state != nil && state.pending != nil { if parent := c.currentMemoEffects(); parent != nil { parent.addDep(state.pending) } @@ -633,6 +642,7 @@ func (c *Checker) startEffects(state *memoState) { f.prevMemo = int32(c.memoTop) f.result = state f.entry = c.currentNode + f.attachStart = int32(len(c.deferredAttach)) if c.memoTop == 0 && c.currentNodeResolution == 0 { // A query made outside of checking: errors located at the current // node are located wherever checking reuses the result, so results @@ -671,16 +681,36 @@ func (c *Checker) memoState(key memoKey) *memoState { } state = &memoState{} c.memoStates[key] = state + if c.stateFilter == nil { + c.stateFilter = make([]uint64, 1< Date: Tue, 27 Oct 2026 21:09:19 -0700 Subject: [PATCH 086/194] Keep memo state inline in memo cells Recording effects in checks looks up the memo state of nearly every result read, and most of those are memo cells. Keeping the state in the cell instead of a map keyed by its address removes those lookups, which were most of the remaining cost of recording, at the price of a pointer per cell. --- tsc/internal/checker/memo.go | 34 ++++++++++++++++++++++++----- tsc/internal/checker/resolutions.go | 2 +- tsc/internal/checker/types_test.go | 8 +++---- 3 files changed, 34 insertions(+), 10 deletions(-) diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 419d4a70c974a..88c50af978638 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -117,6 +117,14 @@ func memoKeyOf[T any](entity *T, field memoField) memoKey { return memoKey(uint64(uintptr(unsafe.Pointer(entity)))<<8 | uint64(field)) } +// cell returns the memo identified by a key of field memoCell, which is the +// address of the memo. The memo is alive, since its key is in use, and the +// heap does not move. +func (k memoKey) cell() *memoHeader { + p := uintptr(k >> 8) + return *(**memoHeader)(unsafe.Pointer(&p)) +} + type memoEffects struct { effects []func(c *Checker) marks []*ast.Symbol // Aliases marked referenced, also among effects; see withReferenceMarks @@ -169,7 +177,8 @@ type memo[T any] struct { // memoHeader is the part of a memo independent of its type, which identifies // it. type memoHeader struct { - _ memoNoCopy + _ memoNoCopy + state *memoState // Created on demand; see Checker.memoState } // memoNoCopy makes go vet reject copies of a memo, which would bypass it. @@ -267,7 +276,7 @@ func (m *memo[T]) setReported(c *Checker, v T, r currentNodeErrors) { r.list = nil } m.setIdentity(c, v) - if r.list != nil || c.memoErrorStates != 0 && c.memoStates[m.key()] != nil { + if r.list != nil || c.memoErrorStates != 0 && m.state != nil { c.memoState(m.key()).setErrors(c, r.list) } } @@ -276,10 +285,15 @@ func (m *memo[T]) setReported(c *Checker, v T, r currentNodeErrors) { func (m *memo[T]) logDiscard(c *Checker) { // The work of the result is discarded with it. old := m.memoValue - oldCount := savedCountOf(c.memoStates, m.key()) + var oldCount *instantiationCount + if m.state != nil { + oldCount = m.state.count + } c.discardLog = append(c.discardLog, discardEntry{&m.memoHeader, func() { m.memoValue = old - restoreCount(c.memoStates, m.key(), oldCount) + if m.state != nil { + m.state.count = oldCount + } }, false}) } @@ -607,7 +621,7 @@ func (c *Checker) beginMemo(key memoKey) { c.beginResolution(key, nil, 0) if c.checking { if c.memoPendingCount != 0 { - c.replayPending(c.memoStates[key]) + c.replayPending(c.peekMemoState(key)) } c.beginQueryFromCheck() } @@ -674,6 +688,13 @@ func (c *Checker) stopEffects() *resolution { } func (c *Checker) memoState(key memoKey) *memoState { + if key.field() == memoCell { + h := key.cell() + if h.state == nil { + h.state = &memoState{} + } + return h.state + } state := c.memoStates[key] if state == nil { if c.memoStates == nil { @@ -693,6 +714,9 @@ func (c *Checker) memoState(key memoKey) *memoState { // peekMemoState returns the memo state of the result identified by key, or // nil if it has none, consulting a filter first since most results have none. func (c *Checker) peekMemoState(key memoKey) *memoState { + if key.field() == memoCell { + return key.cell().state + } if c.stateFilter == nil { return nil } diff --git a/tsc/internal/checker/resolutions.go b/tsc/internal/checker/resolutions.go index 163b570a57d9d..00b9b930c0de4 100644 --- a/tsc/internal/checker/resolutions.go +++ b/tsc/internal/checker/resolutions.go @@ -274,7 +274,7 @@ func (c *Checker) storedCost(key memoKey) *instantiationCount { if !c.mayHaveCost(key) { return nil } - state := c.memoStates[key] + state := c.peekMemoState(key) if state == nil { return nil } diff --git a/tsc/internal/checker/types_test.go b/tsc/internal/checker/types_test.go index 39d0e69e94f67..b5685185a8cdc 100644 --- a/tsc/internal/checker/types_test.go +++ b/tsc/internal/checker/types_test.go @@ -487,8 +487,8 @@ func TestInferenceContextMappers(t *testing.T) { //nolint:paralleltest func TestCompactValueSymbolLinksLayout(t *testing.T) { t.Parallel() - assert.Equal(t, unsafe.Sizeof(ValueSymbolLinks{}), 4*unsafe.Sizeof(uintptr(0))) - assert.Equal(t, unsafe.Sizeof(valueSymbolExtra{}), 3*unsafe.Sizeof(uintptr(0))) + assert.Equal(t, unsafe.Sizeof(ValueSymbolLinks{}), 5*unsafe.Sizeof(uintptr(0))) + assert.Equal(t, unsafe.Sizeof(valueSymbolExtra{}), 4*unsafe.Sizeof(uintptr(0))) c, types := newCompositeTestChecker() var links ValueSymbolLinks assert.Assert(t, links.getWriteType(c) == nil) @@ -647,7 +647,7 @@ func TestStructuredTypeExtra(t *testing.T) { func TestCompactTypeNodeLinksLayout(t *testing.T) { t.Parallel() - assert.Equal(t, unsafe.Sizeof(TypeNodeLinks{}), 2*unsafe.Sizeof(uintptr(0))) + assert.Equal(t, unsafe.Sizeof(TypeNodeLinks{}), 4*unsafe.Sizeof(uintptr(0))) c, types := newCompositeTestChecker() var links TypeNodeLinks links.resolvedType.intern(types[0]) @@ -677,7 +677,7 @@ func TestCompactTypeNodeLinksLayout(t *testing.T) { func TestCompactSignatureLayout(t *testing.T) { t.Parallel() - assert.Equal(t, unsafe.Sizeof(Signature{}), 16+8*unsafe.Sizeof(uintptr(0))) + assert.Equal(t, unsafe.Sizeof(Signature{}), 16+11*unsafe.Sizeof(uintptr(0))) assert.Equal(t, unsafe.Sizeof(signatureExtra{}), 7*unsafe.Sizeof(uintptr(0))) } From b90bca46c95422d30990d4ac7ab2a65ad91dcf1d Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 27 Oct 2026 21:09:33 -0700 Subject: [PATCH 087/194] Skip the re-entry lookup for computations started by a check A computation started by a check is the outermost one in progress, so it cannot re-enter another, and looking itself up among the computations in progress only costs a map access per computation. --- tsc/internal/checker/memo.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 88c50af978638..42cb2a1642357 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -624,6 +624,9 @@ func (c *Checker) beginMemo(key memoKey) { c.replayPending(c.peekMemoState(key)) } c.beginQueryFromCheck() + // The outermost computation re-enters nothing. + c.beginState(c.peekMemoState(key), 0) + return } outer := c.resolvingIndex(key) if outer == len(c.resolutions) { From 383c9c6da85272f0bee4de524aaf15d66b7e9074 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 27 Oct 2026 21:14:34 -0700 Subject: [PATCH 088/194] Add test for mutually dependent late-bound member tables The late-bound members of A and B each read a member of the other, so whichever class has its members resolved first sees the other's table only partially built, and which errors are reported depends on the order in which the classes are queried. The baseline records the current, order-dependent result. --- .../lateBoundMutualMemberTables.errors.txt | 29 ++++++++ .../compiler/lateBoundMutualMemberTables.js | 33 +++++++++ .../lateBoundMutualMemberTables.symbols | 71 +++++++++++++++++++ .../lateBoundMutualMemberTables.types | 69 ++++++++++++++++++ .../compiler/lateBoundMutualMemberTables.ts | 20 ++++++ 5 files changed, 222 insertions(+) create mode 100644 tsc/testdata/baselines/reference/compiler/lateBoundMutualMemberTables.errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/lateBoundMutualMemberTables.js create mode 100644 tsc/testdata/baselines/reference/compiler/lateBoundMutualMemberTables.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/lateBoundMutualMemberTables.types create mode 100644 tsc/testdata/tests/cases/compiler/lateBoundMutualMemberTables.ts diff --git a/tsc/testdata/baselines/reference/compiler/lateBoundMutualMemberTables.errors.txt b/tsc/testdata/baselines/reference/compiler/lateBoundMutualMemberTables.errors.txt new file mode 100644 index 0000000000000..fec9882355546 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/lateBoundMutualMemberTables.errors.txt @@ -0,0 +1,29 @@ +lateBoundMutualMemberTables.ts(6,8): error TS2339: Property 'by' does not exist on type 'B<"b">'. +lateBoundMutualMemberTables.ts(11,8): error TS2339: Property 'b' does not exist on type 'A<"a">'. +lateBoundMutualMemberTables.ts(15,21): error TS2339: Property 'fromA2' does not exist on type 'A<"a">'. + + +==== lateBoundMutualMemberTables.ts (3 errors) ==== + declare const a: A<"a">; + declare const b: B<"b">; + declare class A { + x: T; + [b.y]: "fromB"; + [b.by]: "fromB2"; + ~~ +!!! error TS2339: Property 'by' does not exist on type 'B<"b">'. + } + declare class B { + y: T; + [a.x]: "fromA"; + [a.b]: "fromA2"; + ~ +!!! error TS2339: Property 'b' does not exist on type 'A<"a">'. + } + export const v1 = a.b; + export const v2 = b.a; + export const v3 = a.fromA2; + ~~~~~~ +!!! error TS2339: Property 'fromA2' does not exist on type 'A<"a">'. + export const v4 = b.fromB; + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/lateBoundMutualMemberTables.js b/tsc/testdata/baselines/reference/compiler/lateBoundMutualMemberTables.js new file mode 100644 index 0000000000000..aea4e1ea51859 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/lateBoundMutualMemberTables.js @@ -0,0 +1,33 @@ +//// [tests/cases/compiler/lateBoundMutualMemberTables.ts] //// + +//// [lateBoundMutualMemberTables.ts] +declare const a: A<"a">; +declare const b: B<"b">; +declare class A { + x: T; + [b.y]: "fromB"; + [b.by]: "fromB2"; +} +declare class B { + y: T; + [a.x]: "fromA"; + [a.b]: "fromA2"; +} +export const v1 = a.b; +export const v2 = b.a; +export const v3 = a.fromA2; +export const v4 = b.fromB; + + +//// [lateBoundMutualMemberTables.js] +export const v1 = a.b; +export const v2 = b.a; +export const v3 = a.fromA2; +export const v4 = b.fromB; + + +//// [lateBoundMutualMemberTables.d.ts] +export declare const v1: "fromB"; +export declare const v2: "fromA"; +export declare const v3: any; +export declare const v4: "fromA2"; diff --git a/tsc/testdata/baselines/reference/compiler/lateBoundMutualMemberTables.symbols b/tsc/testdata/baselines/reference/compiler/lateBoundMutualMemberTables.symbols new file mode 100644 index 0000000000000..24eba3a29f260 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/lateBoundMutualMemberTables.symbols @@ -0,0 +1,71 @@ +//// [tests/cases/compiler/lateBoundMutualMemberTables.ts] //// + +=== lateBoundMutualMemberTables.ts === +declare const a: A<"a">; +>a : Symbol(a, Decl(lateBoundMutualMemberTables.ts, 0, 13)) +>A : Symbol(A, Decl(lateBoundMutualMemberTables.ts, 1, 24)) + +declare const b: B<"b">; +>b : Symbol(b, Decl(lateBoundMutualMemberTables.ts, 1, 13)) +>B : Symbol(B, Decl(lateBoundMutualMemberTables.ts, 6, 1)) + +declare class A { +>A : Symbol(A, Decl(lateBoundMutualMemberTables.ts, 1, 24)) +>T : Symbol(T, Decl(lateBoundMutualMemberTables.ts, 2, 16)) + + x: T; +>x : Symbol(A.x, Decl(lateBoundMutualMemberTables.ts, 2, 20)) +>T : Symbol(T, Decl(lateBoundMutualMemberTables.ts, 2, 16)) + + [b.y]: "fromB"; +>[b.y] : Symbol(A[b.y], Decl(lateBoundMutualMemberTables.ts, 3, 9)) +>b.y : Symbol(B.y, Decl(lateBoundMutualMemberTables.ts, 7, 20)) +>b : Symbol(b, Decl(lateBoundMutualMemberTables.ts, 1, 13)) +>y : Symbol(B.y, Decl(lateBoundMutualMemberTables.ts, 7, 20)) + + [b.by]: "fromB2"; +>[b.by] : Symbol(A[b.by], Decl(lateBoundMutualMemberTables.ts, 4, 19)) +>b : Symbol(b, Decl(lateBoundMutualMemberTables.ts, 1, 13)) +} +declare class B { +>B : Symbol(B, Decl(lateBoundMutualMemberTables.ts, 6, 1)) +>T : Symbol(T, Decl(lateBoundMutualMemberTables.ts, 7, 16)) + + y: T; +>y : Symbol(B.y, Decl(lateBoundMutualMemberTables.ts, 7, 20)) +>T : Symbol(T, Decl(lateBoundMutualMemberTables.ts, 7, 16)) + + [a.x]: "fromA"; +>[a.x] : Symbol(B[a.x], Decl(lateBoundMutualMemberTables.ts, 8, 9)) +>a.x : Symbol(A.x, Decl(lateBoundMutualMemberTables.ts, 2, 20)) +>a : Symbol(a, Decl(lateBoundMutualMemberTables.ts, 0, 13)) +>x : Symbol(A.x, Decl(lateBoundMutualMemberTables.ts, 2, 20)) + + [a.b]: "fromA2"; +>[a.b] : Symbol(B[a.b], Decl(lateBoundMutualMemberTables.ts, 9, 19)) +>a.b : Symbol(A[b.y], Decl(lateBoundMutualMemberTables.ts, 3, 9)) +>a : Symbol(a, Decl(lateBoundMutualMemberTables.ts, 0, 13)) +>b : Symbol(A[b.y], Decl(lateBoundMutualMemberTables.ts, 3, 9)) +} +export const v1 = a.b; +>v1 : Symbol(v1, Decl(lateBoundMutualMemberTables.ts, 12, 12)) +>a.b : Symbol(A[b.y], Decl(lateBoundMutualMemberTables.ts, 3, 9)) +>a : Symbol(a, Decl(lateBoundMutualMemberTables.ts, 0, 13)) +>b : Symbol(A[b.y], Decl(lateBoundMutualMemberTables.ts, 3, 9)) + +export const v2 = b.a; +>v2 : Symbol(v2, Decl(lateBoundMutualMemberTables.ts, 13, 12)) +>b.a : Symbol(B[a.x], Decl(lateBoundMutualMemberTables.ts, 8, 9)) +>b : Symbol(b, Decl(lateBoundMutualMemberTables.ts, 1, 13)) +>a : Symbol(B[a.x], Decl(lateBoundMutualMemberTables.ts, 8, 9)) + +export const v3 = a.fromA2; +>v3 : Symbol(v3, Decl(lateBoundMutualMemberTables.ts, 14, 12)) +>a : Symbol(a, Decl(lateBoundMutualMemberTables.ts, 0, 13)) + +export const v4 = b.fromB; +>v4 : Symbol(v4, Decl(lateBoundMutualMemberTables.ts, 15, 12)) +>b.fromB : Symbol(B[a.b], Decl(lateBoundMutualMemberTables.ts, 9, 19)) +>b : Symbol(b, Decl(lateBoundMutualMemberTables.ts, 1, 13)) +>fromB : Symbol(B[a.b], Decl(lateBoundMutualMemberTables.ts, 9, 19)) + diff --git a/tsc/testdata/baselines/reference/compiler/lateBoundMutualMemberTables.types b/tsc/testdata/baselines/reference/compiler/lateBoundMutualMemberTables.types new file mode 100644 index 0000000000000..24f60ac31fc98 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/lateBoundMutualMemberTables.types @@ -0,0 +1,69 @@ +//// [tests/cases/compiler/lateBoundMutualMemberTables.ts] //// + +=== lateBoundMutualMemberTables.ts === +declare const a: A<"a">; +>a : A<"a"> + +declare const b: B<"b">; +>b : B<"b"> + +declare class A { +>A : A + + x: T; +>x : T + + [b.y]: "fromB"; +>[b.y] : "fromB" +>b.y : "b" +>b : B<"b"> +>y : "b" + + [b.by]: "fromB2"; +>[b.by] : "fromB2" +>b.by : any +>b : B<"b"> +>by : any +} +declare class B { +>B : B + + y: T; +>y : T + + [a.x]: "fromA"; +>[a.x] : "fromA" +>a.x : "a" +>a : A<"a"> +>x : "a" + + [a.b]: "fromA2"; +>[a.b] : "fromA2" +>a.b : "fromB" +>a : A<"a"> +>b : "fromB" +} +export const v1 = a.b; +>v1 : "fromB" +>a.b : "fromB" +>a : A<"a"> +>b : "fromB" + +export const v2 = b.a; +>v2 : "fromA" +>b.a : "fromA" +>b : B<"b"> +>a : "fromA" + +export const v3 = a.fromA2; +>v3 : any +>a.fromA2 : any +>a : A<"a"> +>fromA2 : any + +export const v4 = b.fromB; +>v4 : "fromA2" +>b.fromB : "fromA2" +>b : B<"b"> +>fromB : "fromA2" + diff --git a/tsc/testdata/tests/cases/compiler/lateBoundMutualMemberTables.ts b/tsc/testdata/tests/cases/compiler/lateBoundMutualMemberTables.ts new file mode 100644 index 0000000000000..24336a6a9155b --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/lateBoundMutualMemberTables.ts @@ -0,0 +1,20 @@ +// @target: esnext +// @strict: true +// @declaration: true + +declare const a: A<"a">; +declare const b: B<"b">; +declare class A { + x: T; + [b.y]: "fromB"; + [b.by]: "fromB2"; +} +declare class B { + y: T; + [a.x]: "fromA"; + [a.b]: "fromA2"; +} +export const v1 = a.b; +export const v2 = b.a; +export const v3 = a.fromA2; +export const v4 = b.fromB; From 9e2c9a42372b7794fc296e211cb5e19f12dab6f4 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 27 Oct 2026 22:54:59 -0700 Subject: [PATCH 089/194] Discard results of inner cycles when their head finishes A cycle was tracked as a single range: results computed while any head was incomplete were discarded only when the outermost head finished. When a cycle is detected inside one already in progress, the rest of the outer cycle could read results computed from the inner head's incomplete state before that discard, so what the outer cycle ends up caching depended on the order the cycle was entered in. Each inner cycle now discards what was computed since it was detected once its head finishes, as the outermost cycle does. What survives the inner discard stays logged for the outer one. --- tsc/internal/checker/checker.go | 3 ++ tsc/internal/checker/memo.go | 72 +++++++++++++++++++++++++---- tsc/internal/checker/resolutions.go | 2 + 3 files changed, 68 insertions(+), 9 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 1af9aac42d164..914535bb65c62 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -690,6 +690,7 @@ type Checker struct { currentNodeErrorsCyclic bool // Whether a cycle was observed while collecting currentNodeErrors; see endCurrentNodeErrors discardLog []discardEntry // Restores what was cached while anything may be discarded; see "Discard log" in memo.go circularityMark int // Length of discard log when the cycle in progress was detected + innerCycles []innerCycle // Cycles detected inside the one in progress; see extendCircularity cycleParticipants []TypeResolution // Computations that observed a cycle in progress effectsMarkDepth int // 1 + resolution index of the innermost effects mark that may be discarded, or 0 varianceStack []VarianceStackEntry @@ -20446,6 +20447,8 @@ func (c *Checker) popTypeResolution() bool { c.resolutions = c.resolutions[:n] if c.circularityStart > n { c.endCircularity() + } else if len(c.innerCycles) != 0 { + c.endInnerCycles(n) } if len(c.cycleYields) != 0 && c.cycleYields[len(c.cycleYields)-1].end == n { c.endCycleYield() diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 42cb2a1642357..1bf7041306e8c 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -1303,6 +1303,9 @@ func (c *Checker) logEffects() bool { // position start. func (c *Checker) discardLogSince(start int) { start = min(start, len(c.discardLog)) + for i := range c.innerCycles { + c.innerCycles[i].mark = min(c.innerCycles[i].mark, start) + } for i := len(c.discardLog) - 1; i >= start; i-- { c.discardLog[i].restore() } @@ -1389,17 +1392,28 @@ func setFlagMemoBits[T ~uint32](c *Checker, key memoKey, p *T, mask T, bits T) { // progress was detected, except those of its participants. func (c *Checker) endCircularity() { mark := min(c.circularityMark, len(c.discardLog)) - undo := c.discardLog[mark:] - participants := c.cycleParticipants c.circularityStart = 0 + c.innerCycles = c.innerCycles[:0] + c.discardCycle(mark, false) c.cycleParticipants = nil + c.trimDiscardLog() +} + +// discardCycle discards the results logged since mark, except those of the +// participants of the cycle in progress. If retain, the entries not undone +// stay in the log, as the outer cycle may still discard them. +func (c *Checker) discardCycle(mark int, retain bool) { + undo := c.discardLog[mark:] + participants := c.cycleParticipants keep := make(map[*memoHeader]struct{}, len(participants)) for i := range participants { if p := c.typeResolutionMemo(&participants[i]); p != nil { keep[p] = struct{}{} } } - for _, u := range slices.Backward(undo) { + n := mark + for i := len(undo) - 1; i >= 0; i-- { + u := undo[i] if u.effects { // A result recomputed after the cycle also replays the effects // of the computation discarded here. @@ -1409,20 +1423,60 @@ func (c *Checker) endCircularity() { continue } u.restore() + undo[i] = discardEntry{} } - clear(undo) - c.discardLog = c.discardLog[:mark] - c.trimDiscardLog() + if retain { + for _, u := range undo { + if u.restore != nil { + c.discardLog[n] = u + n++ + } + } + } + clear(c.discardLog[n:]) + c.discardLog = c.discardLog[:n] } // extendCircularity makes the resolution at index head-1 part of the cycle in -// progress, starting one if there is none. +// progress, starting one if there is none. A cycle whose head is inside the +// one in progress is an inner cycle: what is computed from its head while it +// is incomplete is discarded when it finishes, as for the outermost, rather +// than read by the rest of the outer cycle. func (c *Checker) extendCircularity(head int) { - if c.circularityStart == 0 { + switch { + case c.circularityStart == 0: c.circularityMark = len(c.discardLog) c.circularityStart = head - } else if head < c.circularityStart { + case head < c.circularityStart: + c.addInnerCycle(c.circularityStart, c.circularityMark) c.circularityStart = head + case head > c.circularityStart: + c.addInnerCycle(head, len(c.discardLog)) + } +} + +type innerCycle struct { + head int // As Checker.circularityStart + mark int // Length of the discard log when detected +} + +func (c *Checker) addInnerCycle(head int, mark int) { + for _, ic := range c.innerCycles { + if ic.head == head { + return + } + } + c.innerCycles = append(c.innerCycles, innerCycle{head, mark}) +} + +// endInnerCycles ends the inner cycles whose head is the resolution at index +// n, which just finished. +func (c *Checker) endInnerCycles(n int) { + for i, ic := range slices.Backward(c.innerCycles) { + if ic.head > n { + c.innerCycles = slices.Delete(c.innerCycles, i, i+1) + c.discardCycle(min(ic.mark, len(c.discardLog)), true) + } } } diff --git a/tsc/internal/checker/resolutions.go b/tsc/internal/checker/resolutions.go index 00b9b930c0de4..2182cee1757b5 100644 --- a/tsc/internal/checker/resolutions.go +++ b/tsc/internal/checker/resolutions.go @@ -114,6 +114,8 @@ func (c *Checker) endResolution() *instantiationCount { c.resolutions = c.resolutions[:n] if c.circularityStart > n { c.endCircularity() + } else if len(c.innerCycles) != 0 { + c.endInnerCycles(n) } if count != nil { c.observeCost(count) From 86f2c701d2f9ccb014030d995f6b5b8adddb079d Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 27 Oct 2026 22:56:22 -0700 Subject: [PATCH 090/194] Resolve mutually dependent member tables as if entered first-declared When the member tables of two symbols depend on each other through late-bound names, re-entering a table observes the part published so far. Which table is observed partially thus depends on which one was entered first, and with it the diagnostics: entering at A reports a lookup of a late-bound member of A that entering at B does not. On re-entry of a table while the table of a symbol declared earlier is in progress, compute it again as if the cycle had been entered at that symbol, and keep only its value and effects. The cycle then always resolves as when entered at the first declared table, which is also the result of checking in program order. --- tsc/internal/checker/checker.go | 132 +++++++++++++++++++++++--------- tsc/internal/checker/memo.go | 9 +++ 2 files changed, 103 insertions(+), 38 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 914535bb65c62..b41752a96a51a 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -17012,61 +17012,117 @@ func (c *Checker) getExportsOfSymbol(symbol *ast.Symbol) ast.SymbolTable { } func (c *Checker) getResolvedMembersOrExportsOfSymbol(symbol *ast.Symbol, resolutionKind MembersOrExportsResolutionKind) ast.SymbolTable { - c.beginMemo(memoKeyOf(symbol, memoResolvedMembers+memoField(resolutionKind))) + key := memoKeyOf(symbol, memoResolvedMembers+memoField(resolutionKind)) + if floor := c.findEarlierMembersInCycle(key, symbol); floor >= 0 { + return c.yieldMembers(key, symbol, resolutionKind, floor) + } + c.beginMemo(key) result := c.getResolvedMembersOrExportsOfSymbolUncached(symbol, resolutionKind) c.endMemo() return result } +// findEarlierMembersInCycle handles re-entering the member table of symbol, +// identified by key, while it is resolved. Re-entry observes the part of the +// table published so far, so when the tables of several symbols are resolved +// in a cycle, the result depends on which table was entered first. If the +// table of a symbol declared before this one is resolved since this table +// was entered, it returns the index in resolutions of the first declared, +// the table the cycle canonically enters at; otherwise -1. +func (c *Checker) findEarlierMembersInCycle(key memoKey, symbol *ast.Symbol) int { + i, ok := c.resolving[key] + if !ok || int(i) < c.visibleStart || c.isYieldingTo(key, TypeSystemPropertyNameStructuredMembers) { + return -1 + } + for j := int(i) + 1; j < len(c.resolutions); j++ { + f := &c.resolutions[j] + if field := f.key.field(); f.key != 0 && (field == memoSymbolMembers || field == memoSymbolExports) { + if c.compareSymbols(f.key.symbol(), symbol) < 0 { + return int(i) + 1 + } + } + } + return -1 +} + +// yieldMembers computes the member table of symbol again, as if the cycle +// in progress had been entered at the table of a symbol declared before it: +// with the computation of the table in progress, which starts at floor, +// hidden. Re-entry observes the incomplete table, so what is computed since +// it started is in a cycle. The table in progress is the one cached once it +// is complete, so whatever computing it again caches is discarded, keeping +// only its result and effects for the caller. +func (c *Checker) yieldMembers(key memoKey, symbol *ast.Symbol, resolutionKind MembersOrExportsResolutionKind, floor int) ast.SymbolTable { + c.markCircular(floor - 1) + mark := c.markDiscard() + links := c.membersAndExportsLinks.Get(symbol) + saved := links[resolutionKind] + links[resolutionKind] = nil + c.beginCycleYield(key, TypeSystemPropertyNameStructuredMembers, -1, floor) + c.beginMemo(key) + result := c.resolveMembersOrExportsOfSymbol(symbol, resolutionKind, links) + c.endMemoUncached() + c.endCycleYield() + links[resolutionKind] = saved + c.discardLogSince(mark.discardLog) + c.releaseDiscardMark(mark) + return result +} + func (c *Checker) getResolvedMembersOrExportsOfSymbolUncached(symbol *ast.Symbol, resolutionKind MembersOrExportsResolutionKind) ast.SymbolTable { links := c.membersAndExportsLinks.Get(symbol) if links[resolutionKind] == nil { - isStatic := resolutionKind == MembersOrExportsResolutionKindResolvedExports - earlySymbols := symbol.Exports() - switch { - case !isStatic: - earlySymbols = symbol.Members() - case symbol.Flags()&ast.SymbolFlagsModule != 0: - earlySymbols, _ = c.getExportsOfModuleWorker(symbol) - } - links[resolutionKind] = earlySymbols - // fill in any as-yet-unresolved late-bound members. - var lateSymbols ast.SymbolTable - for _, decl := range symbol.Declarations() { - for _, member := range getMembersOfDeclaration(decl) { - if isStatic == ast.HasStaticModifier(member) { - switch { - case c.hasLateBindableName(member): - if lateSymbols == nil { - lateSymbols = ast.NewSymbolTable() - } - c.lateBindMember(symbol, earlySymbols, lateSymbols, member) - case c.hasLateBindableIndexSignature(member): - if lateSymbols == nil { - lateSymbols = ast.NewSymbolTable() - } - c.lateBindIndexSignature(symbol, earlySymbols, lateSymbols, member.AsNode() /* as LateBoundDeclaration | LateBoundBinaryExpressionDeclaration */) + c.resolveMembersOrExportsOfSymbol(symbol, resolutionKind, links) + if c.logResults() { + c.discardLog = append(c.discardLog, discardEntry{nil, func() { links[resolutionKind] = nil }, false}) + } + } + return links[resolutionKind] +} + +func (c *Checker) resolveMembersOrExportsOfSymbol(symbol *ast.Symbol, resolutionKind MembersOrExportsResolutionKind, links *MembersAndExportsLinks) ast.SymbolTable { + isStatic := resolutionKind == MembersOrExportsResolutionKindResolvedExports + earlySymbols := symbol.Exports() + switch { + case !isStatic: + earlySymbols = symbol.Members() + case symbol.Flags()&ast.SymbolFlagsModule != 0: + earlySymbols, _ = c.getExportsOfModuleWorker(symbol) + } + links[resolutionKind] = earlySymbols + // fill in any as-yet-unresolved late-bound members. + var lateSymbols ast.SymbolTable + for _, decl := range symbol.Declarations() { + for _, member := range getMembersOfDeclaration(decl) { + if isStatic == ast.HasStaticModifier(member) { + switch { + case c.hasLateBindableName(member): + if lateSymbols == nil { + lateSymbols = ast.NewSymbolTable() + } + c.lateBindMember(symbol, earlySymbols, lateSymbols, member) + case c.hasLateBindableIndexSignature(member): + if lateSymbols == nil { + lateSymbols = ast.NewSymbolTable() } + c.lateBindIndexSignature(symbol, earlySymbols, lateSymbols, member.AsNode() /* as LateBoundDeclaration | LateBoundBinaryExpressionDeclaration */) } } } - if isStatic { - if assignmentSymbol := symbol.Exports().Get(ast.InternalSymbolNameAssignmentDeclaration); assignmentSymbol != nil { - for _, member := range assignmentSymbol.Declarations() { - if c.hasLateBindableName(member) { - if lateSymbols == nil { - lateSymbols = ast.NewSymbolTable() - } - c.lateBindMember(symbol, earlySymbols, lateSymbols, member) + } + if isStatic { + if assignmentSymbol := symbol.Exports().Get(ast.InternalSymbolNameAssignmentDeclaration); assignmentSymbol != nil { + for _, member := range assignmentSymbol.Declarations() { + if c.hasLateBindableName(member) { + if lateSymbols == nil { + lateSymbols = ast.NewSymbolTable() } + c.lateBindMember(symbol, earlySymbols, lateSymbols, member) } } } - links[resolutionKind] = c.combineSymbolTables(earlySymbols, lateSymbols) - if c.logResults() { - c.discardLog = append(c.discardLog, discardEntry{nil, func() { links[resolutionKind] = nil }, false}) - } } + links[resolutionKind] = c.combineSymbolTables(earlySymbols, lateSymbols) return links[resolutionKind] } diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 1bf7041306e8c..fd8aa67ad9cef 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -117,6 +117,15 @@ func memoKeyOf[T any](entity *T, field memoField) memoKey { return memoKey(uint64(uintptr(unsafe.Pointer(entity)))<<8 | uint64(field)) } +// symbol returns the symbol identified by a key of a symbol's memo field. +func (k memoKey) symbol() *ast.Symbol { + p := uintptr(k >> 8) + // SAFETY: k was made by memoKeyOf from a symbol that lives as long as the + // program or checker store, which outlives every key made from it, so the + // address still points to that symbol. + return *(**ast.Symbol)(unsafe.Pointer(&p)) +} + // cell returns the memo identified by a key of field memoCell, which is the // address of the memo. The memo is alive, since its key is in use, and the // heap does not move. From 48e800c92e8ad1db0e445afa0303c96f2a7c7aea Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 28 Oct 2026 04:41:51 -0700 Subject: [PATCH 091/194] Resolve module table cycles from a canonical entry Module object types read each other's members while they are being resolved: re-exporting a CommonJS export whose value spreads another module's namespace object makes the tables of both modules depend on each other. Which table saw the other's partial members, and which module.exports type failed to `any`, depended on which file or query happened to come first. Checking files in a different order, checking with another checker, or emitting declarations without checking first gave different types and different declaration errors. Such a cycle now always resolves as if it had been entered at the module table declared first in program order, and a cycle entered through a symbol whose type passes through a module table is redone as if entered at that table. As in TypeScript, the pass through that table sees the other table's members as still empty, and what it computes from them stands: the symbol types and alias targets on the path from the canonical table to the partial read are kept, as TypeScript's caches keep them. Other results computed during the cycle are discarded and recomputed from complete tables, so caches that TypeScript does not have never hold partial results. The outcome is one that TypeScript gives when that table happens to be entered first, whichever order files are checked in. --- tsc/internal/checker/checker.go | 156 +++++++++++++++++- ...eckOrderSpreadCycle(checkorder=default).js | 13 +- ...derSpreadCycle(checkorder=default).symbols | 2 + ...OrderSpreadCycle(checkorder=default).types | 50 +++--- ...ckOrderSpreadCycle(checkorder=isolated).js | 13 +- ...erSpreadCycle(checkorder=isolated).symbols | 2 + ...rderSpreadCycle(checkorder=isolated).types | 50 +++--- ...eckOrderSpreadCycle(checkorder=reverse).js | 13 +- ...derSpreadCycle(checkorder=reverse).symbols | 2 + ...OrderSpreadCycle(checkorder=reverse).types | 50 +++--- ...OrderSpreadCycle(checkorder=typesfirst).js | 13 +- ...SpreadCycle(checkorder=typesfirst).symbols | 2 + ...erSpreadCycle(checkorder=typesfirst).types | 50 +++--- ...embersResolutionOrderExportStar.errors.txt | 64 +++++++ ...mespaceMembersResolutionOrderExportStar.js | 25 ++- ...ceMembersResolutionOrderExportStar.symbols | 4 + ...paceMembersResolutionOrderExportStar.types | 118 ++++++------- ...oFlakyDeclarationEmitSharedCheckerOrder.js | 56 ++----- ...yDeclarationEmitSharedCheckerOrder.symbols | 2 + ...akyDeclarationEmitSharedCheckerOrder.types | 56 +++---- ...NamespaceMembersResolutionOrder.errors.txt | 61 +++++++ ...gnosticsNamespaceMembersResolutionOrder.js | 25 ++- ...icsNamespaceMembersResolutionOrder.symbols | 4 + ...sticsNamespaceMembersResolutionOrder.types | 118 ++++++------- ...sResolutionOrderReexportedTypes.errors.txt | 77 +++++++++ ...ceMembersResolutionOrderReexportedTypes.js | 25 ++- ...bersResolutionOrderReexportedTypes.symbols | 4 + ...embersResolutionOrderReexportedTypes.types | 130 +++++++-------- 28 files changed, 794 insertions(+), 391 deletions(-) create mode 100644 tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.errors.txt diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index b41752a96a51a..4dd921ab3d60f 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -89,6 +89,11 @@ type TypeResolution struct { // canonical is the member of a cycle headed by this resolution that is // resolved first; see observeCircularHead. canonical TypeSystemEntity + // restartHidden records that a cycle entered below this resolution of a + // module table passes through it; see resolveModuleTableMembers. + restartHidden bool + // participant records that the resolution is in cycleParticipants. + participant bool } // ContextualInfo @@ -20150,7 +20155,6 @@ func (c *Checker) pushTypeResolution(target TypeSystemEntity, propertyName TypeS resolutionCycleStartIndex := c.findResolutionCycleStartIndex(target, propertyName) if resolutionCycleStartIndex >= 0 { if !c.yieldCycleToMembers(resolutionCycleStartIndex) { - c.markResolutionCycle(resolutionCycleStartIndex) return false } } @@ -20223,18 +20227,31 @@ func (c *Checker) observeHiddenMembers(t *Type) { // member table. Entering the cycle at the member table instead would not // fail, as the table is available while it is resolved, so the resolution // re-entered is computed again as if the table had been entered first: by -// the caller, with everything entered before the table hidden. Otherwise it -// yields as yieldCycle does. +// the caller, with everything entered before the table hidden. A module +// table is instead resolved again itself, as if entered first (see +// resolveModuleTableMembers), so everything above it fails until then, to +// be discarded. Otherwise it yields as yieldCycle does. It reports whether +// the resolution re-entered may be pushed. func (c *Checker) yieldCycleToMembers(start int) bool { if m := c.findMembersInCycle(start); m >= 0 { r := &c.resolutions[start].typeResolution if c.isYieldingTo(r.target, r.propertyName) { + c.markResolutionCycle(start) + return false + } + if t := &c.resolutions[m].typeResolution; t.propertyName == TypeSystemPropertyNameStructuredMembers && c.isModuleTableType(t.target.(*Type)) { + t.restartHidden = true + c.markResolutionCycle(m) return false } c.beginCycleYield(r.target, r.propertyName, len(c.resolutions), m) return true } - return c.yieldCycle(start) + if !c.yieldCycle(start) { + c.markResolutionCycle(start) + return false + } + return true } // findMembersInCycle returns the index in resolutions of the outermost @@ -20352,11 +20369,12 @@ func (c *Checker) resolvingAnywhereIndex(target TypeSystemEntity, propertyName T // cycle records its canonical member, the first in program order, and the // head resolves that member first when it finishes; see popCircularHead. // Everything else cached during the cycle is discarded like for -// isResolutionInProgress. -func (c *Checker) observeCircularHead(target TypeSystemEntity, propertyName TypeSystemPropertyName, compare func(a, b TypeSystemEntity) int) { +// isResolutionInProgress. It returns the index in resolutions of the head, or +// -1 if target is not in progress. +func (c *Checker) observeCircularHead(target TypeSystemEntity, propertyName TypeSystemPropertyName, compare func(a, b TypeSystemEntity) int) int { start := c.findResolutionCycleStartIndex(target, propertyName) if start < 0 { - return + return -1 } c.markTypeResolutionCircular(start) head := &c.resolutions[start].typeResolution @@ -20367,6 +20385,19 @@ func (c *Checker) observeCircularHead(target TypeSystemEntity, propertyName Type } } head.canonical = canonical + return start +} + +// addCycleParticipants keeps the results of the type resolutions from start +// to the top of the stack when the cycle in progress ends, as they would be +// kept had the resolution at start been entered first. +func (c *Checker) addCycleParticipants(start int) { + for i := start; i < len(c.resolutions); i++ { + if r := &c.resolutions[i].typeResolution; c.resolutions[i].isTypeResolution && r.result && !r.participant { + r.participant = true + c.cycleParticipants = append(c.cycleParticipants, *r) + } + } } // popCircularHead pops a resolution that may head a cycle observed by @@ -20927,7 +20958,16 @@ func (c *Checker) resolveStructuredTypeMembers(t *Type) *StructuredType { if t.objectFlags&ObjectFlagsMembersResolving != 0 { // Resolving members may observe the type itself, whose members are // then incomplete. - c.isResolutionInProgress(t, TypeSystemPropertyNameStructuredMembers) + if c.isModuleTableType(t) { + if start := c.observeCircularHead(t, TypeSystemPropertyNameStructuredMembers, c.compareModuleTables); start >= 0 { + // When the table is canonical, the computations that read + // its partial members keep their results, as they would + // had the table been entered first. + c.addCycleParticipants(start) + } + } else { + c.isResolutionInProgress(t, TypeSystemPropertyNameStructuredMembers) + } if len(c.cycleYields) != 0 { c.observeHiddenMembers(t) } @@ -20940,6 +20980,10 @@ func (c *Checker) resolveStructuredTypeMembers(t *Type) *StructuredType { func (c *Checker) resolveStructuredTypeMembersUncached(t *Type) *StructuredType { if t.objectFlags&ObjectFlagsMembersResolved == 0 { + if t.objectFlags&ObjectFlagsMembersResolving == 0 && c.isModuleTableType(t) { + c.resolveModuleTableMembers(t) + return t.AsStructuredType() + } // Many kinds of types make members available before they are // complete, so the resolution is on the stack, but never fails. outermost := t.objectFlags&ObjectFlagsMembersResolving == 0 @@ -20979,6 +21023,102 @@ func (c *Checker) resolveStructuredTypeMembersUncached(t *Type) *StructuredType return t.AsStructuredType() } +// isModuleTableType reports whether t is the type of a module object, whose +// members are the exports of the module. +func (c *Checker) isModuleTableType(t *Type) bool { + if t.objectFlags&ObjectFlagsAnonymous == 0 || t.symbol == nil || t.AsObjectType().target != nil { + return false + } + flags := c.getMergedSymbol(t.symbol).Flags() + return flags&ast.SymbolFlagsValueModule != 0 && flags&(ast.SymbolFlagsFunction|ast.SymbolFlagsClass|ast.SymbolFlagsEnum|ast.SymbolFlagsTypeLiteral) == 0 +} + +// compareModuleTables orders the resolutions of module object types in a +// cycle by the declarations of their modules, before any other resolutions. +func (c *Checker) compareModuleTables(a, b TypeSystemEntity) int { + ta, tb := a.(*Type), b.(*Type) + ma, mb := c.isModuleTableType(ta), c.isModuleTableType(tb) + switch { + case ma && mb: + return c.compareSymbols(ta.symbol, tb.symbol) + case ma: + return -1 + case mb: + return 1 + } + return 0 +} + +// resolveModuleTableMembers resolves the members of a module object type. +// Members are available while they are resolved, so module tables that +// read each other's members see the partial members of whichever was +// entered first. The table of the module first in program order is always +// resolved first, discarding whatever was computed starting from another, +// and a table that a cycle entered elsewhere passes through is resolved +// again as if the cycle had been entered at the table. +func (c *Checker) resolveModuleTableMembers(t *Type) { + if c.checking { + // Results computed starting from another table are discarded along + // with their effects, so resolve while recording effects. + c.withoutChecking(func() { + c.resolveModuleTableMembers(t) + }) + return + } + mark := c.markDiscard() + hidden := false + for { + t.objectFlags |= ObjectFlagsMembersResolving + c.beginTypeResolution(t, TypeSystemPropertyNameStructuredMembers) + c.resolveAnonymousTypeMembers(t) + r := c.topTypeResolution() + restart := r.restartHidden && !hidden + canonical := r.canonical + if canonical == t { + canonical = nil + } + if canonical != nil || restart { + // Discard while the cycle is still in progress, so that the + // results of its participants are discarded too. + c.discardSince(mark) + } + c.popTypeResolution() + t.objectFlags &^= ObjectFlagsMembersResolving + if canonical == nil && !restart { + break + } + c.clearStructuredMembers(t) + if canonical != nil { + c.resolveStructuredTypeMembers(canonical.(*Type)) + continue + } + // A cycle entered below the table passed through it, so the table + // is resolved again as if it had been entered first: with the + // computations in progress below it hidden. + hidden = true + c.beginCycleYield(t, TypeSystemPropertyNameStructuredMembers, -1, int(c.resolving[memoKeyOf(t, memoStructuredMembers)])) + } + if hidden { + c.endCycleYield() + } + c.releaseDiscardMark(mark) + if c.logResults() { + c.logMembersDiscard(t) + } +} + +func (c *Checker) clearStructuredMembers(t *Type) { + t.objectFlags &^= ObjectFlagsMembersResolved + data := t.AsStructuredType() + data.members = nil + data.properties = nil + if data.extra != nil { + data.extra.signatures = nil + data.extra.callSignatureCount = 0 + data.extra.indexInfos = nil + } +} + // logMembersDiscard discards the members of t when the cycle in progress // ends, like any other result cached during the cycle, so that they are // resolved again from scratch when next requested. diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).js b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).js index 47ff5eb53d06e..8d70e46a3bf67 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).js +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).js @@ -56,13 +56,20 @@ module.exports = { v: { ...M } }; //// [xb.d.ts] -declare const _exports: any; +declare const _exports: { + v: { + pa: {}; + ma: 1; + }; +}; export = _exports; //// [mb.d.ts] export { v as pb } from "./xb"; export declare const mb = 1; //// [xa.d.ts] -declare const _exports: any; +declare const _exports: { + v: {}; +}; export = _exports; //// [ma.d.ts] export { v as pa } from "./xa"; @@ -70,7 +77,7 @@ export declare const ma = 1; //// [ia.d.ts] declare const _exports: { v: { - pa: any; + pa: {}; ma: 1; }; }; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).symbols index 913c8813bf3aa..4359b0af3b06c 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).symbols +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).symbols @@ -14,6 +14,7 @@ module.exports = { v: { ...M } }; === /ma.js === export { v as pa } from "./xa"; +>v : Symbol(v, Decl(xa.js, 2, 18)) >pa : Symbol(pa, Decl(ma.js, 0, 8)) export const ma = 1; @@ -21,6 +22,7 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; +>v : Symbol(v, Decl(xb.js, 2, 18)) >pb : Symbol(pb, Decl(mb.js, 0, 8)) export const mb = 1; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).types b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).types index 51c929a492fd4..b82d88007b600 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).types +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=default).types @@ -7,19 +7,19 @@ const M = /** @type {any} */ (null); >(null) : any module.exports = { v: { ...M } }; ->module.exports = { v: { ...M } } : { v: { pa: any; ma: 1; }; } ->module.exports : { v: { pa: any; ma: 1; }; } ->module : { exports: { v: { pa: any; ma: 1; }; }; } ->exports : { v: { pa: any; ma: 1; }; } ->{ v: { ...M } } : { v: { pa: any; ma: 1; }; } ->v : { pa: any; ma: 1; } ->{ ...M } : { pa: any; ma: 1; } +>module.exports = { v: { ...M } } : { v: { pa: {}; ma: 1; }; } +>module.exports : { v: { pa: {}; ma: 1; }; } +>module : { exports: { v: { pa: {}; ma: 1; }; }; } +>exports : { v: { pa: {}; ma: 1; }; } +>{ v: { ...M } } : { v: { pa: {}; ma: 1; }; } +>v : { pa: {}; ma: 1; } +>{ ...M } : { pa: {}; ma: 1; } >M : typeof import("./ma") === /ma.js === export { v as pa } from "./xa"; ->v : any ->pa : any +>v : {} +>pa : {} export const ma = 1; >ma : 1 @@ -27,8 +27,8 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; ->v : any ->pb : any +>v : { pa: {}; ma: 1; } +>pb : { pa: {}; ma: 1; } export const mb = 1; >mb : 1 @@ -41,13 +41,13 @@ const M = /** @type {any} */ (null); >(null) : any module.exports = { v: { ...M } }; ->module.exports = { v: { ...M } } : { v: { pb: any; mb: 1; }; } ->module.exports : any ->module : { exports: any; } ->exports : any ->{ v: { ...M } } : { v: { pb: any; mb: 1; }; } ->v : { pb: any; mb: 1; } ->{ ...M } : { pb: any; mb: 1; } +>module.exports = { v: { ...M } } : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } +>module.exports : { v: {}; } +>module : { exports: { v: {}; }; } +>exports : { v: {}; } +>{ v: { ...M } } : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } +>v : { pb: { pa: {}; ma: 1; }; mb: 1; } +>{ ...M } : { pb: { pa: {}; ma: 1; }; mb: 1; } >M : typeof import("./mb") === /xb.js === @@ -57,12 +57,12 @@ const M = /** @type {any} */ (null); >(null) : any module.exports = { v: { ...M } }; ->module.exports = { v: { ...M } } : { v: { pa: any; ma: 1; }; } ->module.exports : any ->module : { exports: any; } ->exports : any ->{ v: { ...M } } : { v: { pa: any; ma: 1; }; } ->v : { pa: any; ma: 1; } ->{ ...M } : { pa: any; ma: 1; } +>module.exports = { v: { ...M } } : { v: { pa: {}; ma: 1; }; } +>module.exports : { v: { pa: {}; ma: 1; }; } +>module : { exports: { v: { pa: {}; ma: 1; }; }; } +>exports : { v: { pa: {}; ma: 1; }; } +>{ v: { ...M } } : { v: { pa: {}; ma: 1; }; } +>v : { pa: {}; ma: 1; } +>{ ...M } : { pa: {}; ma: 1; } >M : typeof import("./ma") diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).js b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).js index 47ff5eb53d06e..8d70e46a3bf67 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).js +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).js @@ -56,13 +56,20 @@ module.exports = { v: { ...M } }; //// [xb.d.ts] -declare const _exports: any; +declare const _exports: { + v: { + pa: {}; + ma: 1; + }; +}; export = _exports; //// [mb.d.ts] export { v as pb } from "./xb"; export declare const mb = 1; //// [xa.d.ts] -declare const _exports: any; +declare const _exports: { + v: {}; +}; export = _exports; //// [ma.d.ts] export { v as pa } from "./xa"; @@ -70,7 +77,7 @@ export declare const ma = 1; //// [ia.d.ts] declare const _exports: { v: { - pa: any; + pa: {}; ma: 1; }; }; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).symbols index 913c8813bf3aa..4359b0af3b06c 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).symbols +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).symbols @@ -14,6 +14,7 @@ module.exports = { v: { ...M } }; === /ma.js === export { v as pa } from "./xa"; +>v : Symbol(v, Decl(xa.js, 2, 18)) >pa : Symbol(pa, Decl(ma.js, 0, 8)) export const ma = 1; @@ -21,6 +22,7 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; +>v : Symbol(v, Decl(xb.js, 2, 18)) >pb : Symbol(pb, Decl(mb.js, 0, 8)) export const mb = 1; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).types b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).types index 51c929a492fd4..b82d88007b600 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).types +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=isolated).types @@ -7,19 +7,19 @@ const M = /** @type {any} */ (null); >(null) : any module.exports = { v: { ...M } }; ->module.exports = { v: { ...M } } : { v: { pa: any; ma: 1; }; } ->module.exports : { v: { pa: any; ma: 1; }; } ->module : { exports: { v: { pa: any; ma: 1; }; }; } ->exports : { v: { pa: any; ma: 1; }; } ->{ v: { ...M } } : { v: { pa: any; ma: 1; }; } ->v : { pa: any; ma: 1; } ->{ ...M } : { pa: any; ma: 1; } +>module.exports = { v: { ...M } } : { v: { pa: {}; ma: 1; }; } +>module.exports : { v: { pa: {}; ma: 1; }; } +>module : { exports: { v: { pa: {}; ma: 1; }; }; } +>exports : { v: { pa: {}; ma: 1; }; } +>{ v: { ...M } } : { v: { pa: {}; ma: 1; }; } +>v : { pa: {}; ma: 1; } +>{ ...M } : { pa: {}; ma: 1; } >M : typeof import("./ma") === /ma.js === export { v as pa } from "./xa"; ->v : any ->pa : any +>v : {} +>pa : {} export const ma = 1; >ma : 1 @@ -27,8 +27,8 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; ->v : any ->pb : any +>v : { pa: {}; ma: 1; } +>pb : { pa: {}; ma: 1; } export const mb = 1; >mb : 1 @@ -41,13 +41,13 @@ const M = /** @type {any} */ (null); >(null) : any module.exports = { v: { ...M } }; ->module.exports = { v: { ...M } } : { v: { pb: any; mb: 1; }; } ->module.exports : any ->module : { exports: any; } ->exports : any ->{ v: { ...M } } : { v: { pb: any; mb: 1; }; } ->v : { pb: any; mb: 1; } ->{ ...M } : { pb: any; mb: 1; } +>module.exports = { v: { ...M } } : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } +>module.exports : { v: {}; } +>module : { exports: { v: {}; }; } +>exports : { v: {}; } +>{ v: { ...M } } : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } +>v : { pb: { pa: {}; ma: 1; }; mb: 1; } +>{ ...M } : { pb: { pa: {}; ma: 1; }; mb: 1; } >M : typeof import("./mb") === /xb.js === @@ -57,12 +57,12 @@ const M = /** @type {any} */ (null); >(null) : any module.exports = { v: { ...M } }; ->module.exports = { v: { ...M } } : { v: { pa: any; ma: 1; }; } ->module.exports : any ->module : { exports: any; } ->exports : any ->{ v: { ...M } } : { v: { pa: any; ma: 1; }; } ->v : { pa: any; ma: 1; } ->{ ...M } : { pa: any; ma: 1; } +>module.exports = { v: { ...M } } : { v: { pa: {}; ma: 1; }; } +>module.exports : { v: { pa: {}; ma: 1; }; } +>module : { exports: { v: { pa: {}; ma: 1; }; }; } +>exports : { v: { pa: {}; ma: 1; }; } +>{ v: { ...M } } : { v: { pa: {}; ma: 1; }; } +>v : { pa: {}; ma: 1; } +>{ ...M } : { pa: {}; ma: 1; } >M : typeof import("./ma") diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).js b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).js index 47ff5eb53d06e..8d70e46a3bf67 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).js +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).js @@ -56,13 +56,20 @@ module.exports = { v: { ...M } }; //// [xb.d.ts] -declare const _exports: any; +declare const _exports: { + v: { + pa: {}; + ma: 1; + }; +}; export = _exports; //// [mb.d.ts] export { v as pb } from "./xb"; export declare const mb = 1; //// [xa.d.ts] -declare const _exports: any; +declare const _exports: { + v: {}; +}; export = _exports; //// [ma.d.ts] export { v as pa } from "./xa"; @@ -70,7 +77,7 @@ export declare const ma = 1; //// [ia.d.ts] declare const _exports: { v: { - pa: any; + pa: {}; ma: 1; }; }; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).symbols index 913c8813bf3aa..4359b0af3b06c 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).symbols +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).symbols @@ -14,6 +14,7 @@ module.exports = { v: { ...M } }; === /ma.js === export { v as pa } from "./xa"; +>v : Symbol(v, Decl(xa.js, 2, 18)) >pa : Symbol(pa, Decl(ma.js, 0, 8)) export const ma = 1; @@ -21,6 +22,7 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; +>v : Symbol(v, Decl(xb.js, 2, 18)) >pb : Symbol(pb, Decl(mb.js, 0, 8)) export const mb = 1; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).types b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).types index 51c929a492fd4..b82d88007b600 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).types +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=reverse).types @@ -7,19 +7,19 @@ const M = /** @type {any} */ (null); >(null) : any module.exports = { v: { ...M } }; ->module.exports = { v: { ...M } } : { v: { pa: any; ma: 1; }; } ->module.exports : { v: { pa: any; ma: 1; }; } ->module : { exports: { v: { pa: any; ma: 1; }; }; } ->exports : { v: { pa: any; ma: 1; }; } ->{ v: { ...M } } : { v: { pa: any; ma: 1; }; } ->v : { pa: any; ma: 1; } ->{ ...M } : { pa: any; ma: 1; } +>module.exports = { v: { ...M } } : { v: { pa: {}; ma: 1; }; } +>module.exports : { v: { pa: {}; ma: 1; }; } +>module : { exports: { v: { pa: {}; ma: 1; }; }; } +>exports : { v: { pa: {}; ma: 1; }; } +>{ v: { ...M } } : { v: { pa: {}; ma: 1; }; } +>v : { pa: {}; ma: 1; } +>{ ...M } : { pa: {}; ma: 1; } >M : typeof import("./ma") === /ma.js === export { v as pa } from "./xa"; ->v : any ->pa : any +>v : {} +>pa : {} export const ma = 1; >ma : 1 @@ -27,8 +27,8 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; ->v : any ->pb : any +>v : { pa: {}; ma: 1; } +>pb : { pa: {}; ma: 1; } export const mb = 1; >mb : 1 @@ -41,13 +41,13 @@ const M = /** @type {any} */ (null); >(null) : any module.exports = { v: { ...M } }; ->module.exports = { v: { ...M } } : { v: { pb: any; mb: 1; }; } ->module.exports : any ->module : { exports: any; } ->exports : any ->{ v: { ...M } } : { v: { pb: any; mb: 1; }; } ->v : { pb: any; mb: 1; } ->{ ...M } : { pb: any; mb: 1; } +>module.exports = { v: { ...M } } : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } +>module.exports : { v: {}; } +>module : { exports: { v: {}; }; } +>exports : { v: {}; } +>{ v: { ...M } } : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } +>v : { pb: { pa: {}; ma: 1; }; mb: 1; } +>{ ...M } : { pb: { pa: {}; ma: 1; }; mb: 1; } >M : typeof import("./mb") === /xb.js === @@ -57,12 +57,12 @@ const M = /** @type {any} */ (null); >(null) : any module.exports = { v: { ...M } }; ->module.exports = { v: { ...M } } : { v: { pa: any; ma: 1; }; } ->module.exports : any ->module : { exports: any; } ->exports : any ->{ v: { ...M } } : { v: { pa: any; ma: 1; }; } ->v : { pa: any; ma: 1; } ->{ ...M } : { pa: any; ma: 1; } +>module.exports = { v: { ...M } } : { v: { pa: {}; ma: 1; }; } +>module.exports : { v: { pa: {}; ma: 1; }; } +>module : { exports: { v: { pa: {}; ma: 1; }; }; } +>exports : { v: { pa: {}; ma: 1; }; } +>{ v: { ...M } } : { v: { pa: {}; ma: 1; }; } +>v : { pa: {}; ma: 1; } +>{ ...M } : { pa: {}; ma: 1; } >M : typeof import("./ma") diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).js b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).js index 47ff5eb53d06e..8d70e46a3bf67 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).js +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).js @@ -56,13 +56,20 @@ module.exports = { v: { ...M } }; //// [xb.d.ts] -declare const _exports: any; +declare const _exports: { + v: { + pa: {}; + ma: 1; + }; +}; export = _exports; //// [mb.d.ts] export { v as pb } from "./xb"; export declare const mb = 1; //// [xa.d.ts] -declare const _exports: any; +declare const _exports: { + v: {}; +}; export = _exports; //// [ma.d.ts] export { v as pa } from "./xa"; @@ -70,7 +77,7 @@ export declare const ma = 1; //// [ia.d.ts] declare const _exports: { v: { - pa: any; + pa: {}; ma: 1; }; }; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).symbols index 913c8813bf3aa..4359b0af3b06c 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).symbols +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).symbols @@ -14,6 +14,7 @@ module.exports = { v: { ...M } }; === /ma.js === export { v as pa } from "./xa"; +>v : Symbol(v, Decl(xa.js, 2, 18)) >pa : Symbol(pa, Decl(ma.js, 0, 8)) export const ma = 1; @@ -21,6 +22,7 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; +>v : Symbol(v, Decl(xb.js, 2, 18)) >pb : Symbol(pb, Decl(mb.js, 0, 8)) export const mb = 1; diff --git a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).types index 51c929a492fd4..b82d88007b600 100644 --- a/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).types +++ b/tsc/testdata/baselines/reference/compiler/checkOrderSpreadCycle(checkorder=typesfirst).types @@ -7,19 +7,19 @@ const M = /** @type {any} */ (null); >(null) : any module.exports = { v: { ...M } }; ->module.exports = { v: { ...M } } : { v: { pa: any; ma: 1; }; } ->module.exports : { v: { pa: any; ma: 1; }; } ->module : { exports: { v: { pa: any; ma: 1; }; }; } ->exports : { v: { pa: any; ma: 1; }; } ->{ v: { ...M } } : { v: { pa: any; ma: 1; }; } ->v : { pa: any; ma: 1; } ->{ ...M } : { pa: any; ma: 1; } +>module.exports = { v: { ...M } } : { v: { pa: {}; ma: 1; }; } +>module.exports : { v: { pa: {}; ma: 1; }; } +>module : { exports: { v: { pa: {}; ma: 1; }; }; } +>exports : { v: { pa: {}; ma: 1; }; } +>{ v: { ...M } } : { v: { pa: {}; ma: 1; }; } +>v : { pa: {}; ma: 1; } +>{ ...M } : { pa: {}; ma: 1; } >M : typeof import("./ma") === /ma.js === export { v as pa } from "./xa"; ->v : any ->pa : any +>v : {} +>pa : {} export const ma = 1; >ma : 1 @@ -27,8 +27,8 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; ->v : any ->pb : any +>v : { pa: {}; ma: 1; } +>pb : { pa: {}; ma: 1; } export const mb = 1; >mb : 1 @@ -41,13 +41,13 @@ const M = /** @type {any} */ (null); >(null) : any module.exports = { v: { ...M } }; ->module.exports = { v: { ...M } } : { v: { pb: any; mb: 1; }; } ->module.exports : any ->module : { exports: any; } ->exports : any ->{ v: { ...M } } : { v: { pb: any; mb: 1; }; } ->v : { pb: any; mb: 1; } ->{ ...M } : { pb: any; mb: 1; } +>module.exports = { v: { ...M } } : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } +>module.exports : { v: {}; } +>module : { exports: { v: {}; }; } +>exports : { v: {}; } +>{ v: { ...M } } : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } +>v : { pb: { pa: {}; ma: 1; }; mb: 1; } +>{ ...M } : { pb: { pa: {}; ma: 1; }; mb: 1; } >M : typeof import("./mb") === /xb.js === @@ -57,12 +57,12 @@ const M = /** @type {any} */ (null); >(null) : any module.exports = { v: { ...M } }; ->module.exports = { v: { ...M } } : { v: { pa: any; ma: 1; }; } ->module.exports : any ->module : { exports: any; } ->exports : any ->{ v: { ...M } } : { v: { pa: any; ma: 1; }; } ->v : { pa: any; ma: 1; } ->{ ...M } : { pa: any; ma: 1; } +>module.exports = { v: { ...M } } : { v: { pa: {}; ma: 1; }; } +>module.exports : { v: { pa: {}; ma: 1; }; } +>module : { exports: { v: { pa: {}; ma: 1; }; }; } +>exports : { v: { pa: {}; ma: 1; }; } +>{ v: { ...M } } : { v: { pa: {}; ma: 1; }; } +>v : { pa: {}; ma: 1; } +>{ ...M } : { pa: {}; ma: 1; } >M : typeof import("./ma") diff --git a/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.errors.txt b/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.errors.txt new file mode 100644 index 0000000000000..bff4827ef673c --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.errors.txt @@ -0,0 +1,64 @@ +/main.ts(8,32): error TS2339: Property 'ma' does not exist on type '{}'. + + +==== /main.ts (1 errors) ==== + import * as idx from "./index"; + const all = { ...idx }; + import * as MA from "./ma"; + import * as MB from "./mb"; + export const fromA = MA.pa; + export const fromB = MB.pb; + export const checkA: 1 = MA.pa.mb; + export const checkB: 1 = MB.pb.ma; + ~~ +!!! error TS2339: Property 'ma' does not exist on type '{}'. + +==== /ma.js (0 errors) ==== + export { v as pa } from "./xa"; + export const ma = 1; + +==== /mb.js (0 errors) ==== + export { v as pb } from "./xb"; + export const mb = 1; + +==== /xa.js (0 errors) ==== + /** @type {typeof import("./mb")} */ + const M = /** @type {any} */ (null); + const o = { v: { ...M } }; + module.exports = o; + +==== /xb.js (0 errors) ==== + /** @type {typeof import("./ma")} */ + const M = /** @type {any} */ (null); + const o = { v: { ...M } }; + module.exports = o; + +==== /ia.js (0 errors) ==== + /** @type {typeof import("./ma")} */ + const M = /** @type {any} */ (null); + const o = { v: { ...M } }; + module.exports = o; + +==== /ib.js (0 errors) ==== + /** @type {typeof import("./mb")} */ + const M = /** @type {any} */ (null); + const o = { v: { ...M } }; + module.exports = o; + +==== /star.js (0 errors) ==== + export { v as a } from "./ia"; + +==== /index.js (0 errors) ==== + export { v as b } from "./ib"; + export * from "./star"; + export const f1 = 1; + export const f2 = 2; + export const f3 = 3; + export const f4 = 4; + export const f5 = 5; + export const f6 = 6; + export const f7 = 7; + export const f8 = 8; + export const f9 = 9; + export const f10 = 10; + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.js b/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.js index 00c3b7c128c67..e7f345491f402 100644 --- a/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.js +++ b/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.js @@ -184,13 +184,20 @@ exports.checkB = MB.pb.ma; //// [xa.d.ts] export = o; -declare const o: any; +declare const o: { + v: { + pb: {}; + mb: 1; + }; +}; //// [ma.d.ts] export { v as pa } from "./xa"; export declare const ma = 1; //// [xb.d.ts] export = o; -declare const o: any; +declare const o: { + v: {}; +}; //// [mb.d.ts] export { v as pb } from "./xb"; export declare const mb = 1; @@ -198,7 +205,7 @@ export declare const mb = 1; export = o; declare const o: { v: { - pb: any; + pb: {}; mb: 1; }; }; @@ -206,7 +213,10 @@ declare const o: { export = o; declare const o: { v: { - pa: any; + pa: { + pb: {}; + mb: 1; + }; ma: 1; }; }; @@ -226,7 +236,10 @@ export declare const f8 = 8; export declare const f9 = 9; export declare const f10 = 10; //// [main.d.ts] -export declare const fromA: any; -export declare const fromB: any; +export declare const fromA: { + pb: {}; + mb: 1; +}; +export declare const fromB: {}; export declare const checkA: 1; export declare const checkB: 1; diff --git a/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.symbols b/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.symbols index aecc0b5b94015..6997e4d5a273d 100644 --- a/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.symbols +++ b/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.symbols @@ -28,9 +28,11 @@ export const fromB = MB.pb; export const checkA: 1 = MA.pa.mb; >checkA : Symbol(checkA, Decl(main.ts, 6, 12)) +>MA.pa.mb : Symbol(mb, Decl(mb.js, 1, 12)) >MA.pa : Symbol(MA.pa, Decl(ma.js, 0, 8)) >MA : Symbol(MA, Decl(main.ts, 2, 6)) >pa : Symbol(MA.pa, Decl(ma.js, 0, 8)) +>mb : Symbol(mb, Decl(mb.js, 1, 12)) export const checkB: 1 = MB.pb.ma; >checkB : Symbol(checkB, Decl(main.ts, 7, 12)) @@ -40,6 +42,7 @@ export const checkB: 1 = MB.pb.ma; === /ma.js === export { v as pa } from "./xa"; +>v : Symbol(v, Decl(xa.js, 2, 11)) >pa : Symbol(pa, Decl(ma.js, 0, 8)) export const ma = 1; @@ -47,6 +50,7 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; +>v : Symbol(v, Decl(xb.js, 2, 11)) >pb : Symbol(pb, Decl(mb.js, 0, 8)) export const mb = 1; diff --git a/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.types b/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.types index 7be52850fe46c..49f1de0b3ac44 100644 --- a/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.types +++ b/tsc/testdata/baselines/reference/compiler/namespaceMembersResolutionOrderExportStar.types @@ -5,8 +5,8 @@ import * as idx from "./index"; >idx : typeof idx const all = { ...idx }; ->all : { a: { pa: any; ma: 1; }; b: { pb: any; mb: 1; }; f1: 1; f2: 2; f3: 3; f4: 4; f5: 5; f6: 6; f7: 7; f8: 8; f9: 9; f10: 10; } ->{ ...idx } : { a: { pa: any; ma: 1; }; b: { pb: any; mb: 1; }; f1: 1; f2: 2; f3: 3; f4: 4; f5: 5; f6: 6; f7: 7; f8: 8; f9: 9; f10: 10; } +>all : { a: { pa: { pb: {}; mb: 1; }; ma: 1; }; b: { pb: {}; mb: 1; }; f1: 1; f2: 2; f3: 3; f4: 4; f5: 5; f6: 6; f7: 7; f8: 8; f9: 9; f10: 10; } +>{ ...idx } : { a: { pa: { pb: {}; mb: 1; }; ma: 1; }; b: { pb: {}; mb: 1; }; f1: 1; f2: 2; f3: 3; f4: 4; f5: 5; f6: 6; f7: 7; f8: 8; f9: 9; f10: 10; } >idx : typeof idx import * as MA from "./ma"; @@ -16,37 +16,37 @@ import * as MB from "./mb"; >MB : typeof MB export const fromA = MA.pa; ->fromA : error ->MA.pa : error +>fromA : { pb: {}; mb: 1; } +>MA.pa : { pb: {}; mb: 1; } >MA : typeof MA ->pa : any +>pa : { pb: {}; mb: 1; } export const fromB = MB.pb; ->fromB : error ->MB.pb : error +>fromB : {} +>MB.pb : {} >MB : typeof MB ->pb : any +>pb : {} export const checkA: 1 = MA.pa.mb; >checkA : 1 ->MA.pa.mb : error ->MA.pa : any +>MA.pa.mb : 1 +>MA.pa : { pb: {}; mb: 1; } >MA : typeof MA ->pa : any ->mb : any +>pa : { pb: {}; mb: 1; } +>mb : 1 export const checkB: 1 = MB.pb.ma; >checkB : 1 ->MB.pb.ma : error ->MB.pb : any +>MB.pb.ma : any +>MB.pb : {} >MB : typeof MB ->pb : any +>pb : {} >ma : any === /ma.js === export { v as pa } from "./xa"; ->v : any ->pa : any +>v : { pb: {}; mb: 1; } +>pa : { pb: {}; mb: 1; } export const ma = 1; >ma : 1 @@ -54,8 +54,8 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; ->v : any ->pb : any +>v : {} +>pb : {} export const mb = 1; >mb : 1 @@ -68,18 +68,18 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : any ->{ v: { ...M } } : { v: { pb: any; mb: 1; }; } ->v : { pb: any; mb: 1; } ->{ ...M } : { pb: any; mb: 1; } +>o : { v: { pb: {}; mb: 1; }; } +>{ v: { ...M } } : { v: { pb: {}; mb: 1; }; } +>v : { pb: {}; mb: 1; } +>{ ...M } : { pb: {}; mb: 1; } >M : typeof import("./mb") module.exports = o; ->module.exports = o : any ->module.exports : any ->module : { exports: any; } ->exports : any ->o : any +>module.exports = o : { v: { pb: {}; mb: 1; }; } +>module.exports : { v: { pb: {}; mb: 1; }; } +>module : { exports: { v: { pb: {}; mb: 1; }; }; } +>exports : { v: { pb: {}; mb: 1; }; } +>o : { v: { pb: {}; mb: 1; }; } === /xb.js === /** @type {typeof import("./ma")} */ @@ -88,18 +88,18 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : any ->{ v: { ...M } } : { v: { pa: any; ma: 1; }; } ->v : { pa: any; ma: 1; } ->{ ...M } : { pa: any; ma: 1; } +>o : { v: {}; } +>{ v: { ...M } } : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } +>v : { pa: { pb: {}; mb: 1; }; ma: 1; } +>{ ...M } : { pa: { pb: {}; mb: 1; }; ma: 1; } >M : typeof import("./ma") module.exports = o; ->module.exports = o : any ->module.exports : any ->module : { exports: any; } ->exports : any ->o : any +>module.exports = o : { v: {}; } +>module.exports : { v: {}; } +>module : { exports: { v: {}; }; } +>exports : { v: {}; } +>o : { v: {}; } === /ia.js === /** @type {typeof import("./ma")} */ @@ -108,18 +108,18 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : { v: { pa: any; ma: 1; }; } ->{ v: { ...M } } : { v: { pa: any; ma: 1; }; } ->v : { pa: any; ma: 1; } ->{ ...M } : { pa: any; ma: 1; } +>o : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } +>{ v: { ...M } } : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } +>v : { pa: { pb: {}; mb: 1; }; ma: 1; } +>{ ...M } : { pa: { pb: {}; mb: 1; }; ma: 1; } >M : typeof import("./ma") module.exports = o; ->module.exports = o : { v: { pa: any; ma: 1; }; } ->module.exports : { v: { pa: any; ma: 1; }; } ->module : { exports: { v: { pa: any; ma: 1; }; }; } ->exports : { v: { pa: any; ma: 1; }; } ->o : { v: { pa: any; ma: 1; }; } +>module.exports = o : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } +>module.exports : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } +>module : { exports: { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; }; } +>exports : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } +>o : { v: { pa: { pb: {}; mb: 1; }; ma: 1; }; } === /ib.js === /** @type {typeof import("./mb")} */ @@ -128,28 +128,28 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : { v: { pb: any; mb: 1; }; } ->{ v: { ...M } } : { v: { pb: any; mb: 1; }; } ->v : { pb: any; mb: 1; } ->{ ...M } : { pb: any; mb: 1; } +>o : { v: { pb: {}; mb: 1; }; } +>{ v: { ...M } } : { v: { pb: {}; mb: 1; }; } +>v : { pb: {}; mb: 1; } +>{ ...M } : { pb: {}; mb: 1; } >M : typeof import("./mb") module.exports = o; ->module.exports = o : { v: { pb: any; mb: 1; }; } ->module.exports : { v: { pb: any; mb: 1; }; } ->module : { exports: { v: { pb: any; mb: 1; }; }; } ->exports : { v: { pb: any; mb: 1; }; } ->o : { v: { pb: any; mb: 1; }; } +>module.exports = o : { v: { pb: {}; mb: 1; }; } +>module.exports : { v: { pb: {}; mb: 1; }; } +>module : { exports: { v: { pb: {}; mb: 1; }; }; } +>exports : { v: { pb: {}; mb: 1; }; } +>o : { v: { pb: {}; mb: 1; }; } === /star.js === export { v as a } from "./ia"; ->v : { pa: any; ma: 1; } ->a : { pa: any; ma: 1; } +>v : { pa: { pb: {}; mb: 1; }; ma: 1; } +>a : { pa: { pb: {}; mb: 1; }; ma: 1; } === /index.js === export { v as b } from "./ib"; ->v : { pb: any; mb: 1; } ->b : { pb: any; mb: 1; } +>v : { pb: {}; mb: 1; } +>b : { pb: {}; mb: 1; } export * from "./star"; export const f1 = 1; diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.js b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.js index 498f2e8c5a4e6..9d0b0d5c36d1b 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.js +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.js @@ -145,57 +145,29 @@ exports.c = 1; //// [xb.d.ts] export = o; -declare const o: any; +declare const o: { + v: { + pa: {}; + ma: 1; + }; +}; //// [mb.d.ts] export { v as pb } from "./xb"; export declare const mb = 1; //// [xa.d.ts] export = o; -declare const o: any; +declare const o: { + v: {}; +}; //// [ma.d.ts] export { v as pa } from "./xa"; export declare const ma = 1; //// [a.d.ts] -export declare const fromA: any; +export declare const fromA: {}; //// [b.d.ts] -export declare const fromB: any; +export declare const fromB: { + pa: {}; + ma: 1; +}; //// [c.d.ts] export declare const c = 1; - - -//// [DtsFileErrors] - - -/out/ma.d.ts(1,10): error TS2305: Module '"./xa"' has no exported member 'v'. -/out/mb.d.ts(1,10): error TS2305: Module '"./xb"' has no exported member 'v'. - - -==== /out/ma.d.ts (1 errors) ==== - export { v as pa } from "./xa"; - ~ -!!! error TS2305: Module '"./xa"' has no exported member 'v'. - export declare const ma = 1; - -==== /out/mb.d.ts (1 errors) ==== - export { v as pb } from "./xb"; - ~ -!!! error TS2305: Module '"./xb"' has no exported member 'v'. - export declare const mb = 1; - -==== /out/xa.d.ts (0 errors) ==== - export = o; - declare const o: any; - -==== /out/xb.d.ts (0 errors) ==== - export = o; - declare const o: any; - -==== /out/a.d.ts (0 errors) ==== - export declare const fromA: any; - -==== /out/b.d.ts (0 errors) ==== - export declare const fromB: any; - -==== /out/c.d.ts (0 errors) ==== - export declare const c = 1; - \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.symbols b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.symbols index fbfd54c051a3a..b400eedf066bc 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.symbols +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.symbols @@ -2,6 +2,7 @@ === /ma.js === export { v as pa } from "./xa"; +>v : Symbol(v, Decl(xa.js, 2, 11)) >pa : Symbol(pa, Decl(ma.js, 0, 8)) export const ma = 1; @@ -9,6 +10,7 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; +>v : Symbol(v, Decl(xb.js, 2, 11)) >pb : Symbol(pb, Decl(mb.js, 0, 8)) export const mb = 1; diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.types b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.types index b139db84af158..cde44436bf6e0 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.types +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDeclarationEmitSharedCheckerOrder.types @@ -2,8 +2,8 @@ === /ma.js === export { v as pa } from "./xa"; ->v : any ->pa : any +>v : {} +>pa : {} export const ma = 1; >ma : 1 @@ -11,8 +11,8 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; ->v : any ->pb : any +>v : { pa: {}; ma: 1; } +>pb : { pa: {}; ma: 1; } export const mb = 1; >mb : 1 @@ -25,18 +25,18 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : any ->{ v: { ...M } } : { v: { pb: any; mb: 1; }; } ->v : { pb: any; mb: 1; } ->{ ...M } : { pb: any; mb: 1; } +>o : { v: {}; } +>{ v: { ...M } } : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } +>v : { pb: { pa: {}; ma: 1; }; mb: 1; } +>{ ...M } : { pb: { pa: {}; ma: 1; }; mb: 1; } >M : typeof import("./mb") module.exports = o; ->module.exports = o : any ->module.exports : any ->module : { exports: any; } ->exports : any ->o : any +>module.exports = o : { v: {}; } +>module.exports : { v: {}; } +>module : { exports: { v: {}; }; } +>exports : { v: {}; } +>o : { v: {}; } === /xb.js === /** @type {typeof import("./ma")} */ @@ -45,38 +45,38 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : any ->{ v: { ...M } } : { v: { pa: any; ma: 1; }; } ->v : { pa: any; ma: 1; } ->{ ...M } : { pa: any; ma: 1; } +>o : { v: { pa: {}; ma: 1; }; } +>{ v: { ...M } } : { v: { pa: {}; ma: 1; }; } +>v : { pa: {}; ma: 1; } +>{ ...M } : { pa: {}; ma: 1; } >M : typeof import("./ma") module.exports = o; ->module.exports = o : any ->module.exports : any ->module : { exports: any; } ->exports : any ->o : any +>module.exports = o : { v: { pa: {}; ma: 1; }; } +>module.exports : { v: { pa: {}; ma: 1; }; } +>module : { exports: { v: { pa: {}; ma: 1; }; }; } +>exports : { v: { pa: {}; ma: 1; }; } +>o : { v: { pa: {}; ma: 1; }; } === /a.ts === import * as MA from "./ma"; >MA : typeof MA export const fromA = MA.pa; ->fromA : error ->MA.pa : error +>fromA : {} +>MA.pa : {} >MA : typeof MA ->pa : any +>pa : {} === /b.ts === import * as MB from "./mb"; >MB : typeof MB export const fromB = MB.pb; ->fromB : error ->MB.pb : error +>fromB : { pa: {}; ma: 1; } +>MB.pb : { pa: {}; ma: 1; } >MB : typeof MB ->pb : any +>pb : { pa: {}; ma: 1; } === /c.ts === export const c = 1; diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.errors.txt b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.errors.txt new file mode 100644 index 0000000000000..a15ea5b841fce --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.errors.txt @@ -0,0 +1,61 @@ +/main.ts(7,32): error TS2339: Property 'mb' does not exist on type '{}'. + + +==== /main.ts (1 errors) ==== + import * as idx from "./index"; + const all = { ...idx }; + import * as MA from "./ma"; + import * as MB from "./mb"; + export const fromA = MA.pa; + export const fromB = MB.pb; + export const checkA: 1 = MA.pa.mb; + ~~ +!!! error TS2339: Property 'mb' does not exist on type '{}'. + export const checkB: 1 = MB.pb.ma; + +==== /ma.js (0 errors) ==== + export { v as pa } from "./xa"; + export const ma = 1; + +==== /mb.js (0 errors) ==== + export { v as pb } from "./xb"; + export const mb = 1; + +==== /xa.js (0 errors) ==== + /** @type {typeof import("./mb")} */ + const M = /** @type {any} */ (null); + const o = { v: { ...M } }; + module.exports = o; + +==== /xb.js (0 errors) ==== + /** @type {typeof import("./ma")} */ + const M = /** @type {any} */ (null); + const o = { v: { ...M } }; + module.exports = o; + +==== /ia.js (0 errors) ==== + /** @type {typeof import("./ma")} */ + const M = /** @type {any} */ (null); + const o = { v: { ...M } }; + module.exports = o; + +==== /ib.js (0 errors) ==== + /** @type {typeof import("./mb")} */ + const M = /** @type {any} */ (null); + const o = { v: { ...M } }; + module.exports = o; + +==== /index.js (0 errors) ==== + export { v as a } from "./ia"; + export { v as b } from "./ib"; + export const f1 = 1; + export const f2 = 2; + export const f3 = 3; + export const f4 = 4; + export const f5 = 5; + export const f6 = 6; + export const f7 = 7; + export const f8 = 8; + export const f9 = 9; + export const f10 = 10; + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.js b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.js index 0685700e160d6..4881af4a1d031 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.js +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.js @@ -162,13 +162,20 @@ exports.checkB = MB.pb.ma; //// [xb.d.ts] export = o; -declare const o: any; +declare const o: { + v: { + pa: {}; + ma: 1; + }; +}; //// [mb.d.ts] export { v as pb } from "./xb"; export declare const mb = 1; //// [xa.d.ts] export = o; -declare const o: any; +declare const o: { + v: {}; +}; //// [ma.d.ts] export { v as pa } from "./xa"; export declare const ma = 1; @@ -176,7 +183,7 @@ export declare const ma = 1; export = o; declare const o: { v: { - pa: any; + pa: {}; ma: 1; }; }; @@ -184,7 +191,10 @@ declare const o: { export = o; declare const o: { v: { - pb: any; + pb: { + pa: {}; + ma: 1; + }; mb: 1; }; }; @@ -202,7 +212,10 @@ export declare const f8 = 8; export declare const f9 = 9; export declare const f10 = 10; //// [main.d.ts] -export declare const fromA: any; -export declare const fromB: any; +export declare const fromA: {}; +export declare const fromB: { + pa: {}; + ma: 1; +}; export declare const checkA: 1; export declare const checkB: 1; diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.symbols b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.symbols index 7e1526484f1de..74e3cd92e4248 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.symbols +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.symbols @@ -34,12 +34,15 @@ export const checkA: 1 = MA.pa.mb; export const checkB: 1 = MB.pb.ma; >checkB : Symbol(checkB, Decl(main.ts, 7, 12)) +>MB.pb.ma : Symbol(ma, Decl(ma.js, 1, 12)) >MB.pb : Symbol(MB.pb, Decl(mb.js, 0, 8)) >MB : Symbol(MB, Decl(main.ts, 3, 6)) >pb : Symbol(MB.pb, Decl(mb.js, 0, 8)) +>ma : Symbol(ma, Decl(ma.js, 1, 12)) === /ma.js === export { v as pa } from "./xa"; +>v : Symbol(v, Decl(xa.js, 2, 11)) >pa : Symbol(pa, Decl(ma.js, 0, 8)) export const ma = 1; @@ -47,6 +50,7 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; +>v : Symbol(v, Decl(xb.js, 2, 11)) >pb : Symbol(pb, Decl(mb.js, 0, 8)) export const mb = 1; diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.types b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.types index 8176a758903e3..f7142131ca798 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.types +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrder.types @@ -5,8 +5,8 @@ import * as idx from "./index"; >idx : typeof idx const all = { ...idx }; ->all : { a: { pa: any; ma: 1; }; b: { pb: any; mb: 1; }; f1: 1; f2: 2; f3: 3; f4: 4; f5: 5; f6: 6; f7: 7; f8: 8; f9: 9; f10: 10; } ->{ ...idx } : { a: { pa: any; ma: 1; }; b: { pb: any; mb: 1; }; f1: 1; f2: 2; f3: 3; f4: 4; f5: 5; f6: 6; f7: 7; f8: 8; f9: 9; f10: 10; } +>all : { a: { pa: {}; ma: 1; }; b: { pb: { pa: {}; ma: 1; }; mb: 1; }; f1: 1; f2: 2; f3: 3; f4: 4; f5: 5; f6: 6; f7: 7; f8: 8; f9: 9; f10: 10; } +>{ ...idx } : { a: { pa: {}; ma: 1; }; b: { pb: { pa: {}; ma: 1; }; mb: 1; }; f1: 1; f2: 2; f3: 3; f4: 4; f5: 5; f6: 6; f7: 7; f8: 8; f9: 9; f10: 10; } >idx : typeof idx import * as MA from "./ma"; @@ -16,37 +16,37 @@ import * as MB from "./mb"; >MB : typeof MB export const fromA = MA.pa; ->fromA : error ->MA.pa : error +>fromA : {} +>MA.pa : {} >MA : typeof MA ->pa : any +>pa : {} export const fromB = MB.pb; ->fromB : error ->MB.pb : error +>fromB : { pa: {}; ma: 1; } +>MB.pb : { pa: {}; ma: 1; } >MB : typeof MB ->pb : any +>pb : { pa: {}; ma: 1; } export const checkA: 1 = MA.pa.mb; >checkA : 1 ->MA.pa.mb : error ->MA.pa : any +>MA.pa.mb : any +>MA.pa : {} >MA : typeof MA ->pa : any +>pa : {} >mb : any export const checkB: 1 = MB.pb.ma; >checkB : 1 ->MB.pb.ma : error ->MB.pb : any +>MB.pb.ma : 1 +>MB.pb : { pa: {}; ma: 1; } >MB : typeof MB ->pb : any ->ma : any +>pb : { pa: {}; ma: 1; } +>ma : 1 === /ma.js === export { v as pa } from "./xa"; ->v : any ->pa : any +>v : {} +>pa : {} export const ma = 1; >ma : 1 @@ -54,8 +54,8 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; ->v : any ->pb : any +>v : { pa: {}; ma: 1; } +>pb : { pa: {}; ma: 1; } export const mb = 1; >mb : 1 @@ -68,18 +68,18 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : any ->{ v: { ...M } } : { v: { pb: any; mb: 1; }; } ->v : { pb: any; mb: 1; } ->{ ...M } : { pb: any; mb: 1; } +>o : { v: {}; } +>{ v: { ...M } } : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } +>v : { pb: { pa: {}; ma: 1; }; mb: 1; } +>{ ...M } : { pb: { pa: {}; ma: 1; }; mb: 1; } >M : typeof import("./mb") module.exports = o; ->module.exports = o : any ->module.exports : any ->module : { exports: any; } ->exports : any ->o : any +>module.exports = o : { v: {}; } +>module.exports : { v: {}; } +>module : { exports: { v: {}; }; } +>exports : { v: {}; } +>o : { v: {}; } === /xb.js === /** @type {typeof import("./ma")} */ @@ -88,18 +88,18 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : any ->{ v: { ...M } } : { v: { pa: any; ma: 1; }; } ->v : { pa: any; ma: 1; } ->{ ...M } : { pa: any; ma: 1; } +>o : { v: { pa: {}; ma: 1; }; } +>{ v: { ...M } } : { v: { pa: {}; ma: 1; }; } +>v : { pa: {}; ma: 1; } +>{ ...M } : { pa: {}; ma: 1; } >M : typeof import("./ma") module.exports = o; ->module.exports = o : any ->module.exports : any ->module : { exports: any; } ->exports : any ->o : any +>module.exports = o : { v: { pa: {}; ma: 1; }; } +>module.exports : { v: { pa: {}; ma: 1; }; } +>module : { exports: { v: { pa: {}; ma: 1; }; }; } +>exports : { v: { pa: {}; ma: 1; }; } +>o : { v: { pa: {}; ma: 1; }; } === /ia.js === /** @type {typeof import("./ma")} */ @@ -108,18 +108,18 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : { v: { pa: any; ma: 1; }; } ->{ v: { ...M } } : { v: { pa: any; ma: 1; }; } ->v : { pa: any; ma: 1; } ->{ ...M } : { pa: any; ma: 1; } +>o : { v: { pa: {}; ma: 1; }; } +>{ v: { ...M } } : { v: { pa: {}; ma: 1; }; } +>v : { pa: {}; ma: 1; } +>{ ...M } : { pa: {}; ma: 1; } >M : typeof import("./ma") module.exports = o; ->module.exports = o : { v: { pa: any; ma: 1; }; } ->module.exports : { v: { pa: any; ma: 1; }; } ->module : { exports: { v: { pa: any; ma: 1; }; }; } ->exports : { v: { pa: any; ma: 1; }; } ->o : { v: { pa: any; ma: 1; }; } +>module.exports = o : { v: { pa: {}; ma: 1; }; } +>module.exports : { v: { pa: {}; ma: 1; }; } +>module : { exports: { v: { pa: {}; ma: 1; }; }; } +>exports : { v: { pa: {}; ma: 1; }; } +>o : { v: { pa: {}; ma: 1; }; } === /ib.js === /** @type {typeof import("./mb")} */ @@ -128,27 +128,27 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : { v: { pb: any; mb: 1; }; } ->{ v: { ...M } } : { v: { pb: any; mb: 1; }; } ->v : { pb: any; mb: 1; } ->{ ...M } : { pb: any; mb: 1; } +>o : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } +>{ v: { ...M } } : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } +>v : { pb: { pa: {}; ma: 1; }; mb: 1; } +>{ ...M } : { pb: { pa: {}; ma: 1; }; mb: 1; } >M : typeof import("./mb") module.exports = o; ->module.exports = o : { v: { pb: any; mb: 1; }; } ->module.exports : { v: { pb: any; mb: 1; }; } ->module : { exports: { v: { pb: any; mb: 1; }; }; } ->exports : { v: { pb: any; mb: 1; }; } ->o : { v: { pb: any; mb: 1; }; } +>module.exports = o : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } +>module.exports : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } +>module : { exports: { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; }; } +>exports : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } +>o : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } === /index.js === export { v as a } from "./ia"; ->v : { pa: any; ma: 1; } ->a : { pa: any; ma: 1; } +>v : { pa: {}; ma: 1; } +>a : { pa: {}; ma: 1; } export { v as b } from "./ib"; ->v : { pb: any; mb: 1; } ->b : { pb: any; mb: 1; } +>v : { pb: { pa: {}; ma: 1; }; mb: 1; } +>b : { pb: { pa: {}; ma: 1; }; mb: 1; } export const f1 = 1; >f1 : 1 diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.errors.txt b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.errors.txt new file mode 100644 index 0000000000000..c3d47c451cd56 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.errors.txt @@ -0,0 +1,77 @@ +/main.ts(7,32): error TS2339: Property 'mb' does not exist on type '{}'. + + +==== /main.ts (1 errors) ==== + import * as idx from "./d"; + const all = { ...idx }; + import * as MA from "./ma"; + import * as MB from "./mb"; + export const fromA = MA.pa; + export const fromB = MB.pb; + export const checkA: 1 = MA.pa.mb; + ~~ +!!! error TS2339: Property 'mb' does not exist on type '{}'. + export const checkB: 1 = MB.pb.ma; + +==== /ma.js (0 errors) ==== + export { v as pa } from "./xa"; + export const ma = 1; + +==== /mb.js (0 errors) ==== + export { v as pb } from "./xb"; + export const mb = 1; + +==== /xa.js (0 errors) ==== + /** @type {typeof import("./mb")} */ + const M = /** @type {any} */ (null); + const o = { v: { ...M } }; + module.exports = o; + +==== /xb.js (0 errors) ==== + /** @type {typeof import("./ma")} */ + const M = /** @type {any} */ (null); + const o = { v: { ...M } }; + module.exports = o; + +==== /ia.js (0 errors) ==== + /** @type {typeof import("./ma")} */ + const M = /** @type {any} */ (null); + const o = { v: { ...M } }; + module.exports = o; + +==== /ib.js (0 errors) ==== + /** @type {typeof import("./mb")} */ + const M = /** @type {any} */ (null); + const o = { v: { ...M } }; + module.exports = o; + +==== /ia2.d.ts (0 errors) ==== + export { v } from "./ia"; + export type v = number; + +==== /ib2.d.ts (0 errors) ==== + export { v } from "./ib"; + export type v = number; + +==== /index.d.ts (0 errors) ==== + export { v as a } from "./ia2"; + export { v as b } from "./ib2"; + export const f1: 1; + export const f2: 2; + export const f3: 3; + export const f4: 4; + export const f5: 5; + export const f6: 6; + export const f7: 7; + export const f8: 8; + export const f9: 9; + export const f10: 10; + +==== /index2.d.ts (0 errors) ==== + export { v as a } from "./ia2"; + export { v as b } from "./ib2"; + +==== /d.d.ts (0 errors) ==== + export * from "./index"; + export * from "./index2"; + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.js b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.js index 16451214413ab..78caebf29bfbb 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.js +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.js @@ -160,13 +160,20 @@ exports.checkB = MB.pb.ma; //// [xb.d.ts] export = o; -declare const o: any; +declare const o: { + v: { + pa: {}; + ma: 1; + }; +}; //// [mb.d.ts] export { v as pb } from "./xb"; export declare const mb = 1; //// [xa.d.ts] export = o; -declare const o: any; +declare const o: { + v: {}; +}; //// [ma.d.ts] export { v as pa } from "./xa"; export declare const ma = 1; @@ -174,7 +181,7 @@ export declare const ma = 1; export = o; declare const o: { v: { - pa: any; + pa: {}; ma: 1; }; }; @@ -182,12 +189,18 @@ declare const o: { export = o; declare const o: { v: { - pb: any; + pb: { + pa: {}; + ma: 1; + }; mb: 1; }; }; //// [main.d.ts] -export declare const fromA: any; -export declare const fromB: any; +export declare const fromA: {}; +export declare const fromB: { + pa: {}; + ma: 1; +}; export declare const checkA: 1; export declare const checkB: 1; diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.symbols b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.symbols index 9e37f17fe0dc2..5d199dbcf8abb 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.symbols +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.symbols @@ -34,12 +34,15 @@ export const checkA: 1 = MA.pa.mb; export const checkB: 1 = MB.pb.ma; >checkB : Symbol(checkB, Decl(main.ts, 7, 12)) +>MB.pb.ma : Symbol(ma, Decl(ma.js, 1, 12)) >MB.pb : Symbol(MB.pb, Decl(mb.js, 0, 8)) >MB : Symbol(MB, Decl(main.ts, 3, 6)) >pb : Symbol(MB.pb, Decl(mb.js, 0, 8)) +>ma : Symbol(ma, Decl(ma.js, 1, 12)) === /ma.js === export { v as pa } from "./xa"; +>v : Symbol(v, Decl(xa.js, 2, 11)) >pa : Symbol(pa, Decl(ma.js, 0, 8)) export const ma = 1; @@ -47,6 +50,7 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; +>v : Symbol(v, Decl(xb.js, 2, 11)) >pb : Symbol(pb, Decl(mb.js, 0, 8)) export const mb = 1; diff --git a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.types b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.types index 561dc63d54bb8..7354cbcd52d6f 100644 --- a/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.types +++ b/tsc/testdata/baselines/reference/compiler/noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.types @@ -5,8 +5,8 @@ import * as idx from "./d"; >idx : typeof idx const all = { ...idx }; ->all : { a: { pa: any; ma: 1; }; b: { pb: any; mb: 1; }; f1: 1; f2: 2; f3: 3; f4: 4; f5: 5; f6: 6; f7: 7; f8: 8; f9: 9; f10: 10; } ->{ ...idx } : { a: { pa: any; ma: 1; }; b: { pb: any; mb: 1; }; f1: 1; f2: 2; f3: 3; f4: 4; f5: 5; f6: 6; f7: 7; f8: 8; f9: 9; f10: 10; } +>all : { a: { pa: {}; ma: 1; }; b: { pb: { pa: {}; ma: 1; }; mb: 1; }; f1: 1; f2: 2; f3: 3; f4: 4; f5: 5; f6: 6; f7: 7; f8: 8; f9: 9; f10: 10; } +>{ ...idx } : { a: { pa: {}; ma: 1; }; b: { pb: { pa: {}; ma: 1; }; mb: 1; }; f1: 1; f2: 2; f3: 3; f4: 4; f5: 5; f6: 6; f7: 7; f8: 8; f9: 9; f10: 10; } >idx : typeof idx import * as MA from "./ma"; @@ -16,37 +16,37 @@ import * as MB from "./mb"; >MB : typeof MB export const fromA = MA.pa; ->fromA : error ->MA.pa : error +>fromA : {} +>MA.pa : {} >MA : typeof MA ->pa : any +>pa : {} export const fromB = MB.pb; ->fromB : error ->MB.pb : error +>fromB : { pa: {}; ma: 1; } +>MB.pb : { pa: {}; ma: 1; } >MB : typeof MB ->pb : any +>pb : { pa: {}; ma: 1; } export const checkA: 1 = MA.pa.mb; >checkA : 1 ->MA.pa.mb : error ->MA.pa : any +>MA.pa.mb : any +>MA.pa : {} >MA : typeof MA ->pa : any +>pa : {} >mb : any export const checkB: 1 = MB.pb.ma; >checkB : 1 ->MB.pb.ma : error ->MB.pb : any +>MB.pb.ma : 1 +>MB.pb : { pa: {}; ma: 1; } >MB : typeof MB ->pb : any ->ma : any +>pb : { pa: {}; ma: 1; } +>ma : 1 === /ma.js === export { v as pa } from "./xa"; ->v : any ->pa : any +>v : {} +>pa : {} export const ma = 1; >ma : 1 @@ -54,8 +54,8 @@ export const ma = 1; === /mb.js === export { v as pb } from "./xb"; ->v : any ->pb : any +>v : { pa: {}; ma: 1; } +>pb : { pa: {}; ma: 1; } export const mb = 1; >mb : 1 @@ -68,18 +68,18 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : any ->{ v: { ...M } } : { v: { pb: any; mb: 1; }; } ->v : { pb: any; mb: 1; } ->{ ...M } : { pb: any; mb: 1; } +>o : { v: {}; } +>{ v: { ...M } } : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } +>v : { pb: { pa: {}; ma: 1; }; mb: 1; } +>{ ...M } : { pb: { pa: {}; ma: 1; }; mb: 1; } >M : typeof import("./mb") module.exports = o; ->module.exports = o : any ->module.exports : any ->module : { exports: any; } ->exports : any ->o : any +>module.exports = o : { v: {}; } +>module.exports : { v: {}; } +>module : { exports: { v: {}; }; } +>exports : { v: {}; } +>o : { v: {}; } === /xb.js === /** @type {typeof import("./ma")} */ @@ -88,18 +88,18 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : any ->{ v: { ...M } } : { v: { pa: any; ma: 1; }; } ->v : { pa: any; ma: 1; } ->{ ...M } : { pa: any; ma: 1; } +>o : { v: { pa: {}; ma: 1; }; } +>{ v: { ...M } } : { v: { pa: {}; ma: 1; }; } +>v : { pa: {}; ma: 1; } +>{ ...M } : { pa: {}; ma: 1; } >M : typeof import("./ma") module.exports = o; ->module.exports = o : any ->module.exports : any ->module : { exports: any; } ->exports : any ->o : any +>module.exports = o : { v: { pa: {}; ma: 1; }; } +>module.exports : { v: { pa: {}; ma: 1; }; } +>module : { exports: { v: { pa: {}; ma: 1; }; }; } +>exports : { v: { pa: {}; ma: 1; }; } +>o : { v: { pa: {}; ma: 1; }; } === /ia.js === /** @type {typeof import("./ma")} */ @@ -108,18 +108,18 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : { v: { pa: any; ma: 1; }; } ->{ v: { ...M } } : { v: { pa: any; ma: 1; }; } ->v : { pa: any; ma: 1; } ->{ ...M } : { pa: any; ma: 1; } +>o : { v: { pa: {}; ma: 1; }; } +>{ v: { ...M } } : { v: { pa: {}; ma: 1; }; } +>v : { pa: {}; ma: 1; } +>{ ...M } : { pa: {}; ma: 1; } >M : typeof import("./ma") module.exports = o; ->module.exports = o : { v: { pa: any; ma: 1; }; } ->module.exports : { v: { pa: any; ma: 1; }; } ->module : { exports: { v: { pa: any; ma: 1; }; }; } ->exports : { v: { pa: any; ma: 1; }; } ->o : { v: { pa: any; ma: 1; }; } +>module.exports = o : { v: { pa: {}; ma: 1; }; } +>module.exports : { v: { pa: {}; ma: 1; }; } +>module : { exports: { v: { pa: {}; ma: 1; }; }; } +>exports : { v: { pa: {}; ma: 1; }; } +>o : { v: { pa: {}; ma: 1; }; } === /ib.js === /** @type {typeof import("./mb")} */ @@ -128,41 +128,41 @@ const M = /** @type {any} */ (null); >(null) : any const o = { v: { ...M } }; ->o : { v: { pb: any; mb: 1; }; } ->{ v: { ...M } } : { v: { pb: any; mb: 1; }; } ->v : { pb: any; mb: 1; } ->{ ...M } : { pb: any; mb: 1; } +>o : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } +>{ v: { ...M } } : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } +>v : { pb: { pa: {}; ma: 1; }; mb: 1; } +>{ ...M } : { pb: { pa: {}; ma: 1; }; mb: 1; } >M : typeof import("./mb") module.exports = o; ->module.exports = o : { v: { pb: any; mb: 1; }; } ->module.exports : { v: { pb: any; mb: 1; }; } ->module : { exports: { v: { pb: any; mb: 1; }; }; } ->exports : { v: { pb: any; mb: 1; }; } ->o : { v: { pb: any; mb: 1; }; } +>module.exports = o : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } +>module.exports : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } +>module : { exports: { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; }; } +>exports : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } +>o : { v: { pb: { pa: {}; ma: 1; }; mb: 1; }; } === /ia2.d.ts === export { v } from "./ia"; ->v : { pa: any; ma: 1; } +>v : { pa: {}; ma: 1; } export type v = number; >v : number === /ib2.d.ts === export { v } from "./ib"; ->v : { pb: any; mb: 1; } +>v : { pb: { pa: {}; ma: 1; }; mb: 1; } export type v = number; >v : number === /index.d.ts === export { v as a } from "./ia2"; ->v : { pa: any; ma: 1; } ->a : { pa: any; ma: 1; } +>v : { pa: {}; ma: 1; } +>a : { pa: {}; ma: 1; } export { v as b } from "./ib2"; ->v : { pb: any; mb: 1; } ->b : { pb: any; mb: 1; } +>v : { pb: { pa: {}; ma: 1; }; mb: 1; } +>b : { pb: { pa: {}; ma: 1; }; mb: 1; } export const f1: 1; >f1 : 1 @@ -196,12 +196,12 @@ export const f10: 10; === /index2.d.ts === export { v as a } from "./ia2"; ->v : { pa: any; ma: 1; } ->a : { pa: any; ma: 1; } +>v : { pa: {}; ma: 1; } +>a : { pa: {}; ma: 1; } export { v as b } from "./ib2"; ->v : { pb: any; mb: 1; } ->b : { pb: any; mb: 1; } +>v : { pb: { pa: {}; ma: 1; }; mb: 1; } +>b : { pb: { pa: {}; ma: 1; }; mb: 1; } === /d.d.ts === From 2a75013c88a5d9e0492801ff178831284d856a4a Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 28 Oct 2026 08:21:48 -0700 Subject: [PATCH 092/194] Read resolved structured members without a computation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Resolving the members of a type that already has them began and ended a memo computation on every call, and the members of most types are read far more often than they are resolved. A resolved type only needs its memo read, which accounts for its effects and instantiation count like any cached result. VS Code, default settings, n=10: │ before │ after │ │ sec/op │ sec/op vs base │ VSCode 23.45 ± 10% 21.16 ± 12% -9.78% (p=0.005 n=10) │ before │ after │ │ peak-RSS-bytes │ peak-RSS-bytes vs base │ VSCode 6.533Gi ± 3% 6.525Gi ± 3% ~ (p=0.684 n=10) │ before │ after │ │ instructions/op │ instructions/op vs base │ VSCode 452.4G ± 3% 387.9G ± 3% -14.26% (p=0.000 n=10) Mutator instructions with GC off and one checker, which are stable to about 0.1% and so show changes too small for the timings above: 326.85G -> 271.33G (-17.0%). --- tsc/internal/checker/checker.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 4dd921ab3d60f..d55d9b8185f5c 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -20955,6 +20955,14 @@ func (c *Checker) isApplicableIndexType(source *Type, target *Type) bool { } func (c *Checker) resolveStructuredTypeMembers(t *Type) *StructuredType { + key := memoKeyOf(t, memoStructuredMembers) + if t.objectFlags&(ObjectFlagsMembersResolved|ObjectFlagsMembersResolving) == ObjectFlagsMembersResolved { + // Resolved members are only read. + if c.observing() { + c.observeMemo(key) + } + return t.AsStructuredType() + } if t.objectFlags&ObjectFlagsMembersResolving != 0 { // Resolving members may observe the type itself, whose members are // then incomplete. @@ -20972,7 +20980,7 @@ func (c *Checker) resolveStructuredTypeMembers(t *Type) *StructuredType { c.observeHiddenMembers(t) } } - c.beginMemo(memoKeyOf(t, memoStructuredMembers)) + c.beginMemo(key) result := c.resolveStructuredTypeMembersUncached(t) c.endMemo() return result From cd2735c0871b6f33b0c37d645d42d6473736db7b Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 28 Oct 2026 08:34:26 -0700 Subject: [PATCH 093/194] Read resolved base constraints without a computation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Once a type's base constraint is resolved, every later request only needs the stored value. Beginning a memo computation just to find that out costs a resolution push, a resolving-map insert and delete, and an effect merge on one of the checker's hottest paths. VS Code, default settings, n=10: │ before │ after │ │ sec/op │ sec/op vs base │ VSCode 21.16 ± 12% 20.60 ± 13% ~ (p=0.218 n=10) │ before │ after │ │ peak-RSS-bytes │ peak-RSS-bytes vs base │ VSCode 6.525Gi ± 3% 6.604Gi ± 2% ~ (p=0.631 n=10) │ before │ after │ │ instructions/op │ instructions/op vs base │ VSCode 387.9G ± 3% 388.0G ± 5% ~ (p=0.481 n=10) Mutator instructions with GC off and one checker, which are stable to about 0.1% and so show changes too small for the timings above: 271.33G -> 263.00G (-3.1%). --- tsc/internal/checker/checker.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index d55d9b8185f5c..5ab6cb8877070 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -30143,6 +30143,10 @@ func (c *Checker) getBaseConstraintOfType(t *Type) *Type { } func (c *Checker) getResolvedBaseConstraint(t *Type, stack []RecursionId) *Type { + if constrained := t.AsConstrainedType(); constrained != nil && constrained.resolvedBaseConstraint.peek() != nil { + // A resolved base constraint is only read. + return constrained.resolvedBaseConstraint.get(c) + } c.beginMemo(memoKeyOf(t, memoBaseConstraint)) result := c.getResolvedBaseConstraintUncached(t, stack) c.endMemo() From 66e4c12fd7ee10d87bb07eb43e88bd9b5107a6e2 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 28 Oct 2026 08:34:26 -0700 Subject: [PATCH 094/194] Look up memo state once when beginning a memo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit beginMemo fetched the same memo state up to three times: once for replaying pending effects, once to begin the state, and once more through storedCost to observe its instantiation count. Fetching it once avoids redundant map lookups and lets storedCost go away. VS Code, default settings, n=10: │ before │ after │ │ sec/op │ sec/op vs base │ VSCode 20.60 ± 13% 20.50 ± 15% ~ (p=0.616 n=10) │ before │ after │ │ peak-RSS-bytes │ peak-RSS-bytes vs base │ VSCode 6.604Gi ± 2% 6.458Gi ± 3% ~ (p=0.165 n=10) │ before │ after │ │ instructions/op │ instructions/op vs base │ VSCode 388.0G ± 5% 380.2G ± 3% ~ (p=0.075 n=10) Mutator instructions with GC off and one checker, which are stable to about 0.1% and so show changes too small for the timings above: 263.00G -> 262.30G (-0.3%). --- tsc/internal/checker/memo.go | 16 +++++++++++----- tsc/internal/checker/relater.go | 2 +- tsc/internal/checker/resolutions.go | 23 ++--------------------- 3 files changed, 14 insertions(+), 27 deletions(-) diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index fd8aa67ad9cef..4bbfdec31f115 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -522,7 +522,7 @@ func (m *memoMap[K, V]) begin(c *Checker, k K) { c.markCircular(outer - 1) } m.resolvingKeys = append(m.resolvingKeys, k) - c.beginResolution(0, m, len(m.resolvingKeys)-1) + c.beginResolution(m, len(m.resolvingKeys)-1) if c.checking { if c.memoPendingCount != 0 && m.memoStates != nil { c.replayPending(m.memoStates[k]) @@ -627,21 +627,27 @@ func (c *Checker) observing() bool { // resolution for this computation, which in a query records its effects. It // must be matched by endMemo. func (c *Checker) beginMemo(key memoKey) { - c.beginResolution(key, nil, 0) + state := c.peekMemoState(key) + if state != nil { + // Entering a computed result reads it. + c.observeCost(state.count) + } + c.beginResolving(key) + c.appendResolution(key, nil, 0, int32(len(c.instantiationStack))) if c.checking { if c.memoPendingCount != 0 { - c.replayPending(c.peekMemoState(key)) + c.replayPending(state) } c.beginQueryFromCheck() // The outermost computation re-enters nothing. - c.beginState(c.peekMemoState(key), 0) + c.beginState(state, 0) return } outer := c.resolvingIndex(key) if outer == len(c.resolutions) { outer = 0 } - c.beginState(c.peekMemoState(key), outer) + c.beginState(state, outer) } // beginState is beginMemo for the memo state of a result, in a query. outer diff --git a/tsc/internal/checker/relater.go b/tsc/internal/checker/relater.go index dfb64f08484be..888a0e8e4b54f 100644 --- a/tsc/internal/checker/relater.go +++ b/tsc/internal/checker/relater.go @@ -3557,7 +3557,7 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError // The result is cached, so instantiations it needs count against // depth limits from here, not from wherever it is first compared // (see "Instantiation limits" in memo.go). - r.c.beginResolution(0, nil, 0) + r.c.beginResolution(nil, 0) result = r.structuredTypeRelatedTo(source, target, reportErrors, intersectionState) count = r.c.endResolution() } diff --git a/tsc/internal/checker/resolutions.go b/tsc/internal/checker/resolutions.go index 2182cee1757b5..7d904d669a6c2 100644 --- a/tsc/internal/checker/resolutions.go +++ b/tsc/internal/checker/resolutions.go @@ -64,16 +64,8 @@ func (c *Checker) currentResolution() *resolution { // beginResolution starts a resolution with an empty instantiation count for a // computation, which also starts the depth limit of instantiations (see // "Instantiation limits" in memo.go). -func (c *Checker) beginResolution(key memoKey, source memoStateSource, index int) { - if key != 0 && c.inResolution() { - // Entering a computed result reads it. - c.observeCost(c.storedCost(key)) - } - if key != 0 { - c.beginResolving(key) - } - base := int32(len(c.instantiationStack)) - c.appendResolution(key, source, index, base) +func (c *Checker) beginResolution(source memoStateSource, index int) { + c.appendResolution(0, source, index, int32(len(c.instantiationStack))) } // beginNodeResolution starts a resolution for checking a node, which @@ -272,17 +264,6 @@ func (c *Checker) costSoFar() *instantiationCount { return nil } -func (c *Checker) storedCost(key memoKey) *instantiationCount { - if !c.mayHaveCost(key) { - return nil - } - state := c.peekMemoState(key) - if state == nil { - return nil - } - return state.count -} - // The work filter is a set of the memo keys whose memo states may store work, // so that reading a result without effects to account for can skip looking up // its memo state. Most reads within computations only account for work, and From eab7501e40718db4af8637eefa2ade2585bed1d0 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 28 Oct 2026 09:19:08 -0700 Subject: [PATCH 095/194] Remember which resolution records its key in progress MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ending a computation looked up its key among those in progress to see whether it was the one recorded there. The resolution already knows whether it recorded its key when it began, so the lookup is unnecessary. VS Code, default settings, n=10: │ before │ after │ │ sec/op │ sec/op vs base │ VSCode 20.50 ± 15% 20.30 ± 2% ~ (p=0.148 n=10) │ before │ after │ │ peak-RSS-bytes │ peak-RSS-bytes vs base │ VSCode 6.458Gi ± 3% 6.449Gi ± 3% ~ (p=0.912 n=10) │ before │ after │ │ instructions/op │ instructions/op vs base │ VSCode 380.2G ± 3% 379.9G ± 2% ~ (p=0.912 n=10) Mutator instructions with GC off and one checker, which are stable to about 0.1% and so show changes too small for the timings above: 262.30G -> 261.23G (-0.4%). --- tsc/internal/checker/memo.go | 3 ++- tsc/internal/checker/resolutions.go | 26 ++++++++++++++++---------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 4bbfdec31f115..7712c80a969d6 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -632,8 +632,9 @@ func (c *Checker) beginMemo(key memoKey) { // Entering a computed result reads it. c.observeCost(state.count) } - c.beginResolving(key) + resolving := c.beginResolving(key) c.appendResolution(key, nil, 0, int32(len(c.instantiationStack))) + c.resolutions[len(c.resolutions)-1].resolving = resolving if c.checking { if c.memoPendingCount != 0 { c.replayPending(state) diff --git a/tsc/internal/checker/resolutions.go b/tsc/internal/checker/resolutions.go index 7d904d669a6c2..e71ec55521ae1 100644 --- a/tsc/internal/checker/resolutions.go +++ b/tsc/internal/checker/resolutions.go @@ -28,6 +28,7 @@ type resolution struct { // reuse of its result; see memo.go. memo bool isQuery bool + resolving bool // The resolution is the one in Checker.resolving for key fromCheck bool // The query began in a check; see beginQueryFromCheck prevMemo int32 // Checker.memoTop on entry result *memoState // Memo state of the result computed @@ -92,7 +93,7 @@ func (c *Checker) endResolution() *instantiationCount { n := len(c.resolutions) - 1 f := &c.resolutions[n] debug.Assert(!f.isTypeResolution, "resolution left on the stack") - c.endResolving(f, n) + c.endResolving(f) count := f.count fromCheck := f.fromCheck if f.memo { @@ -165,7 +166,7 @@ func (c *Checker) forgetCost() { if f.source != nil { f.source.popState(int(f.index)) } - c.endResolving(f, len(c.resolutions)-1) + c.endResolving(f) f.key, f.source = 0, nil } @@ -180,14 +181,16 @@ func (c *Checker) resolvingIndex(key memoKey) int { // beginResolving records that the resolution about to be pushed computes key, // unless a computation of key is already in progress, in which case the new -// one re-enters it as the policy of its kind says; see memoReentry. -func (c *Checker) beginResolving(key memoKey) { - if i, ok := c.resolving[key]; ok { +// one re-enters it as the policy of its kind says; see memoReentry. It reports +// whether the resolution is recorded. +func (c *Checker) beginResolving(key memoKey) bool { + i, ok := c.resolving[key] + if ok { if int(i) >= c.visibleStart { if memoReentry[key.field()] == reentryCircular { c.markCircular(int(i)) } - return + return false } y := &c.cycleYields[len(c.cycleYields)-1] y.shadowed = append(y.shadowed, shadowedResolving{key, i}) @@ -196,13 +199,16 @@ func (c *Checker) beginResolving(key memoKey) { c.resolving = make(map[memoKey]int32) } c.resolving[key] = int32(len(c.resolutions)) + return true } -// endResolving records that the resolution at index n no longer computes its -// key. -func (c *Checker) endResolving(f *resolution, n int) { - if f.key != 0 && c.resolving[f.key] == int32(n) { +// endResolving records that the resolution no longer computes its key. A +// resolution that shadows another during a cycle yield ends before the yield +// restores the one it shadows, so it is still the one recorded. +func (c *Checker) endResolving(f *resolution) { + if f.resolving { delete(c.resolving, f.key) + f.resolving = false } } From 862698c1cdcee3e49ffa8e44e5a71c165f8d8fbf Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 28 Oct 2026 09:30:52 -0700 Subject: [PATCH 096/194] Track computations in progress in a small open-addressing table MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The keys of computations in progress are only those on the resolution stack, a few dozen at a time, yet they are inserted, removed and looked up tens of millions of times. A general map pays for hashing, group probing and assignment on every one of those operations; a tiny linear-probing table stays in cache. VS Code, default settings, n=10: │ before │ after │ │ sec/op │ sec/op vs base │ VSCode 20.30 ± 2% 19.86 ± 12% ~ (p=0.353 n=10) │ before │ after │ │ peak-RSS-bytes │ peak-RSS-bytes vs base │ VSCode 6.449Gi ± 3% 6.639Gi ± 2% +2.95% (p=0.029 n=10) │ before │ after │ │ instructions/op │ instructions/op vs base │ VSCode 379.9G ± 2% 373.4G ± 5% -1.72% (p=0.004 n=10) Mutator instructions with GC off and one checker, which are stable to about 0.1% and so show changes too small for the timings above: 261.23G -> 250.11G (-4.3%). --- tsc/internal/checker/checker.go | 11 ++-- tsc/internal/checker/memo.go | 2 +- tsc/internal/checker/resolutions.go | 98 ++++++++++++++++++++++++++--- tsc/internal/checker/types_test.go | 29 +++++++++ 4 files changed, 127 insertions(+), 13 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 5ab6cb8877070..d88b8257247a4 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -684,7 +684,7 @@ type Checker struct { restrictiveMapper *TypeMapper permissiveMapper *TypeMapper contextualBindingPatterns []*ast.Node - resolving map[memoKey]int32 // Index in resolutions of the outermost computation of each key in progress + resolving resolvingTable // Index in resolutions of the outermost computation of each key in progress typeResolutionTop int // 1-based index in resolutions of the innermost resolution, or 0 resolutionStart int // Index in resolutions below which resolutions are not searched for cycles visibleStart int // Index in resolutions below which nothing in progress is visible; see yieldCycle @@ -17035,7 +17035,7 @@ func (c *Checker) getResolvedMembersOrExportsOfSymbol(symbol *ast.Symbol, resolu // was entered, it returns the index in resolutions of the first declared, // the table the cycle canonically enters at; otherwise -1. func (c *Checker) findEarlierMembersInCycle(key memoKey, symbol *ast.Symbol) int { - i, ok := c.resolving[key] + i, ok := c.resolving.get(key) if !ok || int(i) < c.visibleStart || c.isYieldingTo(key, TypeSystemPropertyNameStructuredMembers) { return -1 } @@ -20217,7 +20217,7 @@ func (c *Checker) yieldCycle(start int) bool { // resolved, so the yield would see whatever part of them the hidden // resolution has published, rather than compute them from scratch. func (c *Checker) observeHiddenMembers(t *Type) { - if i, ok := c.resolving[memoKeyOf(t, memoStructuredMembers)]; ok && int(i) < c.visibleStart { + if i, ok := c.resolving.get(memoKeyOf(t, memoStructuredMembers)); ok && int(i) < c.visibleStart { c.markResolutionCycle(c.visibleStart) } } @@ -20298,7 +20298,7 @@ func (c *Checker) endCycleYield() { c.visibleStart = y.savedVisibleStart c.serializationLevel, c.inlineLevel, c.conditionalConstraintDepth = y.savedDepths[0], y.savedDepths[1], y.savedDepths[2] for _, sh := range y.shadowed { - c.resolving[sh.key] = sh.index + c.resolving.set(sh.key, sh.index) } c.cycleYields[len(c.cycleYields)-1] = cycleYield{} c.cycleYields = c.cycleYields[:len(c.cycleYields)-1] @@ -21104,7 +21104,8 @@ func (c *Checker) resolveModuleTableMembers(t *Type) { // is resolved again as if it had been entered first: with the // computations in progress below it hidden. hidden = true - c.beginCycleYield(t, TypeSystemPropertyNameStructuredMembers, -1, int(c.resolving[memoKeyOf(t, memoStructuredMembers)])) + floor, _ := c.resolving.get(memoKeyOf(t, memoStructuredMembers)) + c.beginCycleYield(t, TypeSystemPropertyNameStructuredMembers, -1, int(floor)) } if hidden { c.endCycleYield() diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 7712c80a969d6..93d327a119f8e 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -816,7 +816,7 @@ func (c *Checker) observeMemo(key memoKey) { } // A computation in progress may not have a memo state yet; see // resolutionState. - if state := c.peekMemoState(key); c.observeState(state) || state == nil && !c.checking && len(c.resolving) != 0 { + if state := c.peekMemoState(key); c.observeState(state) || state == nil && !c.checking && c.resolving.count != 0 { c.memoCycle(c.resolvingIndex(key)) } } diff --git a/tsc/internal/checker/resolutions.go b/tsc/internal/checker/resolutions.go index e71ec55521ae1..a777d910efadf 100644 --- a/tsc/internal/checker/resolutions.go +++ b/tsc/internal/checker/resolutions.go @@ -173,18 +173,105 @@ func (c *Checker) forgetCost() { // resolvingIndex returns 1 + the index in resolutions of the outermost // computation of key in progress, or 0. func (c *Checker) resolvingIndex(key memoKey) int { - if i, ok := c.resolving[key]; ok && int(i) >= c.visibleStart { + if i, ok := c.resolving.get(key); ok && int(i) >= c.visibleStart { return int(i) + 1 } return 0 } +// resolvingTable maps the keys of computations in progress to the index in +// resolutions of the outermost one. It only holds keys on the resolution +// stack, so it stays small, and it is looked up far more often than it +// changes. It uses open addressing with linear probing, with zero marking an +// empty slot, as no memo key is zero. +type resolvingTable struct { + slots []resolvingSlot + count int +} + +type resolvingSlot struct { + key memoKey + index int32 +} + +func (t *resolvingTable) home(key memoKey) int { + return int(uint64(key) * 0x9E3779B97F4A7C15 >> 32 & uint64(len(t.slots)-1)) +} + +func (t *resolvingTable) get(key memoKey) (int32, bool) { + if t.count == 0 { + return 0, false + } + mask := len(t.slots) - 1 + for i := t.home(key); ; i = (i + 1) & mask { + switch t.slots[i].key { + case key: + return t.slots[i].index, true + case 0: + return 0, false + } + } +} + +func (t *resolvingTable) set(key memoKey, index int32) { + if 2*(t.count+1) > len(t.slots) { + t.grow() + } + mask := len(t.slots) - 1 + for i := t.home(key); ; i = (i + 1) & mask { + switch t.slots[i].key { + case key: + t.slots[i].index = index + return + case 0: + t.slots[i] = resolvingSlot{key, index} + t.count++ + return + } + } +} + +func (t *resolvingTable) delete(key memoKey) { + if t.count == 0 { + return + } + mask := len(t.slots) - 1 + i := t.home(key) + for t.slots[i].key != key { + if t.slots[i].key == 0 { + return + } + i = (i + 1) & mask + } + // Shift later entries of the probe sequence back into the hole, so that + // lookups need no tombstones. + for j := (i + 1) & mask; t.slots[j].key != 0; j = (j + 1) & mask { + if h := t.home(t.slots[j].key); (j-h)&mask >= (j-i)&mask { + t.slots[i] = t.slots[j] + i = j + } + } + t.slots[i] = resolvingSlot{} + t.count-- +} + +func (t *resolvingTable) grow() { + old := t.slots + t.slots = make([]resolvingSlot, max(2*len(old), 64)) + t.count = 0 + for _, slot := range old { + if slot.key != 0 { + t.set(slot.key, slot.index) + } + } +} + // beginResolving records that the resolution about to be pushed computes key, // unless a computation of key is already in progress, in which case the new // one re-enters it as the policy of its kind says; see memoReentry. It reports // whether the resolution is recorded. func (c *Checker) beginResolving(key memoKey) bool { - i, ok := c.resolving[key] + i, ok := c.resolving.get(key) if ok { if int(i) >= c.visibleStart { if memoReentry[key.field()] == reentryCircular { @@ -195,10 +282,7 @@ func (c *Checker) beginResolving(key memoKey) bool { y := &c.cycleYields[len(c.cycleYields)-1] y.shadowed = append(y.shadowed, shadowedResolving{key, i}) } - if c.resolving == nil { - c.resolving = make(map[memoKey]int32) - } - c.resolving[key] = int32(len(c.resolutions)) + c.resolving.set(key, int32(len(c.resolutions))) return true } @@ -207,7 +291,7 @@ func (c *Checker) beginResolving(key memoKey) bool { // restores the one it shadows, so it is still the one recorded. func (c *Checker) endResolving(f *resolution) { if f.resolving { - delete(c.resolving, f.key) + c.resolving.delete(f.key) f.resolving = false } } diff --git a/tsc/internal/checker/types_test.go b/tsc/internal/checker/types_test.go index b5685185a8cdc..253ad432be362 100644 --- a/tsc/internal/checker/types_test.go +++ b/tsc/internal/checker/types_test.go @@ -2,6 +2,7 @@ package checker import ( "encoding/binary" + "math/rand/v2" "runtime" "slices" "strconv" @@ -752,3 +753,31 @@ func TestSignatureExtra(t *testing.T) { assert.Equal(t, sig.getResolvedTypePredicate(c), predicate) runtime.KeepAlive(c) } + +func TestResolvingTable(t *testing.T) { + t.Parallel() + var table resolvingTable + want := map[memoKey]int32{} + rng := rand.New(rand.NewPCG(1, 2)) + for i := range 200000 { + key := memoKey(rng.IntN(300)+1) << 8 + switch rng.IntN(3) { + case 0: + table.set(key, int32(i)) + want[key] = int32(i) + case 1: + table.delete(key) + delete(want, key) + } + got, ok := table.get(key) + wantIndex, wantOk := want[key] + assert.Equal(t, ok, wantOk) + assert.Equal(t, got, wantIndex) + assert.Equal(t, table.count, len(want)) + } + for key, index := range want { + got, ok := table.get(key) + assert.Assert(t, ok) + assert.Equal(t, got, index) + } +} From 8b64a2b91473a116d61f85c21f2a678829984798 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 28 Oct 2026 09:37:50 -0700 Subject: [PATCH 097/194] Observe memo cells through their own state MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A memo cell keeps its memo state in its header, so reading a cell has the state at hand. Consulting the global filter of results with work first only adds a likely cache miss to one of the most frequent memo operations. VS Code, default settings, n=10: │ before │ after │ │ sec/op │ sec/op vs base │ VSCode 19.86 ± 12% 20.67 ± 7% ~ (p=0.971 n=10) │ before │ after │ │ peak-RSS-bytes │ peak-RSS-bytes vs base │ VSCode 6.639Gi ± 2% 6.533Gi ± 2% ~ (p=0.247 n=10) │ before │ after │ │ instructions/op │ instructions/op vs base │ VSCode 373.4G ± 5% 368.1G ± 4% ~ (p=0.052 n=10) Mutator instructions with GC off and one checker, which are stable to about 0.1% and so show changes too small for the timings above: 250.11G -> 249.25G (-0.3%). --- tsc/internal/checker/memo.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 93d327a119f8e..03993ceefb786 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -800,7 +800,18 @@ func (c *Checker) linkState(state *memoState, f *memoEffects) { // //go:noinline func (c *Checker) observeCell(h *memoHeader) { - c.observeMemo(h.key()) + state := h.state + if !c.memoActive() { + // Only the work of the result is accounted for. The memo state is at + // hand, so the work filter is no help. + if state != nil { + c.observeCost(state.count) + } + return + } + if c.observeState(state) || state == nil && !c.checking && c.resolving.count != 0 { + c.memoCycle(c.resolvingIndex(h.key())) + } } //go:noinline From 573dfa31543a3c7694212fa7f01f12142f421741 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 03:57:35 -0700 Subject: [PATCH 098/194] Apply effects directly in checks outside cycles Every effect a check produces only adds to what the store collects: diagnostics are deduplicated, and reference marks, deferred nodes and emit helper flags are flags or sets. Applying one directly gives the same store whichever check reaches it first, so a check only needs to record effects while results it computes may still be discarded, which is while a cycle or a discard mark is in progress. Running every outermost computation started by a check as a query recorded the effects of all of them, and made every read of a cached result look for effects to account for. Instead, computations in a check keep their frames but apply effects as they happen, and reads account only for work. When a cycle or a discard mark begins inside one, the outermost computation becomes a query from then on, as before, so that effects of discarded results still apply only when a kept result observed them. The computations in progress then are kept, so the effects they applied earlier are right. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 3 ++ tsc/internal/checker/memo.go | 68 ++++++++++++++++++++++------- tsc/internal/checker/resolutions.go | 2 +- 3 files changed, 56 insertions(+), 17 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index d88b8257247a4..3c5eba791f0a9 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -20474,6 +20474,9 @@ func (c *Checker) markCurrentNodeCircular() { // failing, so results cached while it is in progress are discarded when it // finishes. func (c *Checker) markTypeResolutionCircular(start int) { + if c.checking && c.memoTop != 0 { + c.recordFromCheck() + } if !c.checking { c.memoCycle(int(c.resolutions[start].prevMemo)) } diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 03993ceefb786..78d085e8c802e 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -29,7 +29,9 @@ import ( // reuses a memoized result, it replays the recorded effects of that result // and everything it transitively reused, exactly as if it had computed the // result itself. Effects produced outside any memoized computation belong -// solely to the query and are discarded. +// solely to the query and are discarded. A check applies its own effects as +// they happen, except while results it computes may be discarded, when it +// records them as a query does (see recordFromCheck). type memoField uint8 @@ -481,7 +483,7 @@ func (m *memoMap[K, V]) setWithCost(c *Checker, k K, v V, count *instantiationCo // attach is memoAttach for the entry for k. func (m *memoMap[K, V]) attach(c *Checker, k K) { - if c.memoTop == 0 { + if c.memoTop == 0 || c.checking { return } if f := &c.resolutions[c.memoTop-1]; f.source == memoStateSource(m) && m.resolvingKeys[f.index] == k { @@ -527,7 +529,8 @@ func (m *memoMap[K, V]) begin(c *Checker, k K) { if c.memoPendingCount != 0 && m.memoStates != nil { c.replayPending(m.memoStates[k]) } - c.beginQueryFromCheck() + c.beginCheckedMemo(m.memoStates[k]) + return } c.beginState(m.memoStates[k], outer) } @@ -639,9 +642,7 @@ func (c *Checker) beginMemo(key memoKey) { if c.memoPendingCount != 0 { c.replayPending(state) } - c.beginQueryFromCheck() - // The outermost computation re-enters nothing. - c.beginState(state, 0) + c.beginCheckedMemo(state) return } outer := c.resolvingIndex(key) @@ -748,7 +749,7 @@ func (c *Checker) peekMemoState(key memoKey) *memoState { // memoAttach makes the result identified by key depend on the innermost // computation in progress, unless that computation is the result's own. func (c *Checker) memoAttach(key memoKey) { - if c.memoTop == 0 { + if c.memoTop == 0 || c.checking { return } if f := &c.resolutions[c.memoTop-1]; f.source == nil && f.key == key { @@ -1129,6 +1130,13 @@ func (c *Checker) withReferenceMarks(fn func()) { // belong to. func (c *Checker) withoutChecking(fn func()) { debug.Assert(c.checking && c.flushStates == nil, "withoutChecking outside a check") + if c.memoTop != 0 { + // The effects of the computations in progress are recorded from + // here on, and with them those of everything fn computes. + c.recordFromCheck() + fn() + return + } saveMemoTop := c.memoTop var states []*memoState c.checking = false @@ -1151,20 +1159,42 @@ func (c *Checker) withoutChecking(fn func()) { } } -// beginQueryFromCheck makes the memoized computation starting in a check a -// query, like withoutChecking, so that its effects are recorded with its -// result and with every result observing it. They are replayed when it -// finishes (see endQueryFromCheck), and those of results discarded with a -// cycle are applied only if a result that is kept observed them. -func (c *Checker) beginQueryFromCheck() { - debug.Assert(c.memoTop == 0 && c.flushStates == nil, "query from a check inside a query") - c.resolutions[len(c.resolutions)-1].fromCheck = true +// beginCheckedMemo is beginMemo for a computation started in a check. Its +// effects apply as they happen, and reading cached results accounts for +// nothing, as every effect only adds to what the store has collected, which +// is the same whichever check applies it first. Effects of results that a +// cycle or a discard mark may discard are the exception (see recordFromCheck), +// so a computation starting while one is in progress records them. +func (c *Checker) beginCheckedMemo(state *memoState) { + c.startEffects(state) + if c.logEffects() { + c.recordFromCheck() + } +} + +// recordFromCheck makes the outermost computation in progress in a check a +// query from here on, like withoutChecking, because a cycle or a discard mark +// begins, after which results and their effects may be discarded. Effects +// are then recorded with the results computed and with every result +// observing them, and are replayed when the outermost computation finishes +// (see endQueryFromCheck), so that those of discarded results apply only if a +// result that is kept observed them. The computations in progress applied +// their earlier effects already, which is right since they are kept: a cycle +// discards only what is computed after it is found, and a mark only what is +// computed after it is taken. +func (c *Checker) recordFromCheck() { + debug.Assert(c.checking && c.memoTop != 0 && c.flushStates == nil, "recording from a check outside a computation") + i := c.memoTop - 1 + for c.resolutions[i].prevMemo != 0 { + i = int(c.resolutions[i].prevMemo) - 1 + } + c.resolutions[i].fromCheck = true c.checking = false c.flushBuf = c.flushBuf[:0] c.flushStates = &c.flushBuf } -// endQueryFromCheck ends the query begun by beginQueryFromCheck, replaying +// endQueryFromCheck ends the query begun by recordFromCheck, replaying // the effects of everything it computed in the check. func (c *Checker) endQueryFromCheck() { states := *c.flushStates @@ -1470,6 +1500,9 @@ func (c *Checker) discardCycle(mark int, retain bool) { // is incomplete is discarded when it finishes, as for the outermost, rather // than read by the rest of the outer cycle. func (c *Checker) extendCircularity(head int) { + if c.checking && c.memoTop != 0 { + c.recordFromCheck() + } switch { case c.circularityStart == 0: c.circularityMark = len(c.discardLog) @@ -1526,6 +1559,9 @@ type discardMark struct { } func (c *Checker) markDiscard() discardMark { + if c.checking { + c.recordFromCheck() + } n := c.memoTop - 1 f := c.memoEffectsAt(n) m := discardMark{ diff --git a/tsc/internal/checker/resolutions.go b/tsc/internal/checker/resolutions.go index a777d910efadf..325301a8fa90e 100644 --- a/tsc/internal/checker/resolutions.go +++ b/tsc/internal/checker/resolutions.go @@ -29,7 +29,7 @@ type resolution struct { memo bool isQuery bool resolving bool // The resolution is the one in Checker.resolving for key - fromCheck bool // The query began in a check; see beginQueryFromCheck + fromCheck bool // The query began in a check; see recordFromCheck prevMemo int32 // Checker.memoTop on entry result *memoState // Memo state of the result computed effects *memoEffects // Allocated on first use From 27272e711fda3c53b712c40e727bb375d94637c8 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 04:10:57 -0700 Subject: [PATCH 099/194] Look up whether a member can late-merge cheaply getLateMergedSymbol runs for nearly every symbol lookup, and for most members the answer is that nothing can merge into them. Finding that out took a merged-symbol lookup of the parent and a lookup in the lateBindableKinds memo map on each call. Whether a member's parent can late-bind members depends only on syntax and on the merges finished before checking, so cache it per member in a dense symbol store and only fall back to the full lookup when the parent can late-bind. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 22 ++++++++++++++++++---- tsc/internal/checker/checker_test.go | 1 + 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 3c5eba791f0a9..02046c4957204 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -892,6 +892,9 @@ type memoStore struct { mergedSymbols symbolLinkStore[*ast.Symbol] lateMergedSymbols memoMap[*ast.Symbol, *ast.Symbol] lateBindableKinds memoMap[*ast.Symbol, uint8] + // lateBindableKinds of the parent of a member, with lateBindableKnown + // set once known; see getLateMergedSymbol. + parentLateBindableKinds symbolLinkStore[uint8] // mergesFrozen is set once global merging is done; mergedSymbols is // immutable from then on. mergesFrozen bool @@ -15230,12 +15233,21 @@ func (c *Checker) getLateMergedSymbol(symbol *ast.Symbol) *ast.Symbol { if !c.mergesFrozen || symbol.Parent() == nil { return symbol } - parent := c.getMergedSymbol(symbol.Parent()) late := symbol.CheckFlags()&ast.CheckFlagsLate != 0 - lateBindable := c.getLateBindableKinds(parent) - if !late && lateBindable == 0 { - return symbol + var lateBindable uint8 + if !late { + // Most members cannot merge, which depends only on syntax and on + // the merges done before checking, so it is looked up cheaply. + known := c.parentLateBindableKinds.Get(symbol) + if *known == 0 { + *known = c.getLateBindableKinds(c.getMergedSymbol(symbol.Parent())) | lateBindableKnown + } + lateBindable = *known &^ lateBindableKnown + if lateBindable == 0 { + return symbol + } } + parent := c.getMergedSymbol(symbol.Parent()) var kind MembersOrExportsResolutionKind switch symbol { case parent.Members().Get(symbol.Name()): @@ -15260,6 +15272,8 @@ func (c *Checker) getLateMergedSymbol(symbol *ast.Symbol) *ast.Symbol { return symbol } +const lateBindableKnown uint8 = 1 << 7 + // getLateBindableKinds reports, judging from syntax alone, which of the // members and exports of symbol could late-bind any when resolved, as a set // of 1< Date: Fri, 30 Oct 2026 04:11:59 -0700 Subject: [PATCH 100/194] Cache counting hashes in dense stores Counting instantiations hashes every instantiated type and its mapper, and the hash caches were maps keyed by pointer, which made the lookups a visible part of checking time. Key type hashes by type ID in a paged store, falling back to a map for types from another store, and symbol hashes in a dense symbol store. Mapper hashes go in a small direct-mapped cache, since a mapper is usually reused right away and a miss only recomputes its hash from the cached type hashes. Also check the type hash cache before hashing the type's symbol, which only the uncached path needs. The hashes themselves are unchanged. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 7 ++-- tsc/internal/checker/typehash.go | 70 ++++++++++++++++++++------------ 2 files changed, 49 insertions(+), 28 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 02046c4957204..518214f68177f 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -633,9 +633,10 @@ type Checker struct { compareSymbolChains func([]*ast.Symbol, []*ast.Symbol) int resolutionSerials uint32 resolutions []resolution - symbolHashes map[*ast.Symbol]uint64 - typeHashes map[*Type]*[typeHashDepth]uint64 - mapperHashes map[*TypeMapper]uint64 + symbolHashes symbolLinkStore[uint64] + typeHashes core.PagedLinkStore[[typeHashDepth]uint64] + foreignTypeHashes map[*Type]*[typeHashDepth]uint64 + mapperHashes *[mapperHashCacheSize]mapperHashCacheEntry fileHashes map[*ast.SourceFile]uint64 instantiationStack []*Type conditionalConstraintDepth depthLimit diff --git a/tsc/internal/checker/typehash.go b/tsc/internal/checker/typehash.go index 6e4e08a449272..56bbfcf0990e3 100644 --- a/tsc/internal/checker/typehash.go +++ b/tsc/internal/checker/typehash.go @@ -2,6 +2,7 @@ package checker import ( "math" + "unsafe" "github.com/microsoft/TypeScript/tsc/internal/ast" "github.com/microsoft/TypeScript/tsc/internal/jsnum" @@ -45,14 +46,17 @@ func (c *Checker) typeHashAt(t *Type, depth int) uint64 { if t == nil { return 0 } + var entry *[typeHashDepth]uint64 + if depth != 0 { + entry = c.typeHashEntry(t) + if entry[depth-1] != 0 { + return entry[depth-1] + } + } h := hashCombine(hashCombine(uint64(t.kind), uint64(t.flags)), c.symbolHash(t.symbol)) if depth == 0 { return h } - entry := c.typeHashes[t] - if entry != nil && entry[depth-1] != 0 { - return entry[depth-1] - } h = hashCombine(h, c.typeHashWorker(t, depth-1)) if t.alias != nil { h = hashCombine(h, c.symbolHash(t.alias.symbol)) @@ -60,18 +64,25 @@ func (c *Checker) typeHashAt(t *Type, depth int) uint64 { } // Zero marks an absent entry. h |= 1 + entry[depth-1] = h + return h +} + +// typeHashEntry returns the cached hashes of t. Types created by this +// checker's store are keyed by their dense IDs. +func (c *Checker) typeHashEntry(t *Type) *[typeHashDepth]uint64 { + if t.checker == c.root { + return c.typeHashes.Get(uint64(t.id)) + } + entry := c.foreignTypeHashes[t] if entry == nil { - // The worker may have added an entry for t at another depth. - if entry = c.typeHashes[t]; entry == nil { - entry = new([typeHashDepth]uint64) - if c.typeHashes == nil { - c.typeHashes = make(map[*Type]*[typeHashDepth]uint64) - } - c.typeHashes[t] = entry + entry = new([typeHashDepth]uint64) + if c.foreignTypeHashes == nil { + c.foreignTypeHashes = make(map[*Type]*[typeHashDepth]uint64) } + c.foreignTypeHashes[t] = entry } - entry[depth-1] = h - return h + return entry } func (c *Checker) hashTypes(h uint64, types []*Type, depth int) uint64 { @@ -238,8 +249,9 @@ func (c *Checker) symbolHash(s *ast.Symbol) uint64 { if s == nil { return 0 } - if h, ok := c.symbolHashes[s]; ok { - return h + cached := c.symbolHashes.Get(s) + if *cached != 0 { + return *cached } h := hashCombine(xxh3.HashString(s.Name()), uint64(s.Flags())) if decls := s.Declarations(); len(decls) != 0 { @@ -247,27 +259,35 @@ func (c *Checker) symbolHash(s *ast.Symbol) uint64 { } else if s.Parent() != nil { h = hashCombine(h, c.symbolHash(s.Parent())) } - if c.symbolHashes == nil { - c.symbolHashes = make(map[*ast.Symbol]uint64) - } - c.symbolHashes[s] = h + // Zero marks an absent entry; a zero hash is merely recomputed. + *c.symbolHashes.Get(s) = h return h } func (c *Checker) mapperHash(m *TypeMapper) uint64 { // Mappers are immutable, and one mapper is typically used for many // instantiations, so its hash is computed once. - if h, ok := c.mapperHashes[m]; ok { - return h - } - h := c.mapperHashAt(m, typeHashDepth) + // A small direct-mapped cache suffices; a miss only recomputes the hash. if c.mapperHashes == nil { - c.mapperHashes = make(map[*TypeMapper]uint64) + c.mapperHashes = new([mapperHashCacheSize]mapperHashCacheEntry) } - c.mapperHashes[m] = h + p := uintptr(unsafe.Pointer(m)) + e := &c.mapperHashes[(p^p>>12)>>4&(mapperHashCacheSize-1)] + if e.mapper == m { + return e.hash + } + h := c.mapperHashAt(m, typeHashDepth) + *e = mapperHashCacheEntry{m, h} return h } +const mapperHashCacheSize = 1 << 12 + +type mapperHashCacheEntry struct { + mapper *TypeMapper + hash uint64 +} + // mapperHashAt returns the structural hash of m, looking depth levels into // the types it maps. func (c *Checker) mapperHashAt(m *TypeMapper, depth int) uint64 { From 7802e1b5c47325df884e2bda209559fad9b12ec3 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 04:26:33 -0700 Subject: [PATCH 101/194] Look up a memo map entry's state once on entry Entering the computation of a memo map entry looked up the entry's memo state in the side map up to three times. Look it up once, again only after marking a cycle, which can give the entry a state, and skip scanning the keys in progress when there are none. PERF-PLACEHOLDER --- tsc/internal/checker/memo.go | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 78d085e8c802e..407a4abb7fe72 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -512,27 +512,34 @@ func (m *memoMap[K, V]) compute(c *Checker, k K, fn func() V) V { // enter starts the computation of the result for k; see beginMemo. func (m *memoMap[K, V]) begin(c *Checker, k K) { - if c.inResolution() { + var state *memoState + if m.memoStates != nil { + state = m.memoStates[k] + } + if state != nil && c.inResolution() { // Entering a computed result reads it. - if state := m.memoStates[k]; state != nil { - c.observeCost(state.count) - } + c.observeCost(state.count) + } + outer := 0 + if len(m.resolvingKeys) != 0 { + outer = m.resolvingIndex(c, k) } - outer := m.resolvingIndex(c, k) if outer != 0 { // Re-entering an entry marks the cycle circular; see reentryCircular. c.markCircular(outer - 1) + // Marking may have given the entry a state. + state = m.memoStates[k] } m.resolvingKeys = append(m.resolvingKeys, k) c.beginResolution(m, len(m.resolvingKeys)-1) if c.checking { - if c.memoPendingCount != 0 && m.memoStates != nil { - c.replayPending(m.memoStates[k]) + if c.memoPendingCount != 0 && state != nil { + c.replayPending(state) } - c.beginCheckedMemo(m.memoStates[k]) + c.beginCheckedMemo(state) return } - c.beginState(m.memoStates[k], outer) + c.beginState(state, outer) } // resolvingIndex returns 1 + the index in resolutions of the computation of From 5f53bb8e35c0c5198fd4922c89f1248070b56881 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 04:26:33 -0700 Subject: [PATCH 102/194] Compute a comparison's relation key once A comparison computed the relation key of its source and target in isTypeRelatedTo, again in checkTypeRelatedToEx to begin the comparison's own computation, and again in recursiveTypeRelatedTo for the outermost pair. Hashing the key is not cheap, so pass the key down, and remember the outermost pair's key in the Relater. PERF-PLACEHOLDER --- tsc/internal/checker/relater.go | 37 ++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/tsc/internal/checker/relater.go b/tsc/internal/checker/relater.go index 888a0e8e4b54f..887e04fe5e021 100644 --- a/tsc/internal/checker/relater.go +++ b/tsc/internal/checker/relater.go @@ -193,13 +193,14 @@ func (c *Checker) isTypeRelatedTo(source *Type, target *Type, relation *Relation } } if source.flags&TypeFlagsObject != 0 && target.flags&TypeFlagsObject != 0 { - id, _ := c.getRelationKey(source, target, IntersectionStateNone, relation == c.identityRelation, false) + id, constrained := c.getRelationKey(source, target, IntersectionStateNone, relation == c.identityRelation, false) // An overflow is reported by each comparison that reaches it, so it // is left to checkTypeRelatedTo. related := relation.get(c, id) if related != RelationComparisonResultNone && related&RelationComparisonResultOverflow == 0 { return related&RelationComparisonResultSucceeded != 0 } + return c.checkTypeRelatedToWithKey(source, target, relation, nil /*errorNode*/, nil, nil, id, constrained) } if source.flags&TypeFlagsStructuredOrInstantiable != 0 || target.flags&TypeFlagsStructuredOrInstantiable != 0 { return c.checkTypeRelatedTo(source, target, relation, nil /*errorNode*/) @@ -376,6 +377,22 @@ func (c *Checker) checkTypeRelatedToEx( errorNode *ast.Node, headMessage *diagnostics.Message, diagnosticOutput *[]*ast.Diagnostic, +) bool { + id, constrained := c.getRelationKey(source, target, IntersectionStateNone, relation == c.identityRelation, false /*ignoreConstraints*/) + return c.checkTypeRelatedToWithKey(source, target, relation, errorNode, headMessage, diagnosticOutput, id, constrained) +} + +// checkTypeRelatedToWithKey is checkTypeRelatedToEx given the relation key +// of source and target, as returned by getRelationKey. +func (c *Checker) checkTypeRelatedToWithKey( + source *Type, + target *Type, + relation *Relation, + errorNode *ast.Node, + headMessage *diagnostics.Message, + diagnosticOutput *[]*ast.Diagnostic, + id CacheHashKey, + constrained bool, ) bool { r := c.getRelater() r.relation = relation @@ -386,7 +403,7 @@ func (c *Checker) checkTypeRelatedToEx( // The comparison is a computation of its own, so that reusing any result it // caches accounts for the effects of the whole comparison. Errors are // reported after it, since they belong to the caller rather than the result. - id, _ := c.getRelationKey(source, target, IntersectionStateNone, relation == c.identityRelation, false /*ignoreConstraints*/) + r.topSource, r.topTarget, r.topKey, r.topConstrained = source, target, id, constrained var result Ternary if relation.get(c, id)&RelationComparisonResultOverflow != 0 { // The comparison overflowed before, and would again. @@ -2897,8 +2914,12 @@ type Relater struct { // them by key. maybeKeys []maybeKey maybeKeysSet map[CacheHashKey]int - sourceStack []*Type - targetStack []*Type + // The outermost comparison and its relation key. + topSource, topTarget *Type + topKey CacheHashKey + topConstrained bool + sourceStack []*Type + targetStack []*Type // sourceDepths and targetDepths are the depths of the comparisons that // pushed each entry of sourceStack and targetStack. sourceDepths []int @@ -3453,7 +3474,13 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError // important to have well-defined behavior even in cases that shouldn't normally occur. return TernaryFalse } - id, constrained := r.c.getRelationKey(source, target, intersectionState, r.relation == r.c.identityRelation, false /*ignoreConstraints*/) + var id CacheHashKey + var constrained bool + if source == r.topSource && target == r.topTarget && intersectionState == IntersectionStateNone { + id, constrained = r.topKey, r.topConstrained + } else { + id, constrained = r.c.getRelationKey(source, target, intersectionState, r.relation == r.c.identityRelation, false /*ignoreConstraints*/) + } if entry := r.relation.get(r.c, id); entry != RelationComparisonResultNone { if entry&RelationComparisonResultOverflow != 0 { // Computing the comparison overflowed, so computing this one, From a6c20c4f1a1bff077e1e5932d713c9d3354b4f7e Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 04:26:33 -0700 Subject: [PATCH 103/194] Keep pre-checking merges in a dense symbol store getMergedSymbol is among the most called functions in the checker, and every call looked the symbol up in a map keyed by pointer. The merges done before checking never change afterwards, so keep them in a paged store indexed by symbol ID like other symbol links; looking up a symbol that merged into nothing does not allocate. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 518214f68177f..fb127f440e5b8 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -2397,8 +2397,8 @@ func (c *Checker) getSymbol(symbols ast.SymbolTable, name string, meaning ast.Sy // skip it when those could not make the symbol match. Resolving the // late-bound members here would otherwise be circular when looking up // a name inside one of their computed property names. - if merged := c.mergedSymbols.TryGet(symbol); merged != nil && *merged != nil { - symbol = *merged + if merged := c.mergedSymbolOf(symbol); merged != nil { + symbol = merged } if symbol.Flags()&(meaning|ast.SymbolFlagsAlias) == 0 && meaning&(ast.SymbolFlagsClassMember|ast.SymbolFlagsAssignment) == 0 { return nil @@ -14961,8 +14961,8 @@ func (c *Checker) combineSymbolTables(first ast.SymbolTable, second ast.SymbolTa // looked up without resolving the table, whose resolution is this one. combined := ast.NewSymbolTableWithCapacity(first.Len() + second.Len()) for id, symbol := range first.All() { - if merged := c.mergedSymbols.TryGet(symbol); merged != nil && *merged != nil { - symbol = *merged + if merged := c.mergedSymbolOf(symbol); merged != nil { + symbol = merged } if merged, _ := c.lateMergedSymbols.get(c, symbol); merged != nil { symbol = merged @@ -15217,8 +15217,8 @@ func (c *Checker) getMergedSymbol(symbol *ast.Symbol) *ast.Symbol { if symbol == nil { return nil } - if merged := c.mergedSymbols.TryGet(symbol); merged != nil && *merged != nil { - symbol = *merged + if merged := c.mergedSymbolOf(symbol); merged != nil { + symbol = merged } if symbol.Flags()&(ast.SymbolFlagsClassMember|ast.SymbolFlagsSignature) != 0 { return c.getLateMergedSymbol(symbol) @@ -15324,6 +15324,15 @@ func (c *Checker) recordMergedSymbol(target *ast.Symbol, source *ast.Symbol) { *c.mergedSymbols.Get(source) = target } +// mergedSymbolOf returns the symbol that symbol merged into before checking, +// or nil. +func (c *Checker) mergedSymbolOf(symbol *ast.Symbol) *ast.Symbol { + if merged := c.mergedSymbols.TryGet(symbol); merged != nil { + return *merged + } + return nil +} + func (c *Checker) getResolvedTarget(symbol *ast.Symbol) *ast.Symbol { return c.getMergedSymbol(c.resolveSymbol(c.getMergedSymbol(symbol))) } From 9679b259e2c87dc53e772f9f0adc0b63493800a7 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 04:34:13 -0700 Subject: [PATCH 104/194] Filter the relation keys that have memo states Reading a cached comparison result looks up its memo state as well as the result. Only about one in ten comparisons gets a memo state, but a map lookup that misses costs about as much as one that hits. Relation keys are already hashes, so give memo maps an optional function returning a key's bits, and keep a bit filter of the keys that have a memo state. The relation maps use it to skip looking up states that cannot exist. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 3 +++ tsc/internal/checker/memo.go | 40 ++++++++++++++++++++++++++------- tsc/internal/checker/relater.go | 5 +++++ 3 files changed, 40 insertions(+), 8 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index fb127f440e5b8..cece3ff7c58f2 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -1156,6 +1156,9 @@ func NewChecker(program Program, tracer *Tracer) (*Checker, *sync.Mutex) { c.assignableRelation = &Relation{} c.comparableRelation = &Relation{} c.identityRelation = &Relation{} + for _, r := range []*Relation{c.subtypeRelation, c.strictSubtypeRelation, c.assignableRelation, c.comparableRelation, c.identityRelation} { + r.results.keyBits = relationKeyBits + } c.initializeChecker() c.mergesFrozen = true c.checking = false diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 407a4abb7fe72..b08f09333d6ab 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -366,6 +366,26 @@ type memoMap[K comparable, V any] struct { memoEntries map[K]V memoStates map[K]*memoState resolvingKeys []K // Keys of computations in progress without a memo state yet + // If set, keyBits returns well-mixed bits of a key, with which stateKeys + // filters the keys that may have a memo state, since few do and looking + // up one that does not costs as much as one that does. + keyBits func(K) uint64 + stateKeys []uint64 +} + +const memoMapStateFilterBits = 20 + +// stateOf returns the memo state of the entry for k, or nil. +func (m *memoMap[K, V]) stateOf(k K) *memoState { + if m.memoStates == nil { + return nil + } + if m.keyBits != nil { + if i := m.keyBits(k) >> (64 - memoMapStateFilterBits); m.stateKeys[i/64]&(1<<(i%64)) == 0 { + return nil + } + } + return m.memoStates[k] } // get returns the cached result for k, accounting for the effects of @@ -391,7 +411,7 @@ func (m *memoMap[K, V]) peek(k K) (V, bool) { func (m *memoMap[K, V]) observe(c *Checker, k K) { // A computation in progress may not have a memo state yet; see // resolutionState. - if state := m.memoStates[k]; c.observeState(state) || state == nil && !c.checking { + if state := m.stateOf(k); c.observeState(state) || state == nil && !c.checking { c.memoCycle(m.resolvingIndex(c, k)) } } @@ -450,7 +470,7 @@ func (m *memoMap[K, V]) setReported(c *Checker, k K, v V, r currentNodeErrors) { r.list = nil } m.setIdentity(c, k, v) - if r.list != nil || c.memoErrorStates != 0 && m.memoStates[k] != nil { + if r.list != nil || c.memoErrorStates != 0 && m.stateOf(k) != nil { m.state(k).setErrors(c, r.list) } } @@ -512,10 +532,7 @@ func (m *memoMap[K, V]) compute(c *Checker, k K, fn func() V) V { // enter starts the computation of the result for k; see beginMemo. func (m *memoMap[K, V]) begin(c *Checker, k K) { - var state *memoState - if m.memoStates != nil { - state = m.memoStates[k] - } + state := m.stateOf(k) if state != nil && c.inResolution() { // Entering a computed result reads it. c.observeCost(state.count) @@ -528,7 +545,7 @@ func (m *memoMap[K, V]) begin(c *Checker, k K) { // Re-entering an entry marks the cycle circular; see reentryCircular. c.markCircular(outer - 1) // Marking may have given the entry a state. - state = m.memoStates[k] + state = m.stateOf(k) } m.resolvingKeys = append(m.resolvingKeys, k) c.beginResolution(m, len(m.resolvingKeys)-1) @@ -584,13 +601,20 @@ func (m *memoMap[K, V]) popState(i int) { } func (m *memoMap[K, V]) state(k K) *memoState { - state := m.memoStates[k] + state := m.stateOf(k) if state == nil { if m.memoStates == nil { m.memoStates = make(map[K]*memoState) + if m.keyBits != nil { + m.stateKeys = make([]uint64, 1<> (64 - memoMapStateFilterBits) + m.stateKeys[i/64] |= 1 << (i % 64) + } } return state } diff --git a/tsc/internal/checker/relater.go b/tsc/internal/checker/relater.go index 887e04fe5e021..f335f3568e30c 100644 --- a/tsc/internal/checker/relater.go +++ b/tsc/internal/checker/relater.go @@ -102,6 +102,11 @@ func asRecursionId[T *ast.Node | *ast.Symbol | *Type](value T) RecursionId { // a relation before it is considered too complex. const relationCountLimit = 16_000_000 / 8 +// relationKeyBits returns well-mixed bits of a relation key, which is a hash. +func relationKeyBits(k CacheHashKey) uint64 { + return k.Lo +} + type Relation struct { results memoMap[CacheHashKey, RelationComparisonResult] } From ea216b90168492271071be49308d6e02364b5af6 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 05:14:33 -0700 Subject: [PATCH 105/194] Keep the observing test to one comparison Reading a cached result first asks whether the read must be observed. That test read the checking flag, two store counts, and the current resolution's start on every read, which kept memo.get and other hot readers from inlining. The answer only changes when one of those inputs does, so keep it as a single floor on the instantiation stack length, recomputed wherever an input changes. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 3 +++ tsc/internal/checker/memo.go | 30 ++++++++++++++++++++++++++++- tsc/internal/checker/resolutions.go | 3 +++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index cece3ff7c58f2..d2027935db077 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -798,6 +798,7 @@ type Checker struct { typeToStringNodebuilder *NodeBuilder tracer *Tracer // Optional tracer for trace events and type recording (for --generateTrace) checking bool // Whether side effects such as diagnostics are applied; see memo.go + observeFloor int // Length of instantiationStack above which observing holds; see syncObserveFloor memoTop int // 1 + index in resolutions of the innermost computation recording effects, or 0; see memo.go } @@ -1162,6 +1163,7 @@ func NewChecker(program Program, tracer *Tracer) (*Checker, *sync.Mutex) { c.initializeChecker() c.mergesFrozen = true c.checking = false + c.syncObserveFloor() return c, &c.mu } @@ -20562,6 +20564,7 @@ func (c *Checker) popTypeResolution() bool { c.typeResolutionTop = int(f.prevTypeResolution) c.resolutions[n] = resolution{} c.resolutions = c.resolutions[:n] + c.syncObserveFloor() if c.circularityStart > n { c.endCircularity() } else if len(c.innerCycles) != 0 { diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index b08f09333d6ab..3979b96a0a4ec 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -652,7 +652,20 @@ func (c *Checker) memoActive() bool { // observing reports whether reading a cached result must account for its // effects or its instantiation count. func (c *Checker) observing() bool { - return c.memoActive() || c.inResolution() + return len(c.instantiationStack) > c.observeFloor +} + +// syncObserveFloor updates observeFloor after a change to what observing +// depends on: the checking flag, the counts read by memoActive, or the +// resolution stack. The counts are shared with other checkers using the same +// store, but those only run while this one is not checking, and it syncs on +// starting to check. +func (c *Checker) syncObserveFloor() { + if c.memoActive() { + c.observeFloor = -1 + } else { + c.observeFloor = int(c.currentResolution().start) + } } // beginMemo is called on entry to a memoized function whose result for this @@ -819,6 +832,7 @@ func (c *Checker) linkState(state *memoState, f *memoEffects) { if state.pending == nil { state.pending = &memoEffects{} c.memoPendingCount++ + c.syncObserveFloor() if c.flushStates != nil { *c.flushStates = append(*c.flushStates, state) } @@ -942,8 +956,10 @@ func (s *memoState) setErrors(c *Checker, reports []*currentNodeError) { switch { case s.errors == nil && reports != nil: c.memoErrorStates++ + c.syncObserveFloor() case s.errors != nil && reports == nil: c.memoErrorStates-- + c.syncObserveFloor() } s.errors = reports } @@ -963,6 +979,7 @@ func (c *Checker) replayPending(state *memoState) { f := state.pending state.pending = nil c.memoPendingCount-- + c.syncObserveFloor() c.replayMemo(f) } } @@ -1044,6 +1061,7 @@ func (c *Checker) retainEffects(state *memoState, f *memoEffects) { f.addDep(state.pending) } else { c.memoPendingCount++ + c.syncObserveFloor() if c.flushStates != nil { *c.flushStates = append(*c.flushStates, state) } @@ -1171,11 +1189,13 @@ func (c *Checker) withoutChecking(fn func()) { saveMemoTop := c.memoTop var states []*memoState c.checking = false + c.syncObserveFloor() c.memoTop = 0 c.flushStates = &states fn() c.flushStates = nil c.checking = true + c.syncObserveFloor() c.memoTop = saveMemoTop // Replaying is in order of computation, so effects apply in the order // they would have in the check. They also happened at the current node, @@ -1185,6 +1205,7 @@ func (c *Checker) withoutChecking(fn func()) { f := state.pending state.pending = nil c.memoPendingCount-- + c.syncObserveFloor() c.replayEffects(f, c.currentNode, true) } } @@ -1221,6 +1242,7 @@ func (c *Checker) recordFromCheck() { } c.resolutions[i].fromCheck = true c.checking = false + c.syncObserveFloor() c.flushBuf = c.flushBuf[:0] c.flushStates = &c.flushBuf } @@ -1231,12 +1253,14 @@ func (c *Checker) endQueryFromCheck() { states := *c.flushStates c.flushStates = nil c.checking = true + c.syncObserveFloor() defer clear(states) for _, state := range states { if state.pending != nil { f := state.pending state.pending = nil c.memoPendingCount-- + c.syncObserveFloor() c.replayEffects(f, c.currentNode, true) } } @@ -1249,8 +1273,10 @@ func (c *Checker) withChecking(fn func()) { debug.Assert(c.memoTop == 0, "memo resolution leaked") saveChecking := c.checking c.checking = true + c.syncObserveFloor() fn() c.checking = saveChecking + c.syncObserveFloor() } // memoCycle is called when a computation observes another computation that is @@ -1654,8 +1680,10 @@ func (c *Checker) logPendingDiscard(state *memoState) { switch { case old == nil && state.pending != nil: c.memoPendingCount-- + c.syncObserveFloor() case old != nil && state.pending == nil: c.memoPendingCount++ + c.syncObserveFloor() } state.pending = old if old != nil && len(old.deps) > n { diff --git a/tsc/internal/checker/resolutions.go b/tsc/internal/checker/resolutions.go index 325301a8fa90e..c6684f11c80c2 100644 --- a/tsc/internal/checker/resolutions.go +++ b/tsc/internal/checker/resolutions.go @@ -56,6 +56,7 @@ type memoStateSource interface { func (c *Checker) initResolutions() { c.resolutions = []resolution{{}} + c.syncObserveFloor() } func (c *Checker) currentResolution() *resolution { @@ -85,6 +86,7 @@ func (c *Checker) appendResolution(key memoKey, source memoStateSource, index in depthStart: depthBase, serial: c.resolutionSerials, }) + c.syncObserveFloor() } // endResolution finishes the current resolution, returning its instantiation @@ -105,6 +107,7 @@ func (c *Checker) endResolution() *instantiationCount { } c.resolutions[n] = resolution{} c.resolutions = c.resolutions[:n] + c.syncObserveFloor() if c.circularityStart > n { c.endCircularity() } else if len(c.innerCycles) != 0 { From 4431cf1a7dafeb0290f64f7403ae7ccd8693a195 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 05:23:44 -0700 Subject: [PATCH 106/194] Read a comparison's own cached result once A comparison reads the result cached for its pair before starting, and read it again on starting and once more on first visiting its own pair, all before anything could cache one. Pass the result read first along, and use it for the first visit. PERF-PLACEHOLDER --- tsc/internal/checker/relater.go | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/tsc/internal/checker/relater.go b/tsc/internal/checker/relater.go index f335f3568e30c..378eb8fc838a4 100644 --- a/tsc/internal/checker/relater.go +++ b/tsc/internal/checker/relater.go @@ -205,7 +205,7 @@ func (c *Checker) isTypeRelatedTo(source *Type, target *Type, relation *Relation if related != RelationComparisonResultNone && related&RelationComparisonResultOverflow == 0 { return related&RelationComparisonResultSucceeded != 0 } - return c.checkTypeRelatedToWithKey(source, target, relation, nil /*errorNode*/, nil, nil, id, constrained) + return c.checkTypeRelatedToWithKey(source, target, relation, nil /*errorNode*/, nil, nil, id, constrained, related) } if source.flags&TypeFlagsStructuredOrInstantiable != 0 || target.flags&TypeFlagsStructuredOrInstantiable != 0 { return c.checkTypeRelatedTo(source, target, relation, nil /*errorNode*/) @@ -384,11 +384,12 @@ func (c *Checker) checkTypeRelatedToEx( diagnosticOutput *[]*ast.Diagnostic, ) bool { id, constrained := c.getRelationKey(source, target, IntersectionStateNone, relation == c.identityRelation, false /*ignoreConstraints*/) - return c.checkTypeRelatedToWithKey(source, target, relation, errorNode, headMessage, diagnosticOutput, id, constrained) + return c.checkTypeRelatedToWithKey(source, target, relation, errorNode, headMessage, diagnosticOutput, id, constrained, relation.get(c, id)) } // checkTypeRelatedToWithKey is checkTypeRelatedToEx given the relation key -// of source and target, as returned by getRelationKey. +// of source and target, as returned by getRelationKey, and the result cached +// under it. func (c *Checker) checkTypeRelatedToWithKey( source *Type, target *Type, @@ -398,6 +399,7 @@ func (c *Checker) checkTypeRelatedToWithKey( diagnosticOutput *[]*ast.Diagnostic, id CacheHashKey, constrained bool, + entry RelationComparisonResult, ) bool { r := c.getRelater() r.relation = relation @@ -409,8 +411,9 @@ func (c *Checker) checkTypeRelatedToWithKey( // caches accounts for the effects of the whole comparison. Errors are // reported after it, since they belong to the caller rather than the result. r.topSource, r.topTarget, r.topKey, r.topConstrained = source, target, id, constrained + r.topEntry, r.topEntryValid = entry, true var result Ternary - if relation.get(c, id)&RelationComparisonResultOverflow != 0 { + if entry&RelationComparisonResultOverflow != 0 { // The comparison overflowed before, and would again. r.overflow = true } else { @@ -2923,6 +2926,8 @@ type Relater struct { topSource, topTarget *Type topKey CacheHashKey topConstrained bool + topEntry RelationComparisonResult // The result cached for topKey when the comparison began + topEntryValid bool // Whether topEntry is unused, and so still the cached result sourceStack []*Type targetStack []*Type // sourceDepths and targetDepths are the depths of the comparisons that @@ -3481,12 +3486,22 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError } var id CacheHashKey var constrained bool + var entry RelationComparisonResult if source == r.topSource && target == r.topTarget && intersectionState == IntersectionStateNone { id, constrained = r.topKey, r.topConstrained + // The comparison read the cached result on starting, and nothing + // caches one for it before its first visit to its own pair. + if r.topEntryValid { + r.topEntryValid = false + entry = r.topEntry + } else { + entry = r.relation.get(r.c, id) + } } else { id, constrained = r.c.getRelationKey(source, target, intersectionState, r.relation == r.c.identityRelation, false /*ignoreConstraints*/) + entry = r.relation.get(r.c, id) } - if entry := r.relation.get(r.c, id); entry != RelationComparisonResultNone { + if entry != RelationComparisonResultNone { if entry&RelationComparisonResultOverflow != 0 { // Computing the comparison overflowed, so computing this one, // which needs it, overflows too. From 792765c4bc926f3c36dd19cbf4346ad1be1a1afd Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 05:31:33 -0700 Subject: [PATCH 107/194] Push resolutions in place Pushing a resolution built the whole record and copied it onto the stack, once per computation and once per checked node. Popping already zeroes the record, so extend the stack over the zeroed space and set only the fields needed. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 24 ++++++++++++------------ tsc/internal/checker/resolutions.go | 29 +++++++++++++++++++++-------- 2 files changed, 33 insertions(+), 20 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index d2027935db077..b01c248078cec 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -20580,18 +20580,18 @@ func (c *Checker) popTypeResolution() bool { // re-entering detects as a cycle. Its resolution shares the work of the // resolution below it. func (c *Checker) beginTypeResolution(target TypeSystemEntity, propertyName TypeSystemPropertyName) { - parent := c.currentResolution() - f := resolution{ - count: parent.count, - start: parent.start, - depthStart: parent.depthStart, - serial: parent.serial, - prevMemo: int32(c.memoTop), - isTypeResolution: true, - prevTypeResolution: int32(c.typeResolutionTop), - typeResolution: TypeResolution{target: target, propertyName: propertyName, result: true}, - } - c.resolutions = append(c.resolutions, f) + f := c.pushResolution() + parent := &c.resolutions[len(c.resolutions)-2] + f.count = parent.count + f.start = parent.start + f.depthStart = parent.depthStart + f.serial = parent.serial + f.prevMemo = int32(c.memoTop) + f.isTypeResolution = true + f.prevTypeResolution = int32(c.typeResolutionTop) + f.typeResolution.target = target + f.typeResolution.propertyName = propertyName + f.typeResolution.result = true c.typeResolutionTop = len(c.resolutions) } diff --git a/tsc/internal/checker/resolutions.go b/tsc/internal/checker/resolutions.go index c6684f11c80c2..e5db582677eca 100644 --- a/tsc/internal/checker/resolutions.go +++ b/tsc/internal/checker/resolutions.go @@ -59,6 +59,20 @@ func (c *Checker) initResolutions() { c.syncObserveFloor() } +// pushResolution pushes a resolution with every field zero and returns it. +// Popping a resolution zeroes it, so space reused above the stack needs no +// zeroing, and the caller sets only the fields it needs in place rather than +// copying in a whole resolution. +func (c *Checker) pushResolution() *resolution { + n := len(c.resolutions) + if n == cap(c.resolutions) { + c.resolutions = append(c.resolutions, resolution{}) + } else { + c.resolutions = c.resolutions[:n+1] + } + return &c.resolutions[n] +} + func (c *Checker) currentResolution() *resolution { return &c.resolutions[len(c.resolutions)-1] } @@ -78,14 +92,13 @@ func (c *Checker) beginNodeResolution() { func (c *Checker) appendResolution(key memoKey, source memoStateSource, index int, depthBase int32) { c.resolutionSerials++ - c.resolutions = append(c.resolutions, resolution{ - key: key, - source: source, - index: int32(index), - start: int32(len(c.instantiationStack)), - depthStart: depthBase, - serial: c.resolutionSerials, - }) + f := c.pushResolution() + f.key = key + f.source = source + f.index = int32(index) + f.start = int32(len(c.instantiationStack)) + f.depthStart = depthBase + f.serial = c.resolutionSerials c.syncObserveFloor() } From 9ea071f9d4a4f478ab70164e59aa2ad728998e08 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 06:08:31 -0700 Subject: [PATCH 108/194] Keep a memo map's rarely used parts in a side table A memo map held its entries, its memo states, the keys of computations in progress, and the key filter inline: 72 bytes where the map it replaced took 8. Memo maps are embedded in every object type for its instantiations and in several links, and most never have anything but entries, so the extra bytes were most of the growth of object types. Move everything but the entries into a side table allocated on first use, so a memo map takes 16 bytes. Reading an entry checks the one pointer. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 2 +- tsc/internal/checker/memo.go | 89 +++++++++++++++++++++++---------- 2 files changed, 64 insertions(+), 27 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index b01c248078cec..b4bfc2903e41e 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -1158,7 +1158,7 @@ func NewChecker(program Program, tracer *Tracer) (*Checker, *sync.Mutex) { c.comparableRelation = &Relation{} c.identityRelation = &Relation{} for _, r := range []*Relation{c.subtypeRelation, c.strictSubtypeRelation, c.assignableRelation, c.comparableRelation, c.identityRelation} { - r.results.keyBits = relationKeyBits + r.results.setKeyBits(relationKeyBits) } c.initializeChecker() c.mergesFrozen = true diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 3979b96a0a4ec..9162e6dc08836 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -358,12 +358,19 @@ func (c *Checker) memoCompute[T comparable](m *memo[T], compute func() T) T { // entries are only accessible through methods. Memo state is kept per entry // in a side map allocated on first use by a query. // +// Most maps never need anything but their entries, and many are embedded in +// types, so everything else lives in a side table allocated on first use. +// // An entry should be computed between enter and endMemo, so that reusing it // replays the effects of computing that entry alone. An entry set outside its // own computation depends on the whole enclosing computation instead. type memoMap[K comparable, V any] struct { - _ memoNoCopy - memoEntries map[K]V + _ memoNoCopy + memoEntries map[K]V + side *memoMapSide[K] +} + +type memoMapSide[K comparable] struct { memoStates map[K]*memoState resolvingKeys []K // Keys of computations in progress without a memo state yet // If set, keyBits returns well-mixed bits of a key, with which stateKeys @@ -373,25 +380,47 @@ type memoMap[K comparable, V any] struct { stateKeys []uint64 } +func (m *memoMap[K, V]) sideTable() *memoMapSide[K] { + if m.side == nil { + m.side = &memoMapSide[K]{} + } + return m.side +} + +// setKeyBits makes the map filter the keys that may have a memo state with +// keyBits; see memoMapSide. +func (m *memoMap[K, V]) setKeyBits(keyBits func(K) uint64) { + m.sideTable().keyBits = keyBits +} + +// states returns the memo states of the entries, or nil. +func (m *memoMap[K, V]) states() map[K]*memoState { + if m.side == nil { + return nil + } + return m.side.memoStates +} + const memoMapStateFilterBits = 20 // stateOf returns the memo state of the entry for k, or nil. func (m *memoMap[K, V]) stateOf(k K) *memoState { - if m.memoStates == nil { + s := m.side + if s == nil || s.memoStates == nil { return nil } - if m.keyBits != nil { - if i := m.keyBits(k) >> (64 - memoMapStateFilterBits); m.stateKeys[i/64]&(1<<(i%64)) == 0 { + if s.keyBits != nil { + if i := s.keyBits(k) >> (64 - memoMapStateFilterBits); s.stateKeys[i/64]&(1<<(i%64)) == 0 { return nil } } - return m.memoStates[k] + return s.memoStates[k] } // get returns the cached result for k, accounting for the effects of // computing it. func (m *memoMap[K, V]) get(c *Checker, k K) (V, bool) { - if (m.memoStates != nil || len(m.resolvingKeys) != 0) && c.observing() { + if m.side != nil && c.observing() { m.observe(c, k) } v, ok := m.memoEntries[k] @@ -409,6 +438,9 @@ func (m *memoMap[K, V]) peek(k K) (V, bool) { // //go:noinline func (m *memoMap[K, V]) observe(c *Checker, k K) { + if m.side.memoStates == nil && len(m.side.resolvingKeys) == 0 { + return + } // A computation in progress may not have a memo state yet; see // resolutionState. if state := m.stateOf(k); c.observeState(state) || state == nil && !c.checking { @@ -450,14 +482,14 @@ func (m *memoMap[K, V]) set(c *Checker, k K, v V) { //go:noinline func (m *memoMap[K, V]) logDiscard(c *Checker, k K) { old, ok := m.memoEntries[k] - oldCount := savedCountOf(m.memoStates, k) + oldCount := savedCountOf(m.states(), k) c.discardLog = append(c.discardLog, discardEntry{nil, func() { if ok { m.memoEntries[k] = old } else { delete(m.memoEntries, k) } - restoreCount(m.memoStates, k, oldCount) + restoreCount(m.states(), k, oldCount) }, false}) } @@ -506,7 +538,7 @@ func (m *memoMap[K, V]) attach(c *Checker, k K) { if c.memoTop == 0 || c.checking { return } - if f := &c.resolutions[c.memoTop-1]; f.source == memoStateSource(m) && m.resolvingKeys[f.index] == k { + if f := &c.resolutions[c.memoTop-1]; f.source == memoStateSource(m) && m.side.resolvingKeys[f.index] == k { return } c.attachState(m.state(k)) @@ -537,8 +569,9 @@ func (m *memoMap[K, V]) begin(c *Checker, k K) { // Entering a computed result reads it. c.observeCost(state.count) } + side := m.sideTable() outer := 0 - if len(m.resolvingKeys) != 0 { + if len(side.resolvingKeys) != 0 { outer = m.resolvingIndex(c, k) } if outer != 0 { @@ -547,8 +580,8 @@ func (m *memoMap[K, V]) begin(c *Checker, k K) { // Marking may have given the entry a state. state = m.stateOf(k) } - m.resolvingKeys = append(m.resolvingKeys, k) - c.beginResolution(m, len(m.resolvingKeys)-1) + side.resolvingKeys = append(side.resolvingKeys, k) + c.beginResolution(m, len(side.resolvingKeys)-1) if c.checking { if c.memoPendingCount != 0 && state != nil { c.replayPending(state) @@ -562,7 +595,10 @@ func (m *memoMap[K, V]) begin(c *Checker, k K) { // resolvingIndex returns 1 + the index in resolutions of the computation of // the entry for k in progress, or 0. func (m *memoMap[K, V]) resolvingIndex(c *Checker, k K) int { - for i, key := range m.resolvingKeys { + if m.side == nil { + return 0 + } + for i, key := range m.side.resolvingKeys { if key != k { continue } @@ -588,32 +624,33 @@ func (m *memoMap[K, V]) resolutionIndex(c *Checker, i int) int { // for k. func (m *memoMap[K, V]) isOwnResolution(c *Checker, k K) bool { f := c.currentResolution() - return f.source == memoStateSource(m) && m.resolvingKeys[f.index] == k + return f.source == memoStateSource(m) && m.side.resolvingKeys[f.index] == k } func (m *memoMap[K, V]) stateAt(i int) *memoState { - return m.state(m.resolvingKeys[i]) + return m.state(m.side.resolvingKeys[i]) } func (m *memoMap[K, V]) popState(i int) { - clear(m.resolvingKeys[i:]) - m.resolvingKeys = m.resolvingKeys[:i] + clear(m.side.resolvingKeys[i:]) + m.side.resolvingKeys = m.side.resolvingKeys[:i] } func (m *memoMap[K, V]) state(k K) *memoState { state := m.stateOf(k) if state == nil { - if m.memoStates == nil { - m.memoStates = make(map[K]*memoState) - if m.keyBits != nil { - m.stateKeys = make([]uint64, 1<> (64 - memoMapStateFilterBits) - m.stateKeys[i/64] |= 1 << (i % 64) + s.memoStates[k] = state + if s.keyBits != nil { + i := s.keyBits(k) >> (64 - memoMapStateFilterBits) + s.stateKeys[i/64] |= 1 << (i % 64) } } return state From 27d9c7e84606d315b41c519e664f0a79b6a5c1cb Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 06:21:12 -0700 Subject: [PATCH 109/194] Keep instantiation counts with few registers as a list Every result computed or set within a resolution that instantiated anything keeps an instantiation count, 80 bytes for its 64 registers. Most counts are tiny: on VS Code, half of them have at most two nonzero registers and nearly three quarters at most eight. Keep up to eight nonzero registers as a list ordered by index in a 32-byte count, and switch to all 64 registers only past that. The registers and so the estimate are the same as before whatever the order of additions. PERF-PLACEHOLDER --- tsc/internal/checker/resolutions.go | 78 +++++++++++++++++++++--- tsc/internal/checker/resolutions_test.go | 62 +++++++++++++++++++ 2 files changed, 130 insertions(+), 10 deletions(-) create mode 100644 tsc/internal/checker/resolutions_test.go diff --git a/tsc/internal/checker/resolutions.go b/tsc/internal/checker/resolutions.go index e5db582677eca..5414d5fa5c8a9 100644 --- a/tsc/internal/checker/resolutions.go +++ b/tsc/internal/checker/resolutions.go @@ -364,8 +364,7 @@ func (c *Checker) linkCost(key memoKey) { func (c *Checker) costSoFar() *instantiationCount { f := c.currentResolution() if f.count != nil { - count := *f.count - return &count + return f.count.clone() } return nil } @@ -423,21 +422,69 @@ const ( instantiationCountThreshold = 709 * instantiationCountRegisters * instantiationCountRegisters * (1 << instantiationCountMaxRank) / (1000 * instantiationCountLimit) ) +// Most counts have few nonzero registers, so those are kept as a short list +// until there are too many for it. +const instantiationCountSparse = 8 + type instantiationCount struct { - registers [instantiationCountRegisters]uint8 - inverse uint64 // Sum of 2^(instantiationCountMaxRank-register) + inverse uint64 // Sum of 2^(instantiationCountMaxRank-register) + // Nonzero registers as index<<8 | value, in order of index, while dense + // is nil. + sparse [instantiationCountSparse]uint16 + dense *[instantiationCountRegisters]uint8 } func newInstantiationCount() *instantiationCount { return &instantiationCount{inverse: instantiationCountRegisters << instantiationCountMaxRank} } +func (s *instantiationCount) clone() *instantiationCount { + count := *s + if s.dense != nil { + dense := *s.dense + count.dense = &dense + } + return &count +} + func (s *instantiationCount) raise(i uint64, rank uint8) { - if old := s.registers[i]; rank > old { - s.inverse -= 1 << (instantiationCountMaxRank - old) - s.inverse += 1 << (instantiationCountMaxRank - rank) - s.registers[i] = rank + var old uint8 + if s.dense != nil { + old = s.dense[i] + if rank <= old { + return + } + s.dense[i] = rank + } else { + j := 0 + for ; j < instantiationCountSparse && s.sparse[j] != 0; j++ { + if index := uint64(s.sparse[j] >> 8); index >= i { + if index == i { + old = uint8(s.sparse[j]) + } + break + } + } + if rank <= old { + return + } + switch { + case old != 0: + s.sparse[j] = uint16(i)<<8 | uint16(rank) + case s.sparse[instantiationCountSparse-1] == 0: + copy(s.sparse[j+1:], s.sparse[j:instantiationCountSparse-1]) + s.sparse[j] = uint16(i)<<8 | uint16(rank) + default: + s.dense = new([instantiationCountRegisters]uint8) + for _, e := range s.sparse { + s.dense[e>>8] = uint8(e) + } + s.sparse = [instantiationCountSparse]uint16{} + s.dense[i] = rank + } } + s.inverse -= 1 << (instantiationCountMaxRank - old) + s.inverse += 1 << (instantiationCountMaxRank - rank) } func (s *instantiationCount) add(h uint64) { @@ -446,8 +493,19 @@ func (s *instantiationCount) add(h uint64) { } func (s *instantiationCount) merge(other *instantiationCount) { - for i, rank := range other.registers { - s.raise(uint64(i), rank) + if other.dense != nil { + for i, rank := range other.dense { + if rank != 0 { + s.raise(uint64(i), rank) + } + } + return + } + for _, e := range other.sparse { + if e == 0 { + break + } + s.raise(uint64(e>>8), uint8(e)) } } diff --git a/tsc/internal/checker/resolutions_test.go b/tsc/internal/checker/resolutions_test.go new file mode 100644 index 0000000000000..98c2444b07033 --- /dev/null +++ b/tsc/internal/checker/resolutions_test.go @@ -0,0 +1,62 @@ +package checker + +import ( + "math/bits" + "math/rand/v2" + "testing" + + "gotest.tools/v3/assert" +) + +func instantiationCountRegistersOf(s *instantiationCount) [instantiationCountRegisters]uint8 { + var registers [instantiationCountRegisters]uint8 + if s.dense != nil { + return *s.dense + } + for _, e := range s.sparse { + if e != 0 { + registers[e>>8] = uint8(e) + } + } + return registers +} + +func TestInstantiationCountIndependentOfOrder(t *testing.T) { + t.Parallel() + rng := rand.New(rand.NewPCG(1, 2)) + for _, n := range []int{0, 1, 2, 5, instantiationCountSparse, instantiationCountSparse + 1, 20, 200, 5000} { + hashes := make([]uint64, n) + for i := range hashes { + hashes[i] = rng.Uint64() + } + var want [instantiationCountRegisters]uint8 + wantInverse := uint64(0) + for _, h := range hashes { + i := h >> (64 - instantiationCountIndexBits) + want[i] = max(want[i], min(uint8(bits.LeadingZeros64(h< Date: Fri, 30 Oct 2026 07:53:17 -0700 Subject: [PATCH 110/194] Count instantiations per statement again The limit on the number of instantiations was made independent of check order by keeping, for every computation and every cached result, a HyperLogLog estimate of the distinct instantiations needed to compute it from scratch, merged into whatever read it. That bookkeeping was a large share of the extra memory and time over main: an estimate stored on memo states for results set inside other computations, structural hashes for every type instantiated, and a merge on most cached reads. The limit only exists to stop runaway instantiations, which are broken whatever the order, so it is not worth that cost. Count instantiations since the start of the current statement or expression, as before, and accept that whether the limit is reached depends on what was cached before, like the much larger limit on total instantiation depth. The error is reported once, at the node that reached it, since computing the result elsewhere would not reliably reach the limit again. The depth limit stays per computation and independent of order. Without counts, reading a cached result while checking has nothing to account for unless effects or errors are pending, so the check of whether to observe a read no longer depends on the instantiation stack. The instantiation limits test drops the case that showed the count limit reached regardless of shared work. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 42 +-- tsc/internal/checker/checker_test.go | 1 - tsc/internal/checker/memo.go | 136 ++----- tsc/internal/checker/relater.go | 41 +-- tsc/internal/checker/resolutions.go | 288 +-------------- tsc/internal/checker/resolutions_test.go | 62 ---- tsc/internal/checker/typehash.go | 348 ------------------ .../instantiationLimitsCheckOrder.errors.txt | 20 +- .../instantiationLimitsCheckOrder.symbols | 81 ++-- .../instantiationLimitsCheckOrder.types | 18 +- .../compiler/instantiationLimitsCheckOrder.ts | 13 +- 11 files changed, 138 insertions(+), 912 deletions(-) delete mode 100644 tsc/internal/checker/resolutions_test.go delete mode 100644 tsc/internal/checker/typehash.go diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index b4bfc2903e41e..8869ec7e34787 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -633,11 +633,6 @@ type Checker struct { compareSymbolChains func([]*ast.Symbol, []*ast.Symbol) int resolutionSerials uint32 resolutions []resolution - symbolHashes symbolLinkStore[uint64] - typeHashes core.PagedLinkStore[[typeHashDepth]uint64] - foreignTypeHashes map[*Type]*[typeHashDepth]uint64 - mapperHashes *[mapperHashCacheSize]mapperHashCacheEntry - fileHashes map[*ast.SourceFile]uint64 instantiationStack []*Type conditionalConstraintDepth depthLimit inlineLevel depthLimit @@ -798,7 +793,8 @@ type Checker struct { typeToStringNodebuilder *NodeBuilder tracer *Tracer // Optional tracer for trace events and type recording (for --generateTrace) checking bool // Whether side effects such as diagnostics are applied; see memo.go - observeFloor int // Length of instantiationStack above which observing holds; see syncObserveFloor + observingMemos bool // See syncObserving + instantiationCount uint32 // Instantiations since the start of the current statement or expression; see "Instantiation limits" memoTop int // 1 + index in resolutions of the innermost computation recording effects, or 0; see memo.go } @@ -1036,7 +1032,6 @@ type memoStore struct { nonExistentProperties collections.Set[NonExistentPropertyKey] deferredDiagnosticCallbacks []func(c *Checker) memoStates map[memoKey]*memoState // Memo state of results computed by queries; see memo.go - costFilter []uint64 // Memo keys whose memo states may store work; see resolutions.go stateFilter []uint64 // Memo keys that may have a memo state; see memoState memoPendingCount int // Number of memoStates with unreplayed effects memoErrorStates int // Number of memoStates with reports; see setReported @@ -1163,7 +1158,7 @@ func NewChecker(program Program, tracer *Tracer) (*Checker, *sync.Mutex) { c.initializeChecker() c.mergesFrozen = true c.checking = false - c.syncObserveFloor() + c.syncObserving() return c, &c.mu } @@ -20559,12 +20554,9 @@ func (c *Checker) popTypeResolution() bool { debug.Assert(c.typeResolutionTop == n+1, "resolutions left above a type resolution") f := &c.resolutions[n] result := f.typeResolution.result - parent := &c.resolutions[n-1] - parent.count = f.count c.typeResolutionTop = int(f.prevTypeResolution) c.resolutions[n] = resolution{} c.resolutions = c.resolutions[:n] - c.syncObserveFloor() if c.circularityStart > n { c.endCircularity() } else if len(c.innerCycles) != 0 { @@ -20582,8 +20574,6 @@ func (c *Checker) popTypeResolution() bool { func (c *Checker) beginTypeResolution(target TypeSystemEntity, propertyName TypeSystemPropertyName) { f := c.pushResolution() parent := &c.resolutions[len(c.resolutions)-2] - f.count = parent.count - f.start = parent.start f.depthStart = parent.depthStart f.serial = parent.serial f.prevMemo = int32(c.memoTop) @@ -24581,12 +24571,13 @@ func (c *Checker) instantiateTypeWithAlias(t *Type, m *TypeMapper, alias *TypeAl return t } // See "Instantiation limits" in memo.go. - if c.instantiationLimitReached() { + depthLimitReached := c.instantiationDepthLimitReached() + if depthLimitReached || c.instantiationCount >= instantiationCountLimit { // We have reached 100 recursive type instantiations in one computation, or 5M type instantiations caused by // the same statement or expression. There is a very high likelihood we're dealing with a combination of infinite generic types // that perpetually generate new type identities, so we stop the recursion here by yielding the error type. if tr := c.tracer; tr != nil { - tr.Instant(tracing.PhaseCheckTypes, "instantiateType_DepthLimit", map[string]any{"typeId": t.id, "instantiationDepth": len(c.instantiationStack)}) + tr.Instant(tracing.PhaseCheckTypes, "instantiateType_DepthLimit", map[string]any{"typeId": t.id, "instantiationDepth": len(c.instantiationStack), "instantiationCount": c.instantiationCount}) } circularTypeNames := c.getCircularTypeNames() var message *diagnostics.Message @@ -24599,7 +24590,14 @@ func (c *Checker) instantiateTypeWithAlias(t *Type, m *TypeMapper, alias *TypeAl default: message = diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite } - c.reportAtCurrentNode(func(c *Checker, node *ast.Node) { c.error(node, message, args...) }) + report := func(c *Checker, node *ast.Node) { c.error(node, message, args...) } + if depthLimitReached { + c.reportAtCurrentNode(report) + } else { + // The count depends on how much was already cached, so computing + // the result again elsewhere would not reliably reach it either. + c.reportAtCurrentNodeOnce(report) + } return c.errorType } index := c.findActiveMapper(m) @@ -24609,19 +24607,15 @@ func (c *Checker) instantiateTypeWithAlias(t *Type, m *TypeMapper, alias *TypeAl c.pushActiveMapper(m) } else { key = getActiveMapperCacheKey(t, alias) - // An instantiation cached in another resolution is not part of the work - // of this one, so it is only reused within the same resolution. + // An instantiation cached in another resolution was computed against that + // resolution's depth limit, so it is only reused within the same + // resolution. if cached, ok := c.activeTypeMappersCaches[index].get(key); ok && cached.serial == c.currentResolution().serial { return cached.result } } c.TotalInstantiationCount++ - h := hashCombine(c.typeHash(t), c.mapperHash(m)) - if alias != nil { - h = hashCombine(h, c.symbolHash(alias.symbol)) - h = c.hashTypes(h, alias.typeArguments, typeHashDepth) - } - c.addInstantiation(hashFinal(h)) + c.instantiationCount++ c.instantiationStack = append(c.instantiationStack, t) result := c.instantiateTypeWorker(t, m, alias) if index == -1 { diff --git a/tsc/internal/checker/checker_test.go b/tsc/internal/checker/checker_test.go index b9d7c54020b89..cd053cc6aa455 100644 --- a/tsc/internal/checker/checker_test.go +++ b/tsc/internal/checker/checker_test.go @@ -588,7 +588,6 @@ var unmemoizedCacheFields = map[string]string{ "memoStore.memoStates": unmemoizedMemoState, "memoStore.memoPendingCount": unmemoizedMemoState, "memoStore.memoErrorStates": unmemoizedMemoState, - "memoStore.costFilter": unmemoizedMemoState, "memoStore.stateFilter": unmemoizedMemoState, "memoStore.mu": unmemoizedMemoState, "memoStore.diagnostics": unmemoizedChecking, diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 9162e6dc08836..15ba6b4209be8 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -172,7 +172,6 @@ func (f *memoEffects) covers(deps []*memoEffects) bool { type memoState struct { pending *memoEffects // Effects not yet replayed by a check errors []*currentNodeError // Errors the computation reported at the current node; see setReported - count *instantiationCount // Instantiations the computation needed; see "Instantiation counts" } // memo is a cached result. Cached checker state must live in a memo so that @@ -218,7 +217,6 @@ func (m *memo[T]) set(c *Checker, v T) { m.logDiscard(c) } m.memoValue = v - c.linkCost(m.key()) if !c.checking { c.attachCell(&m.memoHeader) } @@ -261,11 +259,6 @@ func setIfChanged[T comparable](c *Checker, m *memo[T], v T) { // the end of a cycle: discarding an identity would let a second, distinct // result exist, and an entity can outlive the cycle in caches that are kept // while having no way to compute its parts again. -// -// Unlike set, it does not take on the work of the computation setting it (see -// linkCost): an identity is reached only through the result that created it, -// whose work is already accounted for, and the setting computation's later -// work, which would otherwise count, is unrelated. func (m *memo[T]) setIdentity(c *Checker, v T) { m.memoValue = v if !c.checking { @@ -294,17 +287,9 @@ func (m *memo[T]) setReported(c *Checker, v T, r currentNodeErrors) { //go:noinline func (m *memo[T]) logDiscard(c *Checker) { - // The work of the result is discarded with it. old := m.memoValue - var oldCount *instantiationCount - if m.state != nil { - oldCount = m.state.count - } c.discardLog = append(c.discardLog, discardEntry{&m.memoHeader, func() { m.memoValue = old - if m.state != nil { - m.state.count = oldCount - } }, false}) } @@ -471,25 +456,17 @@ func (m *memoMap[K, V]) set(c *Checker, k K, v V) { m.logDiscard(c, k) } m.setIdentity(c, k, v) - if len(c.resolutions) > 1 && !m.isOwnResolution(c, k) { - // Like memo.set; see linkCost. - if count := c.costSoFar(); count != nil { - m.state(k).count = count - } - } } //go:noinline func (m *memoMap[K, V]) logDiscard(c *Checker, k K) { old, ok := m.memoEntries[k] - oldCount := savedCountOf(m.states(), k) c.discardLog = append(c.discardLog, discardEntry{nil, func() { if ok { m.memoEntries[k] = old } else { delete(m.memoEntries, k) } - restoreCount(m.states(), k, oldCount) }, false}) } @@ -517,22 +494,6 @@ func (m *memoMap[K, V]) setIdentity(c *Checker, k K, v V) { m.attach(c, k) } -// setWithCost is set for a result whose instantiation count is count, rather -// than that of the current resolution. -func (m *memoMap[K, V]) setWithCost(c *Checker, k K, v V, count *instantiationCount) { - if c.logResults() { - m.logDiscard(c, k) - } - if m.memoEntries == nil { - m.memoEntries = make(map[K]V) - } - m.memoEntries[k] = v - if count != nil { - m.state(k).count = count - } - m.attach(c, k) -} - // attach is memoAttach for the entry for k. func (m *memoMap[K, V]) attach(c *Checker, k K) { if c.memoTop == 0 || c.checking { @@ -565,10 +526,6 @@ func (m *memoMap[K, V]) compute(c *Checker, k K, fn func() V) V { // enter starts the computation of the result for k; see beginMemo. func (m *memoMap[K, V]) begin(c *Checker, k K) { state := m.stateOf(k) - if state != nil && c.inResolution() { - // Entering a computed result reads it. - c.observeCost(state.count) - } side := m.sideTable() outer := 0 if len(side.resolvingKeys) != 0 { @@ -687,22 +644,18 @@ func (c *Checker) memoActive() bool { } // observing reports whether reading a cached result must account for its -// effects or its instantiation count. +// effects. It is memoActive, kept in a field for the many reads that check +// it. func (c *Checker) observing() bool { - return len(c.instantiationStack) > c.observeFloor + return c.observingMemos } -// syncObserveFloor updates observeFloor after a change to what observing -// depends on: the checking flag, the counts read by memoActive, or the -// resolution stack. The counts are shared with other checkers using the same +// syncObserving updates observingMemos after a change to what memoActive +// depends on: the checking flag or the counts it reads. The counts are shared with other checkers using the same // store, but those only run while this one is not checking, and it syncs on // starting to check. -func (c *Checker) syncObserveFloor() { - if c.memoActive() { - c.observeFloor = -1 - } else { - c.observeFloor = int(c.currentResolution().start) - } +func (c *Checker) syncObserving() { + c.observingMemos = c.memoActive() } // beginMemo is called on entry to a memoized function whose result for this @@ -712,10 +665,6 @@ func (c *Checker) syncObserveFloor() { // must be matched by endMemo. func (c *Checker) beginMemo(key memoKey) { state := c.peekMemoState(key) - if state != nil { - // Entering a computed result reads it. - c.observeCost(state.count) - } resolving := c.beginResolving(key) c.appendResolution(key, nil, 0, int32(len(c.instantiationStack))) c.resolutions[len(c.resolutions)-1].resolving = resolving @@ -804,14 +753,20 @@ func (c *Checker) memoState(key memoKey) *memoState { state = &memoState{} c.memoStates[key] = state if c.stateFilter == nil { - c.stateFilter = make([]uint64, 1<> (64 - stateFilterBits) +} + // peekMemoState returns the memo state of the result identified by key, or // nil if it has none, consulting a filter first since most results have none. func (c *Checker) peekMemoState(key memoKey) *memoState { @@ -821,7 +776,7 @@ func (c *Checker) peekMemoState(key memoKey) *memoState { if c.stateFilter == nil { return nil } - if i := costFilterIndex(key); c.stateFilter[i/64]&(1<<(i%64)) == 0 { + if i := stateFilterIndex(key); c.stateFilter[i/64]&(1<<(i%64)) == 0 { return nil } return c.memoStates[key] @@ -869,7 +824,7 @@ func (c *Checker) linkState(state *memoState, f *memoEffects) { if state.pending == nil { state.pending = &memoEffects{} c.memoPendingCount++ - c.syncObserveFloor() + c.syncObserving() if c.flushStates != nil { *c.flushStates = append(*c.flushStates, state) } @@ -885,11 +840,6 @@ func (c *Checker) linkState(state *memoState, f *memoEffects) { func (c *Checker) observeCell(h *memoHeader) { state := h.state if !c.memoActive() { - // Only the work of the result is accounted for. The memo state is at - // hand, so the work filter is no help. - if state != nil { - c.observeCost(state.count) - } return } if c.observeState(state) || state == nil && !c.checking && c.resolving.count != 0 { @@ -904,8 +854,7 @@ func (c *Checker) attachCell(h *memoHeader) { // observeMemo accounts for reading a memoized result without computing it. func (c *Checker) observeMemo(key memoKey) { - if !c.memoActive() && !c.mayHaveCost(key) { - // Only the work of the result is accounted for, and it has none. + if !c.memoActive() { return } // A computation in progress may not have a memo state yet; see @@ -922,7 +871,6 @@ func (c *Checker) observeState(state *memoState) bool { if state == nil { return false } - c.observeCost(state.count) if state.errors != nil { c.replayCurrentNodeErrors(state.errors) } @@ -993,10 +941,10 @@ func (s *memoState) setErrors(c *Checker, reports []*currentNodeError) { switch { case s.errors == nil && reports != nil: c.memoErrorStates++ - c.syncObserveFloor() + c.syncObserving() case s.errors != nil && reports == nil: c.memoErrorStates-- - c.syncObserveFloor() + c.syncObserving() } s.errors = reports } @@ -1016,7 +964,7 @@ func (c *Checker) replayPending(state *memoState) { f := state.pending state.pending = nil c.memoPendingCount-- - c.syncObserveFloor() + c.syncObserving() c.replayMemo(f) } } @@ -1038,7 +986,7 @@ func (c *Checker) endMemo() { func (c *Checker) endMemoUncached() { defer c.endResolution() res := c.stopEffects() - c.forgetCost() + c.forgetResult() if res == nil || res.effects == nil { return } @@ -1070,7 +1018,7 @@ func (c *Checker) resolutionState(f *resolution) *memoState { case f.key != 0: f.result = c.memoState(f.key) default: - // The computation caches no result; see forgetCost. + // The computation caches no result; see forgetResult. f.result = &memoState{} } } @@ -1098,7 +1046,7 @@ func (c *Checker) retainEffects(state *memoState, f *memoEffects) { f.addDep(state.pending) } else { c.memoPendingCount++ - c.syncObserveFloor() + c.syncObserving() if c.flushStates != nil { *c.flushStates = append(*c.flushStates, state) } @@ -1226,13 +1174,13 @@ func (c *Checker) withoutChecking(fn func()) { saveMemoTop := c.memoTop var states []*memoState c.checking = false - c.syncObserveFloor() + c.syncObserving() c.memoTop = 0 c.flushStates = &states fn() c.flushStates = nil c.checking = true - c.syncObserveFloor() + c.syncObserving() c.memoTop = saveMemoTop // Replaying is in order of computation, so effects apply in the order // they would have in the check. They also happened at the current node, @@ -1242,7 +1190,7 @@ func (c *Checker) withoutChecking(fn func()) { f := state.pending state.pending = nil c.memoPendingCount-- - c.syncObserveFloor() + c.syncObserving() c.replayEffects(f, c.currentNode, true) } } @@ -1279,7 +1227,7 @@ func (c *Checker) recordFromCheck() { } c.resolutions[i].fromCheck = true c.checking = false - c.syncObserveFloor() + c.syncObserving() c.flushBuf = c.flushBuf[:0] c.flushStates = &c.flushBuf } @@ -1290,14 +1238,14 @@ func (c *Checker) endQueryFromCheck() { states := *c.flushStates c.flushStates = nil c.checking = true - c.syncObserveFloor() + c.syncObserving() defer clear(states) for _, state := range states { if state.pending != nil { f := state.pending state.pending = nil c.memoPendingCount-- - c.syncObserveFloor() + c.syncObserving() c.replayEffects(f, c.currentNode, true) } } @@ -1310,10 +1258,10 @@ func (c *Checker) withChecking(fn func()) { debug.Assert(c.memoTop == 0, "memo resolution leaked") saveChecking := c.checking c.checking = true - c.syncObserveFloor() + c.syncObserving() fn() c.checking = saveChecking - c.syncObserveFloor() + c.syncObserving() } // memoCycle is called when a computation observes another computation that is @@ -1717,10 +1665,10 @@ func (c *Checker) logPendingDiscard(state *memoState) { switch { case old == nil && state.pending != nil: c.memoPendingCount-- - c.syncObserveFloor() + c.syncObserving() case old != nil && state.pending == nil: c.memoPendingCount++ - c.syncObserveFloor() + c.syncObserving() } state.pending = old if old != nil && len(old.deps) > n { @@ -1773,10 +1721,12 @@ func (c *Checker) typeResolutionMemo(r *TypeResolution) *memoHeader { // outermost instantiation, which is only reached by runaway instantiations, // and which does depend on what was cached before. // -// The limit on the number of instantiations likewise applies to the work -// needed to compute the current result from scratch, estimated by an -// instantiation count of the distinct instantiations it needs, including -// those of the results it reuses (see resolutions.go). +// The limit on the number of instantiations is likewise only reached by +// runaway instantiations, and depends on what was cached before: it counts +// the instantiations performed since the start of the current statement or +// expression, and reused results add none. Making it independent would mean +// keeping, for every cached result, the work needed to compute it from +// scratch, which costs far more than the limit is worth. const ( instantiationDepthLimit = 100 @@ -1784,12 +1734,6 @@ const ( instantiationCountLimit = 5_000_000 ) -// instantiationLimitReached reports whether a further instantiation would -// exceed a limit. -func (c *Checker) instantiationLimitReached() bool { - return c.instantiationDepthLimitReached() || c.currentResolution().count.exceedsLimit() -} - func (c *Checker) instantiationDepthLimitReached() bool { depth := len(c.instantiationStack) return depth-int(c.currentResolution().depthStart) == instantiationDepthLimit || depth == instantiationTotalDepthLimit diff --git a/tsc/internal/checker/relater.go b/tsc/internal/checker/relater.go index 378eb8fc838a4..6086e3789cc3e 100644 --- a/tsc/internal/checker/relater.go +++ b/tsc/internal/checker/relater.go @@ -116,10 +116,8 @@ func (r *Relation) get(c *Checker, key CacheHashKey) RelationComparisonResult { return result } -// set caches the result of a comparison whose instantiation count is count; -// see "Instantiation counts". -func (r *Relation) set(c *Checker, key CacheHashKey, result RelationComparisonResult, count *instantiationCount) { - r.results.setWithCost(c, key, result, count) +func (r *Relation) set(c *Checker, key CacheHashKey, result RelationComparisonResult) { + r.results.set(c, key, result) } func (c *Checker) isTypeIdenticalTo(source *Type, target *Type) bool { @@ -309,7 +307,7 @@ func (c *Checker) isEnumTypeRelatedTo(source *ast.Symbol, target *ast.Symbol, er } c.enumRelation.begin(c, key) related := c.isEnumTypeRelatedToUncached(sourceSymbol, targetSymbol, errorReporter) - c.enumRelation.setWithCost(c, key, core.IfElse(related, RelationComparisonResultSucceeded, RelationComparisonResultFailed), nil) + c.enumRelation.set(c, key, core.IfElse(related, RelationComparisonResultSucceeded, RelationComparisonResultFailed)) c.endMemo() return related } @@ -421,7 +419,7 @@ func (c *Checker) checkTypeRelatedToWithKey( result = r.isRelatedToEx(source, target, RecursionFlagsBoth, errorNode != nil /*reportErrors*/, headMessage, IntersectionStateNone) if r.overflow { // Record this relation as having failed such that we don't attempt the overflowing operation again. - relation.set(c, id, RelationComparisonResultFailed|RelationComparisonResultComplexityOverflow, nil) + relation.set(c, id, RelationComparisonResultFailed|RelationComparisonResultComplexityOverflow) } c.endMemo() } @@ -1560,6 +1558,7 @@ func (c *Checker) getVariancesWorker(symbol *ast.Symbol, typeParameters []*Type) c.beginTypeResolution(symbol, TypeSystemPropertyNameVariances) guessesStart := len(c.varianceGuessed) mark := c.markDiscard() + instantiationCount := c.instantiationCount var variances []VarianceFlags for { variances = c.measureVariances(symbol, typeParameters) @@ -1586,6 +1585,10 @@ func (c *Checker) getVariancesWorker(symbol *ast.Symbol, typeParameters []*Type) entry.cycleStart = math.MaxInt entry.guessChanged = false c.discardSince(mark) + // The work of a discarded round does not count toward the limit on + // instantiations, so whether the limit is reached does not depend on + // how many rounds the circularity took to settle. + c.instantiationCount = instantiationCount } if c.varianceStack[index].cycleStart >= index { for _, s := range c.varianceGuessed[guessesStart:] { @@ -3590,7 +3593,6 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError saveReliabilityFlags := r.c.reliabilityFlags r.c.reliabilityFlags = 0 var result Ternary - var count *instantiationCount if r.expandingFlags == ExpandingFlagsBoth { if tr := r.c.tracer; tr != nil { tr.Instant(tracing.PhaseCheckTypes, "recursiveTypeRelatedTo_DepthLimit", map[string]any{"sourceId": source.id, "targetId": target.id, "depth": len(r.sourceStack), "targetDepth": len(r.targetStack)}) @@ -3602,11 +3604,11 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError defer tr.Push(tracing.PhaseCheckTypes, "structuredTypeRelatedTo", map[string]any{"sourceId": source.id, "targetId": target.id}, false)() } // The result is cached, so instantiations it needs count against - // depth limits from here, not from wherever it is first compared + // the depth limit from here, not from wherever it is first compared // (see "Instantiation limits" in memo.go). r.c.beginResolution(nil, 0) result = r.structuredTypeRelatedTo(source, target, reportErrors, intersectionState) - count = r.c.endResolution() + r.c.endResolution() } propagatingVarianceFlags := r.c.reliabilityFlags r.c.reliabilityFlags |= saveReliabilityFlags @@ -3627,14 +3629,14 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError // The comparison was cut short, so its result and those of the // comparisons that completed assuming it are not what computing them // from scratch would give. Only the overflow is cached. - r.resetMaybeStack(maybeStart, propagatingVarianceFlags, false, nil) + r.resetMaybeStack(maybeStart, propagatingVarianceFlags, false) result = TernaryFalse case result == TernaryFalse: // A false result goes straight into global cache (when something is false under // assumptions it will also be false without assumptions) - r.relation.set(r.c, id, RelationComparisonResultFailed|propagatingVarianceFlags, count) + r.relation.set(r.c, id, RelationComparisonResultFailed|propagatingVarianceFlags) r.relationCount-- - r.resetMaybeStack(maybeStart, propagatingVarianceFlags, false, nil) + r.resetMaybeStack(maybeStart, propagatingVarianceFlags, false) case low >= depth: // The result depends on no comparison outside of this one, so it is the // same from scratch. Comparisons that completed assuming this one hold @@ -3642,13 +3644,13 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError // scratch. Ternary.Unknown results are never recorded. switch { case result == TernaryUnknown: - r.resetMaybeStack(maybeStart, propagatingVarianceFlags, false, nil) + r.resetMaybeStack(maybeStart, propagatingVarianceFlags, false) case truncated: - r.resetMaybeStack(maybeStart, propagatingVarianceFlags, false, nil) - r.relation.set(r.c, id, RelationComparisonResultSucceeded|propagatingVarianceFlags, count) + r.resetMaybeStack(maybeStart, propagatingVarianceFlags, false) + r.relation.set(r.c, id, RelationComparisonResultSucceeded|propagatingVarianceFlags) r.relationCount-- default: - r.resetMaybeStack(maybeStart, propagatingVarianceFlags, true, count) + r.resetMaybeStack(maybeStart, propagatingVarianceFlags, true) } // The result no longer depends on any comparison in progress, so it // is reported as related, the same as when it is read from the cache. @@ -3689,15 +3691,12 @@ func (r *Relater) truncate(depth int) { r.truncated = true } -// resetMaybeStack ends the comparisons since maybeStart, recording them as -// related if markAllAsSucceeded. Those recorded take the instantiation count -// count. -func (r *Relater) resetMaybeStack(maybeStart int, propagatingVarianceFlags RelationComparisonResult, markAllAsSucceeded bool, count *instantiationCount) { +func (r *Relater) resetMaybeStack(maybeStart int, propagatingVarianceFlags RelationComparisonResult, markAllAsSucceeded bool) { for i := maybeStart; i < len(r.maybeKeys); i++ { key := r.maybeKeys[i].key delete(r.maybeKeysSet, key) if markAllAsSucceeded { - r.relation.set(r.c, key, RelationComparisonResultSucceeded|propagatingVarianceFlags, count) + r.relation.set(r.c, key, RelationComparisonResultSucceeded|propagatingVarianceFlags) r.relationCount-- } } diff --git a/tsc/internal/checker/resolutions.go b/tsc/internal/checker/resolutions.go index 5414d5fa5c8a9..c3f31bd8ddbbc 100644 --- a/tsc/internal/checker/resolutions.go +++ b/tsc/internal/checker/resolutions.go @@ -1,8 +1,6 @@ package checker import ( - "math/bits" - "github.com/microsoft/TypeScript/tsc/internal/ast" "github.com/microsoft/TypeScript/tsc/internal/debug" ) @@ -11,16 +9,14 @@ import ( // comparison, or a checked node. The innermost is the last in // Checker.resolutions, above a root resolution for work outside any of them. type resolution struct { - count *instantiationCount // Allocated on first use - // The instantiation count is stored for the memo identified by key, or in - // the memo state source creates for index, if either is given. + // The result computed is the memo identified by key, or the one whose + // memo state source creates for index, if either is given. key memoKey source memoStateSource index int32 - start int32 // Length of the instantiation stack on entry // Length of the instantiation stack from which the depth limit counts: - // start for a computation, or that of the enclosing resolution for a - // node. + // that on entry for a computation, or that of the enclosing resolution + // for a node. depthStart int32 serial uint32 // Identifies the resolution among all entered @@ -56,7 +52,7 @@ type memoStateSource interface { func (c *Checker) initResolutions() { c.resolutions = []resolution{{}} - c.syncObserveFloor() + c.syncObserving() } // pushResolution pushes a resolution with every field zero and returns it. @@ -77,16 +73,17 @@ func (c *Checker) currentResolution() *resolution { return &c.resolutions[len(c.resolutions)-1] } -// beginResolution starts a resolution with an empty instantiation count for a -// computation, which also starts the depth limit of instantiations (see -// "Instantiation limits" in memo.go). +// beginResolution starts a resolution for a computation, which also starts the +// depth limit of instantiations (see "Instantiation limits" in memo.go). func (c *Checker) beginResolution(source memoStateSource, index int) { c.appendResolution(0, source, index, int32(len(c.instantiationStack))) } // beginNodeResolution starts a resolution for checking a node, which -// continues the depth limit of the enclosing resolution. +// continues the depth limit of the enclosing resolution and starts the count +// of instantiations again. func (c *Checker) beginNodeResolution() { + c.instantiationCount = 0 c.appendResolution(0, nil, 0, c.currentResolution().depthStart) } @@ -96,88 +93,39 @@ func (c *Checker) appendResolution(key memoKey, source memoStateSource, index in f.key = key f.source = source f.index = int32(index) - f.start = int32(len(c.instantiationStack)) f.depthStart = depthBase f.serial = c.resolutionSerials - c.syncObserveFloor() } -// endResolution finishes the current resolution, returning its instantiation -// count, or nil if it did no instantiations. -func (c *Checker) endResolution() *instantiationCount { +// endResolution finishes the current resolution. +func (c *Checker) endResolution() { n := len(c.resolutions) - 1 f := &c.resolutions[n] debug.Assert(!f.isTypeResolution, "resolution left on the stack") c.endResolving(f) - count := f.count fromCheck := f.fromCheck if f.memo { clear(c.deferredAttach[f.attachStart:]) c.deferredAttach = c.deferredAttach[:f.attachStart] } - if count != nil || f.source != nil { - c.finishResolution(f) + if f.source != nil { + f.source.popState(int(f.index)) } c.resolutions[n] = resolution{} c.resolutions = c.resolutions[:n] - c.syncObserveFloor() if c.circularityStart > n { c.endCircularity() } else if len(c.innerCycles) != 0 { c.endInnerCycles(n) } - if count != nil { - c.observeCost(count) - } if fromCheck { c.endQueryFromCheck() } - return count } -// finishResolution stores the instantiation count of a resolution for the -// results it computed. -func (c *Checker) finishResolution(f *resolution) { - if count := f.count; count != nil { - var state *memoState - if f.source != nil { - state = f.source.stateAt(int(f.index)) - } else if f.key != 0 { - state = c.memoState(f.key) - c.markCost(f.key) - } - if state != nil { - if state.count != nil { - count.merge(state.count) - } - state.count = count - } - } - if f.source != nil { - f.source.popState(int(f.index)) - } -} - -// savedCountOf returns the instantiation count stored in the memo state for -// k, so that discarding a result can discard the count stored for it since. -func savedCountOf[K comparable](states map[K]*memoState, k K) *instantiationCount { - if s := states[k]; s != nil { - return s.count - } - return nil -} - -// restoreCount makes count the instantiation count stored in the memo state -// for k, if it has one. -func restoreCount[K comparable](states map[K]*memoState, k K, count *instantiationCount) { - if s := states[k]; s != nil { - s.count = count - } -} - -// forgetCost makes the current resolution store its instantiation count for -// no result, for a computation that did not cache its result. -func (c *Checker) forgetCost() { +// forgetResult makes the current resolution compute no result, for a +// computation that did not cache its result. +func (c *Checker) forgetResult() { f := c.currentResolution() if f.source != nil { f.source.popState(int(f.index)) @@ -311,205 +259,3 @@ func (c *Checker) endResolving(f *resolution) { f.resolving = false } } - -// inResolution reports whether an instantiation of the current resolution is -// in progress, so that results it reads are part of its work. -func (c *Checker) inResolution() bool { - return len(c.instantiationStack) > int(c.currentResolution().start) -} - -// observeCost accounts for the work of a result read by the current -// resolution. -func (c *Checker) observeCost(count *instantiationCount) { - if count == nil || !c.inResolution() { - return - } - f := c.currentResolution() - if count == f.count { - return - } - if f.count == nil { - f.count = newInstantiationCount() - } - f.count.merge(count) -} - -func (c *Checker) addInstantiation(h uint64) { - f := c.currentResolution() - if f.count == nil { - f.count = newInstantiationCount() - } - f.count.add(h) -} - -// linkCost gives a memo set outside a computation of its own the -// instantiation count of the current resolution so far. Recomputing the memo -// from scratch repeats those instantiations, but not those the resolution goes -// on to do after setting it. -func (c *Checker) linkCost(key memoKey) { - if len(c.resolutions) <= 1 { - return - } - if key == c.currentResolution().key { - return - } - if count := c.costSoFar(); count != nil { - c.memoState(key).count = count - c.markCost(key) - } -} - -// costSoFar returns a copy of the instantiation count of the current -// resolution so far, or nil if it did no instantiations. -func (c *Checker) costSoFar() *instantiationCount { - f := c.currentResolution() - if f.count != nil { - return f.count.clone() - } - return nil -} - -// The work filter is a set of the memo keys whose memo states may store work, -// so that reading a result without effects to account for can skip looking up -// its memo state. Most reads within computations only account for work, and -// most results need none. - -const costFilterBits = 22 - -func costFilterIndex(key memoKey) uint64 { - return uint64(key) * 0x9E3779B97F4A7C15 >> (64 - costFilterBits) -} - -func (c *Checker) markCost(key memoKey) { - if c.costFilter == nil { - c.costFilter = make([]uint64, 1<> 8); index >= i { - if index == i { - old = uint8(s.sparse[j]) - } - break - } - } - if rank <= old { - return - } - switch { - case old != 0: - s.sparse[j] = uint16(i)<<8 | uint16(rank) - case s.sparse[instantiationCountSparse-1] == 0: - copy(s.sparse[j+1:], s.sparse[j:instantiationCountSparse-1]) - s.sparse[j] = uint16(i)<<8 | uint16(rank) - default: - s.dense = new([instantiationCountRegisters]uint8) - for _, e := range s.sparse { - s.dense[e>>8] = uint8(e) - } - s.sparse = [instantiationCountSparse]uint16{} - s.dense[i] = rank - } - } - s.inverse -= 1 << (instantiationCountMaxRank - old) - s.inverse += 1 << (instantiationCountMaxRank - rank) -} - -func (s *instantiationCount) add(h uint64) { - rank := uint8(bits.LeadingZeros64(h<>(64-instantiationCountIndexBits), min(rank, instantiationCountMaxRank)) -} - -func (s *instantiationCount) merge(other *instantiationCount) { - if other.dense != nil { - for i, rank := range other.dense { - if rank != 0 { - s.raise(uint64(i), rank) - } - } - return - } - for _, e := range other.sparse { - if e == 0 { - break - } - s.raise(uint64(e>>8), uint8(e)) - } -} - -// exceedsLimit reports whether the estimate reaches instantiationCountLimit. -func (s *instantiationCount) exceedsLimit() bool { - return s != nil && s.inverse <= instantiationCountThreshold -} diff --git a/tsc/internal/checker/resolutions_test.go b/tsc/internal/checker/resolutions_test.go deleted file mode 100644 index 98c2444b07033..0000000000000 --- a/tsc/internal/checker/resolutions_test.go +++ /dev/null @@ -1,62 +0,0 @@ -package checker - -import ( - "math/bits" - "math/rand/v2" - "testing" - - "gotest.tools/v3/assert" -) - -func instantiationCountRegistersOf(s *instantiationCount) [instantiationCountRegisters]uint8 { - var registers [instantiationCountRegisters]uint8 - if s.dense != nil { - return *s.dense - } - for _, e := range s.sparse { - if e != 0 { - registers[e>>8] = uint8(e) - } - } - return registers -} - -func TestInstantiationCountIndependentOfOrder(t *testing.T) { - t.Parallel() - rng := rand.New(rand.NewPCG(1, 2)) - for _, n := range []int{0, 1, 2, 5, instantiationCountSparse, instantiationCountSparse + 1, 20, 200, 5000} { - hashes := make([]uint64, n) - for i := range hashes { - hashes[i] = rng.Uint64() - } - var want [instantiationCountRegisters]uint8 - wantInverse := uint64(0) - for _, h := range hashes { - i := h >> (64 - instantiationCountIndexBits) - want[i] = max(want[i], min(uint8(bits.LeadingZeros64(h<> 30 - x *= 0xbf58476d1ce4e5b9 - x ^= x >> 27 - x *= 0x94d049bb133111eb - x ^= x >> 31 - return x -} - -func hashCombine(h uint64, v uint64) uint64 { - return hashFinal(h*0x9e3779b97f4a7c15 ^ v) -} - -// typeHashDepth bounds how deep a structural hash looks into a type. Types -// that differ only deeper share a hash. Bounding the depth rather than -// stopping at cycles keeps the hash of a type the same wherever a cycle -// through it is entered, and its cost linear. -const typeHashDepth = 4 - -func (c *Checker) typeHash(t *Type) uint64 { - return c.typeHashAt(t, typeHashDepth) -} - -// typeHashAt returns the structural hash of t, looking depth levels into it. -func (c *Checker) typeHashAt(t *Type, depth int) uint64 { - if t == nil { - return 0 - } - var entry *[typeHashDepth]uint64 - if depth != 0 { - entry = c.typeHashEntry(t) - if entry[depth-1] != 0 { - return entry[depth-1] - } - } - h := hashCombine(hashCombine(uint64(t.kind), uint64(t.flags)), c.symbolHash(t.symbol)) - if depth == 0 { - return h - } - h = hashCombine(h, c.typeHashWorker(t, depth-1)) - if t.alias != nil { - h = hashCombine(h, c.symbolHash(t.alias.symbol)) - h = c.hashTypes(h, t.alias.typeArguments, depth-1) - } - // Zero marks an absent entry. - h |= 1 - entry[depth-1] = h - return h -} - -// typeHashEntry returns the cached hashes of t. Types created by this -// checker's store are keyed by their dense IDs. -func (c *Checker) typeHashEntry(t *Type) *[typeHashDepth]uint64 { - if t.checker == c.root { - return c.typeHashes.Get(uint64(t.id)) - } - entry := c.foreignTypeHashes[t] - if entry == nil { - entry = new([typeHashDepth]uint64) - if c.foreignTypeHashes == nil { - c.foreignTypeHashes = make(map[*Type]*[typeHashDepth]uint64) - } - c.foreignTypeHashes[t] = entry - } - return entry -} - -func (c *Checker) hashTypes(h uint64, types []*Type, depth int) uint64 { - h = hashCombine(h, uint64(len(types))) - for _, t := range types { - h = hashCombine(h, c.typeHashAt(t, depth)) - } - return h -} - -func (c *Checker) typeHashWorker(t *Type, depth int) uint64 { - h := hashCombine(uint64(t.kind), uint64(t.flags)) - switch t.kind { - case typeKindIntrinsic: - h = hashCombine(h, xxh3.HashString(t.AsIntrinsicType().intrinsicName)) - h = hashCombine(h, uint64(t.objectFlags)) - case typeKindLiteral: - lit := t.AsLiteralType() - h = hashCombine(h, hashLiteralValue(lit.value)) - h = hashCombine(h, c.symbolHash(t.symbol)) - if lit.freshType == t { - h = hashCombine(h, 1) - } - case typeKindUniqueESSymbol: - h = hashCombine(h, c.symbolHash(t.symbol)) - case typeKindTypeParameter: - tp := t.AsTypeParameter() - h = hashCombine(h, c.symbolHash(t.symbol)) - if tp.isThisType { - h = hashCombine(h, 1) - } - if tp.isDistributed { - h = hashCombine(h, 2) - } - if tp.target != nil { - h = hashCombine(h, c.typeHashAt(tp.target, depth)) - h = hashCombine(h, c.mapperHashAt(tp.mapper, depth)) - } - case typeKindIndex: - idx := t.AsIndexType() - h = hashCombine(h, c.typeHashAt(idx.target, depth)) - h = hashCombine(h, uint64(idx.indexFlags)) - case typeKindIndexedAccess: - ia := t.AsIndexedAccessType() - h = hashCombine(h, c.typeHashAt(ia.objectType, depth)) - h = hashCombine(h, c.typeHashAt(ia.indexType, depth)) - h = hashCombine(h, uint64(ia.accessFlags)) - case typeKindTemplateLiteral: - tl := t.AsTemplateLiteralType() - for _, text := range tl.texts { - h = hashCombine(h, xxh3.HashString(text)) - } - h = c.hashTypes(h, tl.types, depth) - case typeKindStringMapping: - h = hashCombine(h, c.symbolHash(t.symbol)) - h = hashCombine(h, c.typeHashAt(t.AsStringMappingType().target, depth)) - case typeKindSubstitution: - st := t.AsSubstitutionType() - h = hashCombine(h, c.typeHashAt(st.baseType, depth)) - h = hashCombine(h, c.typeHashAt(st.constraint, depth)) - case typeKindConditional: - ct := t.AsConditionalType() - h = hashCombine(h, c.hashNode(ct.root.node.AsNode())) - h = hashCombine(h, c.mapperHashAt(ct.mapper, depth)) - case typeKindUnion, typeKindIntersection: - // Constituents are ordered by type ID, so they are combined in a way - // that does not depend on their order. - var sum uint64 - for _, m := range t.AsUnionOrIntersectionType().types { - sum += hashFinal(c.typeHashAt(m, depth)) - } - h = hashCombine(h, sum) - case typeKindTuple: - tt := t.AsTupleType() - for _, info := range tt.elementInfos { - h = hashCombine(h, uint64(info.flags)) - h = hashCombine(h, c.hashNode(info.labeledDeclaration)) - } - if tt.readonly { - h = hashCombine(h, 1) - } - case typeKindReverseMapped: - rm := t.AsReverseMappedType() - h = hashCombine(h, c.typeHashAt(rm.source, depth)) - h = hashCombine(h, c.typeHashAt(rm.mappedType, depth)) - h = hashCombine(h, c.typeHashAt(rm.constraintType, depth)) - case typeKindEvolvingArray: - h = hashCombine(h, c.typeHashAt(t.AsEvolvingArrayType().elementType, depth)) - case typeKindTypeReference: - ref := t.AsTypeReference() - h = hashCombine(h, uint64(t.objectFlags)) - h = hashCombine(h, c.typeHashAt(ref.target, depth)) - if ref.node != nil { - h = hashCombine(h, c.hashNode(ref.node)) - h = hashCombine(h, c.mapperHashAt(ref.mapper, depth)) - } else { - h = c.hashTypes(h, ref.resolvedTypeArguments.peek(), depth) - } - default: - // Interfaces, anonymous, mapped, and instantiation expression types. - h = hashCombine(h, uint64(t.objectFlags&ObjectFlagsObjectTypeKindMask)) - h = hashCombine(h, c.symbolHash(t.symbol)) - if t.kind == typeKindMapped { - h = hashCombine(h, c.hashNode(t.AsMappedType().declaration.AsNode())) - } - if t.kind == typeKindInstantiationExpression { - h = hashCombine(h, c.hashNode(t.AsInstantiationExpressionType().node)) - } - if obj := t.AsObjectType(); obj != nil && obj.target != nil { - h = hashCombine(h, c.typeHashAt(obj.target, depth)) - h = hashCombine(h, c.mapperHashAt(obj.mapper, depth)) - } - } - return h -} - -func hashLiteralValue(value any) uint64 { - switch v := value.(type) { - case string: - return hashCombine(1, xxh3.HashString(v)) - case jsnum.Number: - return hashCombine(2, math.Float64bits(float64(v))) - case bool: - if v { - return 3 - } - return 4 - case jsnum.PseudoBigInt: - h := hashCombine(5, xxh3.HashString(v.Base10Value)) - if v.Negative { - h = hashCombine(h, 1) - } - return h - } - return 0 -} - -func (c *Checker) hashNode(node *ast.Node) uint64 { - if node == nil { - return 0 - } - h := hashCombine(uint64(node.Kind), uint64(node.Pos())) - if file := ast.GetSourceFileOfNode(node); file != nil { - h = hashCombine(h, c.fileHash(file)) - } - return h -} - -// fileHash identifies a file by its text rather than its path, so that -// hashes do not depend on where a project is located. -func (c *Checker) fileHash(file *ast.SourceFile) uint64 { - if h, ok := c.fileHashes[file]; ok { - return h - } - h := xxh3.HashString(file.Text()) - if c.fileHashes == nil { - c.fileHashes = make(map[*ast.SourceFile]uint64) - } - c.fileHashes[file] = h - return h -} - -func (c *Checker) symbolHash(s *ast.Symbol) uint64 { - if s == nil { - return 0 - } - cached := c.symbolHashes.Get(s) - if *cached != 0 { - return *cached - } - h := hashCombine(xxh3.HashString(s.Name()), uint64(s.Flags())) - if decls := s.Declarations(); len(decls) != 0 { - h = hashCombine(h, c.hashNode(decls[0])) - } else if s.Parent() != nil { - h = hashCombine(h, c.symbolHash(s.Parent())) - } - // Zero marks an absent entry; a zero hash is merely recomputed. - *c.symbolHashes.Get(s) = h - return h -} - -func (c *Checker) mapperHash(m *TypeMapper) uint64 { - // Mappers are immutable, and one mapper is typically used for many - // instantiations, so its hash is computed once. - // A small direct-mapped cache suffices; a miss only recomputes the hash. - if c.mapperHashes == nil { - c.mapperHashes = new([mapperHashCacheSize]mapperHashCacheEntry) - } - p := uintptr(unsafe.Pointer(m)) - e := &c.mapperHashes[(p^p>>12)>>4&(mapperHashCacheSize-1)] - if e.mapper == m { - return e.hash - } - h := c.mapperHashAt(m, typeHashDepth) - *e = mapperHashCacheEntry{m, h} - return h -} - -const mapperHashCacheSize = 1 << 12 - -type mapperHashCacheEntry struct { - mapper *TypeMapper - hash uint64 -} - -// mapperHashAt returns the structural hash of m, looking depth levels into -// the types it maps. -func (c *Checker) mapperHashAt(m *TypeMapper, depth int) uint64 { - if m == nil { - return 0 - } - h := uint64(m.kind) - if depth == 0 { - return h - } - switch m.kind { - case TypeMapperKindSimple: - sm := castTypeMapper[SimpleTypeMapper](m, TypeMapperKindSimple) - h = hashCombine(h, c.typeHashAt(sm.source, depth)) - h = hashCombine(h, c.typeHashAt(sm.target, depth)) - case TypeMapperKindArray: - am := castTypeMapper[ArrayTypeMapper](m, TypeMapperKindArray) - h = c.hashTypes(h, am.sources, depth) - h = c.hashTypes(h, am.targets, depth) - case TypeMapperKindArrayToSingle: - am := castTypeMapper[ArrayToSingleTypeMapper](m, TypeMapperKindArrayToSingle) - h = c.hashTypes(h, am.sources, depth) - h = hashCombine(h, c.typeHashAt(am.target, depth)) - case TypeMapperKindDeferred: - h = c.hashTypes(h, castTypeMapper[DeferredTypeMapper](m, TypeMapperKindDeferred).sources, depth) - case TypeMapperKindFunction: - // Function mappers are the checker's fixed mappers. - switch m { - case c.uniqueLiteralMapper: - h = hashCombine(h, 1) - case c.reportUnreliableMapper: - h = hashCombine(h, 2) - case c.reportUnmeasurableMapper: - h = hashCombine(h, 3) - case c.restrictiveMapper: - h = hashCombine(h, 4) - case c.permissiveMapper: - h = hashCombine(h, 5) - } - case TypeMapperKindMerged: - mm := castTypeMapper[MergedTypeMapper](m, TypeMapperKindMerged) - h = hashCombine(h, c.mapperHashAt(mm.m1, depth-1)) - h = hashCombine(h, c.mapperHashAt(mm.m2, depth-1)) - case TypeMapperKindComposite: - cm := castTypeMapper[CompositeTypeMapper](m, TypeMapperKindComposite) - h = hashCombine(h, c.mapperHashAt(cm.m1, depth-1)) - h = hashCombine(h, c.mapperHashAt(cm.m2, depth-1)) - case TypeMapperKindInference: - im := castTypeMapper[InferenceTypeMapper](m, TypeMapperKindInference) - for _, inference := range im.n.inferences { - h = hashCombine(h, c.typeHashAt(inference.typeParameter, depth)) - } - if im.fixing { - h = hashCombine(h, 1) - } - } - return h -} diff --git a/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.errors.txt b/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.errors.txt index 798a91745a9c4..69dd6c2b622df 100644 --- a/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.errors.txt @@ -1,11 +1,11 @@ -instantiationLimitsCheckOrder.ts(10,16): error TS2589: Type instantiation is excessively deep and possibly infinite. -instantiationLimitsCheckOrder.ts(16,17): error TS2589: Type instantiation is excessively deep and possibly infinite. +instantiationLimitsCheckOrder.ts(11,16): error TS2589: Type instantiation is excessively deep and possibly infinite. -==== instantiationLimitsCheckOrder.ts (2 errors) ==== - // Instantiation limits must not depend on what was instantiated before: - // Wide2All reaches the limit on the number of instantiations like WideAll, - // although Wide2Tail already performed half of them. +==== instantiationLimitsCheckOrder.ts (1 errors) ==== + // The depth limit on instantiations must not depend on what was + // instantiated before. The limit on the number of instantiations does, as + // it only stops runaway instantiations, so it is only tested for a single + // statement whose work nothing else shares. type D = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; type K = `${D}${D}${D}`; @@ -16,14 +16,6 @@ instantiationLimitsCheckOrder.ts(16,17): error TS2589: Type instantiation is exc ~~~~~~~~~~~~ !!! error TS2589: Type instantiation is excessively deep and possibly infinite. - // The same, but half of the instantiations already happened for another - // statement. - type Wide2 = N["length"] extends 8 ? I : { [J in K]: Wide2<[...N, 0], [J, I][0]> }[K]; - type Wide2Tail = Wide2<[0, 0, 0, 0], "">; - type Wide2All = Wide2<[], "">; - ~~~~~~~~~~~~~ -!!! error TS2589: Type instantiation is excessively deep and possibly infinite. - // Over a hundred nested instantiations, half of which already happened for // another statement. type Deep = N["length"] extends 60 ? never : Deep<[...N, 0]> | N["length"]; diff --git a/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.symbols b/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.symbols index ce51d4d0cffbf..c49f0e567e06e 100644 --- a/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.symbols +++ b/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.symbols @@ -1,77 +1,54 @@ //// [tests/cases/compiler/instantiationLimitsCheckOrder.ts] //// === instantiationLimitsCheckOrder.ts === -// Instantiation limits must not depend on what was instantiated before: -// Wide2All reaches the limit on the number of instantiations like WideAll, -// although Wide2Tail already performed half of them. +// The depth limit on instantiations must not depend on what was +// instantiated before. The limit on the number of instantiations does, as +// it only stops runaway instantiations, so it is only tested for a single +// statement whose work nothing else shares. type D = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; >D : Symbol(D, Decl(instantiationLimitsCheckOrder.ts, 0, 0)) type K = `${D}${D}${D}`; ->K : Symbol(K, Decl(instantiationLimitsCheckOrder.ts, 4, 47)) +>K : Symbol(K, Decl(instantiationLimitsCheckOrder.ts, 5, 47)) >D : Symbol(D, Decl(instantiationLimitsCheckOrder.ts, 0, 0)) >D : Symbol(D, Decl(instantiationLimitsCheckOrder.ts, 0, 0)) >D : Symbol(D, Decl(instantiationLimitsCheckOrder.ts, 0, 0)) // Several million instantiations, well over the limit, for one statement. type Wide = N["length"] extends 8 ? I : { [J in K]: Wide<[...N, 0], [J, I][0]> }[K]; ->Wide : Symbol(Wide, Decl(instantiationLimitsCheckOrder.ts, 5, 24)) ->N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 8, 10)) ->I : Symbol(I, Decl(instantiationLimitsCheckOrder.ts, 8, 24)) ->N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 8, 10)) ->I : Symbol(I, Decl(instantiationLimitsCheckOrder.ts, 8, 24)) ->J : Symbol(J, Decl(instantiationLimitsCheckOrder.ts, 8, 61)) ->K : Symbol(K, Decl(instantiationLimitsCheckOrder.ts, 4, 47)) ->Wide : Symbol(Wide, Decl(instantiationLimitsCheckOrder.ts, 5, 24)) ->N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 8, 10)) ->J : Symbol(J, Decl(instantiationLimitsCheckOrder.ts, 8, 61)) ->I : Symbol(I, Decl(instantiationLimitsCheckOrder.ts, 8, 24)) ->K : Symbol(K, Decl(instantiationLimitsCheckOrder.ts, 4, 47)) +>Wide : Symbol(Wide, Decl(instantiationLimitsCheckOrder.ts, 6, 24)) +>N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 9, 10)) +>I : Symbol(I, Decl(instantiationLimitsCheckOrder.ts, 9, 24)) +>N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 9, 10)) +>I : Symbol(I, Decl(instantiationLimitsCheckOrder.ts, 9, 24)) +>J : Symbol(J, Decl(instantiationLimitsCheckOrder.ts, 9, 61)) +>K : Symbol(K, Decl(instantiationLimitsCheckOrder.ts, 5, 47)) +>Wide : Symbol(Wide, Decl(instantiationLimitsCheckOrder.ts, 6, 24)) +>N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 9, 10)) +>J : Symbol(J, Decl(instantiationLimitsCheckOrder.ts, 9, 61)) +>I : Symbol(I, Decl(instantiationLimitsCheckOrder.ts, 9, 24)) +>K : Symbol(K, Decl(instantiationLimitsCheckOrder.ts, 5, 47)) type WideAll = Wide<[], "">; ->WideAll : Symbol(WideAll, Decl(instantiationLimitsCheckOrder.ts, 8, 102)) ->Wide : Symbol(Wide, Decl(instantiationLimitsCheckOrder.ts, 5, 24)) - -// The same, but half of the instantiations already happened for another -// statement. -type Wide2 = N["length"] extends 8 ? I : { [J in K]: Wide2<[...N, 0], [J, I][0]> }[K]; ->Wide2 : Symbol(Wide2, Decl(instantiationLimitsCheckOrder.ts, 9, 28)) ->N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 13, 11)) ->I : Symbol(I, Decl(instantiationLimitsCheckOrder.ts, 13, 25)) ->N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 13, 11)) ->I : Symbol(I, Decl(instantiationLimitsCheckOrder.ts, 13, 25)) ->J : Symbol(J, Decl(instantiationLimitsCheckOrder.ts, 13, 62)) ->K : Symbol(K, Decl(instantiationLimitsCheckOrder.ts, 4, 47)) ->Wide2 : Symbol(Wide2, Decl(instantiationLimitsCheckOrder.ts, 9, 28)) ->N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 13, 11)) ->J : Symbol(J, Decl(instantiationLimitsCheckOrder.ts, 13, 62)) ->I : Symbol(I, Decl(instantiationLimitsCheckOrder.ts, 13, 25)) ->K : Symbol(K, Decl(instantiationLimitsCheckOrder.ts, 4, 47)) - -type Wide2Tail = Wide2<[0, 0, 0, 0], "">; ->Wide2Tail : Symbol(Wide2Tail, Decl(instantiationLimitsCheckOrder.ts, 13, 104)) ->Wide2 : Symbol(Wide2, Decl(instantiationLimitsCheckOrder.ts, 9, 28)) - -type Wide2All = Wide2<[], "">; ->Wide2All : Symbol(Wide2All, Decl(instantiationLimitsCheckOrder.ts, 14, 41)) ->Wide2 : Symbol(Wide2, Decl(instantiationLimitsCheckOrder.ts, 9, 28)) +>WideAll : Symbol(WideAll, Decl(instantiationLimitsCheckOrder.ts, 9, 102)) +>Wide : Symbol(Wide, Decl(instantiationLimitsCheckOrder.ts, 6, 24)) // Over a hundred nested instantiations, half of which already happened for // another statement. type Deep = N["length"] extends 60 ? never : Deep<[...N, 0]> | N["length"]; ->Deep : Symbol(Deep, Decl(instantiationLimitsCheckOrder.ts, 15, 30)) ->N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 19, 10)) ->N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 19, 10)) ->Deep : Symbol(Deep, Decl(instantiationLimitsCheckOrder.ts, 15, 30)) ->N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 19, 10)) ->N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 19, 10)) +>Deep : Symbol(Deep, Decl(instantiationLimitsCheckOrder.ts, 10, 28)) +>N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 14, 10)) +>N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 14, 10)) +>Deep : Symbol(Deep, Decl(instantiationLimitsCheckOrder.ts, 10, 28)) +>N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 14, 10)) +>N : Symbol(N, Decl(instantiationLimitsCheckOrder.ts, 14, 10)) type DeepTail = Deep<[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]>; ->DeepTail : Symbol(DeepTail, Decl(instantiationLimitsCheckOrder.ts, 19, 90)) ->Deep : Symbol(Deep, Decl(instantiationLimitsCheckOrder.ts, 15, 30)) +>DeepTail : Symbol(DeepTail, Decl(instantiationLimitsCheckOrder.ts, 14, 90)) +>Deep : Symbol(Deep, Decl(instantiationLimitsCheckOrder.ts, 10, 28)) type DeepAll = Deep<[]>; ->DeepAll : Symbol(DeepAll, Decl(instantiationLimitsCheckOrder.ts, 20, 113)) ->Deep : Symbol(Deep, Decl(instantiationLimitsCheckOrder.ts, 15, 30)) +>DeepAll : Symbol(DeepAll, Decl(instantiationLimitsCheckOrder.ts, 15, 113)) +>Deep : Symbol(Deep, Decl(instantiationLimitsCheckOrder.ts, 10, 28)) diff --git a/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.types b/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.types index a264ec296ddc5..5227b6c530923 100644 --- a/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.types +++ b/tsc/testdata/baselines/reference/compiler/instantiationLimitsCheckOrder.types @@ -1,9 +1,10 @@ //// [tests/cases/compiler/instantiationLimitsCheckOrder.ts] //// === instantiationLimitsCheckOrder.ts === -// Instantiation limits must not depend on what was instantiated before: -// Wide2All reaches the limit on the number of instantiations like WideAll, -// although Wide2Tail already performed half of them. +// The depth limit on instantiations must not depend on what was +// instantiated before. The limit on the number of instantiations does, as +// it only stops runaway instantiations, so it is only tested for a single +// statement whose work nothing else shares. type D = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; >D : D @@ -18,17 +19,6 @@ type Wide = N["length"] extends 8 ? I : { [J in K]: Wide<[...N type WideAll = Wide<[], "">; >WideAll : any -// The same, but half of the instantiations already happened for another -// statement. -type Wide2 = N["length"] extends 8 ? I : { [J in K]: Wide2<[...N, 0], [J, I][0]> }[K]; ->Wide2 : Wide2 - -type Wide2Tail = Wide2<[0, 0, 0, 0], "">; ->Wide2Tail : "000" | "001" | "002" | "003" | "004" | "005" | "006" | "007" | "008" | "009" | "010" | "011" | "012" | "013" | "014" | "015" | "016" | "017" | "018" | "019" | "020" | "021" | "022" | "023" | "024" | "025" | "026" | "027" | "028" | "029" | "030" | "031" | "032" | "033" | "034" | "035" | "036" | "037" | "038" | "039" | "040" | "041" | "042" | "043" | "044" | "045" | "046" | "047" | "048" | "049" | "050" | "051" | "052" | "053" | "054" | "055" | "056" | "057" | "058" | "059" | "060" | "061" | "062" | "063" | "064" | "065" | "066" | "067" | "068" | "069" | "070" | "071" | "072" | "073" | "074" | "075" | "076" | "077" | "078" | "079" | "080" | "081" | "082" | "083" | "084" | "085" | "086" | "087" | "088" | "089" | "090" | "091" | "092" | "093" | "094" | "095" | "096" | "097" | "098" | "099" | "100" | "101" | "102" | "103" | "104" | "105" | "106" | "107" | "108" | "109" | "110" | "111" | "112" | "113" | "114" | "115" | "116" | "117" | "118" | "119" | "120" | "121" | "122" | "123" | "124" | "125" | "126" | "127" | "128" | "129" | "130" | "131" | "132" | "133" | "134" | "135" | "136" | "137" | "138" | "139" | "140" | "141" | "142" | "143" | "144" | "145" | "146" | "147" | "148" | "149" | "150" | "151" | "152" | "153" | "154" | "155" | "156" | "157" | "158" | "159" | "160" | "161" | "162" | "163" | "164" | "165" | "166" | "167" | "168" | "169" | "170" | "171" | "172" | "173" | "174" | "175" | "176" | "177" | "178" | "179" | "180" | "181" | "182" | "183" | "184" | "185" | "186" | "187" | "188" | "189" | "190" | "191" | "192" | "193" | "194" | "195" | "196" | "197" | "198" | "199" | "200" | "201" | "202" | "203" | "204" | "205" | "206" | "207" | "208" | "209" | "210" | "211" | "212" | "213" | "214" | "215" | "216" | "217" | "218" | "219" | "220" | "221" | "222" | "223" | "224" | "225" | "226" | "227" | "228" | "229" | "230" | "231" | "232" | "233" | "234" | "235" | "236" | "237" | "238" | "239" | "240" | "241" | "242" | "243" | "244" | "245" | "246" | "247" | "248" | "249" | "250" | "251" | "252" | "253" | "254" | "255" | "256" | "257" | "258" | "259" | "260" | "261" | "262" | "263" | "264" | "265" | "266" | "267" | "268" | "269" | "270" | "271" | "272" | "273" | "274" | "275" | "276" | "277" | "278" | "279" | "280" | "281" | "282" | "283" | "284" | "285" | "286" | "287" | "288" | "289" | "290" | "291" | "292" | "293" | "294" | "295" | "296" | "297" | "298" | "299" | "300" | "301" | "302" | "303" | "304" | "305" | "306" | "307" | "308" | "309" | "310" | "311" | "312" | "313" | "314" | "315" | "316" | "317" | "318" | "319" | "320" | "321" | "322" | "323" | "324" | "325" | "326" | "327" | "328" | "329" | "330" | "331" | "332" | "333" | "334" | "335" | "336" | "337" | "338" | "339" | "340" | "341" | "342" | "343" | "344" | "345" | "346" | "347" | "348" | "349" | "350" | "351" | "352" | "353" | "354" | "355" | "356" | "357" | "358" | "359" | "360" | "361" | "362" | "363" | "364" | "365" | "366" | "367" | "368" | "369" | "370" | "371" | "372" | "373" | "374" | "375" | "376" | "377" | "378" | "379" | "380" | "381" | "382" | "383" | "384" | "385" | "386" | "387" | "388" | "389" | "390" | "391" | "392" | "393" | "394" | "395" | "396" | "397" | "398" | "399" | "400" | "401" | "402" | "403" | "404" | "405" | "406" | "407" | "408" | "409" | "410" | "411" | "412" | "413" | "414" | "415" | "416" | "417" | "418" | "419" | "420" | "421" | "422" | "423" | "424" | "425" | "426" | "427" | "428" | "429" | "430" | "431" | "432" | "433" | "434" | "435" | "436" | "437" | "438" | "439" | "440" | "441" | "442" | "443" | "444" | "445" | "446" | "447" | "448" | "449" | "450" | "451" | "452" | "453" | "454" | "455" | "456" | "457" | "458" | "459" | "460" | "461" | "462" | "463" | "464" | "465" | "466" | "467" | "468" | "469" | "470" | "471" | "472" | "473" | "474" | "475" | "476" | "477" | "478" | "479" | "480" | "481" | "482" | "483" | "484" | "485" | "486" | "487" | "488" | "489" | "490" | "491" | "492" | "493" | "494" | "495" | "496" | "497" | "498" | "499" | "500" | "501" | "502" | "503" | "504" | "505" | "506" | "507" | "508" | "509" | "510" | "511" | "512" | "513" | "514" | "515" | "516" | "517" | "518" | "519" | "520" | "521" | "522" | "523" | "524" | "525" | "526" | "527" | "528" | "529" | "530" | "531" | "532" | "533" | "534" | "535" | "536" | "537" | "538" | "539" | "540" | "541" | "542" | "543" | "544" | "545" | "546" | "547" | "548" | "549" | "550" | "551" | "552" | "553" | "554" | "555" | "556" | "557" | "558" | "559" | "560" | "561" | "562" | "563" | "564" | "565" | "566" | "567" | "568" | "569" | "570" | "571" | "572" | "573" | "574" | "575" | "576" | "577" | "578" | "579" | "580" | "581" | "582" | "583" | "584" | "585" | "586" | "587" | "588" | "589" | "590" | "591" | "592" | "593" | "594" | "595" | "596" | "597" | "598" | "599" | "600" | "601" | "602" | "603" | "604" | "605" | "606" | "607" | "608" | "609" | "610" | "611" | "612" | "613" | "614" | "615" | "616" | "617" | "618" | "619" | "620" | "621" | "622" | "623" | "624" | "625" | "626" | "627" | "628" | "629" | "630" | "631" | "632" | "633" | "634" | "635" | "636" | "637" | "638" | "639" | "640" | "641" | "642" | "643" | "644" | "645" | "646" | "647" | "648" | "649" | "650" | "651" | "652" | "653" | "654" | "655" | "656" | "657" | "658" | "659" | "660" | "661" | "662" | "663" | "664" | "665" | "666" | "667" | "668" | "669" | "670" | "671" | "672" | "673" | "674" | "675" | "676" | "677" | "678" | "679" | "680" | "681" | "682" | "683" | "684" | "685" | "686" | "687" | "688" | "689" | "690" | "691" | "692" | "693" | "694" | "695" | "696" | "697" | "698" | "699" | "700" | "701" | "702" | "703" | "704" | "705" | "706" | "707" | "708" | "709" | "710" | "711" | "712" | "713" | "714" | "715" | "716" | "717" | "718" | "719" | "720" | "721" | "722" | "723" | "724" | "725" | "726" | "727" | "728" | "729" | "730" | "731" | "732" | "733" | "734" | "735" | "736" | "737" | "738" | "739" | "740" | "741" | "742" | "743" | "744" | "745" | "746" | "747" | "748" | "749" | "750" | "751" | "752" | "753" | "754" | "755" | "756" | "757" | "758" | "759" | "760" | "761" | "762" | "763" | "764" | "765" | "766" | "767" | "768" | "769" | "770" | "771" | "772" | "773" | "774" | "775" | "776" | "777" | "778" | "779" | "780" | "781" | "782" | "783" | "784" | "785" | "786" | "787" | "788" | "789" | "790" | "791" | "792" | "793" | "794" | "795" | "796" | "797" | "798" | "799" | "800" | "801" | "802" | "803" | "804" | "805" | "806" | "807" | "808" | "809" | "810" | "811" | "812" | "813" | "814" | "815" | "816" | "817" | "818" | "819" | "820" | "821" | "822" | "823" | "824" | "825" | "826" | "827" | "828" | "829" | "830" | "831" | "832" | "833" | "834" | "835" | "836" | "837" | "838" | "839" | "840" | "841" | "842" | "843" | "844" | "845" | "846" | "847" | "848" | "849" | "850" | "851" | "852" | "853" | "854" | "855" | "856" | "857" | "858" | "859" | "860" | "861" | "862" | "863" | "864" | "865" | "866" | "867" | "868" | "869" | "870" | "871" | "872" | "873" | "874" | "875" | "876" | "877" | "878" | "879" | "880" | "881" | "882" | "883" | "884" | "885" | "886" | "887" | "888" | "889" | "890" | "891" | "892" | "893" | "894" | "895" | "896" | "897" | "898" | "899" | "900" | "901" | "902" | "903" | "904" | "905" | "906" | "907" | "908" | "909" | "910" | "911" | "912" | "913" | "914" | "915" | "916" | "917" | "918" | "919" | "920" | "921" | "922" | "923" | "924" | "925" | "926" | "927" | "928" | "929" | "930" | "931" | "932" | "933" | "934" | "935" | "936" | "937" | "938" | "939" | "940" | "941" | "942" | "943" | "944" | "945" | "946" | "947" | "948" | "949" | "950" | "951" | "952" | "953" | "954" | "955" | "956" | "957" | "958" | "959" | "960" | "961" | "962" | "963" | "964" | "965" | "966" | "967" | "968" | "969" | "970" | "971" | "972" | "973" | "974" | "975" | "976" | "977" | "978" | "979" | "980" | "981" | "982" | "983" | "984" | "985" | "986" | "987" | "988" | "989" | "990" | "991" | "992" | "993" | "994" | "995" | "996" | "997" | "998" | "999" - -type Wide2All = Wide2<[], "">; ->Wide2All : any - // Over a hundred nested instantiations, half of which already happened for // another statement. type Deep = N["length"] extends 60 ? never : Deep<[...N, 0]> | N["length"]; diff --git a/tsc/testdata/tests/cases/compiler/instantiationLimitsCheckOrder.ts b/tsc/testdata/tests/cases/compiler/instantiationLimitsCheckOrder.ts index 82102e539c51b..d20851bc88553 100644 --- a/tsc/testdata/tests/cases/compiler/instantiationLimitsCheckOrder.ts +++ b/tsc/testdata/tests/cases/compiler/instantiationLimitsCheckOrder.ts @@ -1,8 +1,9 @@ // @noEmit: true -// Instantiation limits must not depend on what was instantiated before: -// Wide2All reaches the limit on the number of instantiations like WideAll, -// although Wide2Tail already performed half of them. +// The depth limit on instantiations must not depend on what was +// instantiated before. The limit on the number of instantiations does, as +// it only stops runaway instantiations, so it is only tested for a single +// statement whose work nothing else shares. type D = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; type K = `${D}${D}${D}`; @@ -11,12 +12,6 @@ type K = `${D}${D}${D}`; type Wide = N["length"] extends 8 ? I : { [J in K]: Wide<[...N, 0], [J, I][0]> }[K]; type WideAll = Wide<[], "">; -// The same, but half of the instantiations already happened for another -// statement. -type Wide2 = N["length"] extends 8 ? I : { [J in K]: Wide2<[...N, 0], [J, I][0]> }[K]; -type Wide2Tail = Wide2<[0, 0, 0, 0], "">; -type Wide2All = Wide2<[], "">; - // Over a hundred nested instantiations, half of which already happened for // another statement. type Deep = N["length"] extends 60 ? never : Deep<[...N, 0]> | N["length"]; From 67ff383c666c7b531ac6e84125c45c904767d82f Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 08:01:51 -0700 Subject: [PATCH 111/194] Check nodes without a resolution of their own Each checked statement, expression and deferred node pushed a resolution of its own, only so that it had its own instantiation count. Now that the count is a plain counter reset at the start of each of them, the node's resolution only added a push and a pop to every check of a node, so reset the counter there instead. The resolution for the current node, which delimits the results that errors located at the node depend on, is unchanged. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 9 +++------ tsc/internal/checker/resolutions.go | 6 ++---- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 8869ec7e34787..98450d540b9b0 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -2474,9 +2474,8 @@ func (c *Checker) checkSourceElement(node *ast.Node) bool { if node != nil { saveCurrentNode := c.enterCurrentNode(node) saveWithinUnreachableCode := c.withinUnreachableCode - c.beginNodeResolution() + c.instantiationCount = 0 c.checkSourceElementWorker(node) - c.endResolution() c.exitCurrentNode(saveCurrentNode) c.withinUnreachableCode = saveWithinUnreachableCode } @@ -2716,7 +2715,7 @@ func (c *Checker) checkDeferredNode(node *ast.Node) { defer tr.Push(tracing.PhaseCheck, "checkDeferredNode", map[string]any{"kind": node.Kind, "pos": node.Pos(), "end": node.End(), "path": ast.GetSourceFileOfNode(node).FileName()}, false)() } saveCurrentNode := c.enterCurrentNode(node) - c.beginNodeResolution() + c.instantiationCount = 0 switch node.Kind { case ast.KindCallExpression, ast.KindNewExpression, ast.KindTaggedTemplateExpression, ast.KindDecorator, ast.KindJsxOpeningElement: // These node kinds are deferred checked when overload resolution fails. To save on work, @@ -2745,7 +2744,6 @@ func (c *Checker) checkDeferredNode(node *ast.Node) { case ast.KindObjectLiteralExpression, ast.KindJsxAttributes: c.checkContextualDeprecations(node) } - c.endResolution() c.exitCurrentNode(saveCurrentNode) } @@ -7958,13 +7956,12 @@ func (c *Checker) checkExpressionEx(node *ast.Node, checkMode CheckMode) *Type { defer tr.Push(tracing.PhaseCheck, "checkExpression", map[string]any{"kind": node.Kind, "pos": node.Pos(), "end": node.End(), "path": ast.GetSourceFileOfNode(node).FileName()}, false)() } saveCurrentNode := c.enterCurrentNode(node) - c.beginNodeResolution() + c.instantiationCount = 0 uninstantiatedType := c.checkExpressionWorker(node, checkMode) t := c.instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, checkMode) if isConstEnumObjectType(t) { c.checkConstEnumAccess(node, t) } - c.endResolution() c.exitCurrentNode(saveCurrentNode) return t } diff --git a/tsc/internal/checker/resolutions.go b/tsc/internal/checker/resolutions.go index c3f31bd8ddbbc..9ed69e7a8c1e9 100644 --- a/tsc/internal/checker/resolutions.go +++ b/tsc/internal/checker/resolutions.go @@ -79,11 +79,9 @@ func (c *Checker) beginResolution(source memoStateSource, index int) { c.appendResolution(0, source, index, int32(len(c.instantiationStack))) } -// beginNodeResolution starts a resolution for checking a node, which -// continues the depth limit of the enclosing resolution and starts the count -// of instantiations again. +// beginNodeResolution starts a resolution that is not a computation, which +// continues the depth limit of the enclosing resolution. func (c *Checker) beginNodeResolution() { - c.instantiationCount = 0 c.appendResolution(0, nil, 0, c.currentResolution().depthStart) } From 38ee10f7f6b604853bedcba652863ace9ec80893 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 08:23:15 -0700 Subject: [PATCH 112/194] Begin a comparison's computation on its first cached pair Every comparison began a memo computation keyed by the relation key of its outermost pair, so that results it caches carry the effects of the whole comparison. That meant computing the key and pushing a frame for each one, yet most comparisons settle on quick checks and never reach recursiveTypeRelatedTo, the only place results are cached. Begin the computation, computing the key if the caller did not, on the first call to recursiveTypeRelatedTo instead. Work done before then cannot affect a cached result other than through the types compared, so it belongs with the caller like any other uncached call. The cached entry for the outermost pair is read when the computation begins, since a nested comparison may have cached it in the meantime. PERF-PLACEHOLDER --- tsc/internal/checker/relater.go | 64 ++++++++++++++++++++++++--------- 1 file changed, 48 insertions(+), 16 deletions(-) diff --git a/tsc/internal/checker/relater.go b/tsc/internal/checker/relater.go index 6086e3789cc3e..52250071359b8 100644 --- a/tsc/internal/checker/relater.go +++ b/tsc/internal/checker/relater.go @@ -203,7 +203,7 @@ func (c *Checker) isTypeRelatedTo(source *Type, target *Type, relation *Relation if related != RelationComparisonResultNone && related&RelationComparisonResultOverflow == 0 { return related&RelationComparisonResultSucceeded != 0 } - return c.checkTypeRelatedToWithKey(source, target, relation, nil /*errorNode*/, nil, nil, id, constrained, related) + return c.checkTypeRelatedToWithKey(source, target, relation, nil /*errorNode*/, nil, nil, true, id, constrained, related) } if source.flags&TypeFlagsStructuredOrInstantiable != 0 || target.flags&TypeFlagsStructuredOrInstantiable != 0 { return c.checkTypeRelatedTo(source, target, relation, nil /*errorNode*/) @@ -381,13 +381,12 @@ func (c *Checker) checkTypeRelatedToEx( headMessage *diagnostics.Message, diagnosticOutput *[]*ast.Diagnostic, ) bool { - id, constrained := c.getRelationKey(source, target, IntersectionStateNone, relation == c.identityRelation, false /*ignoreConstraints*/) - return c.checkTypeRelatedToWithKey(source, target, relation, errorNode, headMessage, diagnosticOutput, id, constrained, relation.get(c, id)) + return c.checkTypeRelatedToWithKey(source, target, relation, errorNode, headMessage, diagnosticOutput, false, CacheHashKey{}, false, RelationComparisonResultNone) } -// checkTypeRelatedToWithKey is checkTypeRelatedToEx given the relation key -// of source and target, as returned by getRelationKey, and the result cached -// under it. +// checkTypeRelatedToWithKey is checkTypeRelatedToEx given, if hasKey, the +// relation key of source and target, as returned by getRelationKey, and the +// result cached under it. func (c *Checker) checkTypeRelatedToWithKey( source *Type, target *Type, @@ -395,6 +394,7 @@ func (c *Checker) checkTypeRelatedToWithKey( errorNode *ast.Node, headMessage *diagnostics.Message, diagnosticOutput *[]*ast.Diagnostic, + hasKey bool, id CacheHashKey, constrained bool, entry RelationComparisonResult, @@ -405,23 +405,23 @@ func (c *Checker) checkTypeRelatedToWithKey( // The budget does not depend on how many results are cached, so that whether // a comparison overflows does not depend on what was compared before it. r.relationCount = relationCountLimit - // The comparison is a computation of its own, so that reusing any result it - // caches accounts for the effects of the whole comparison. Errors are - // reported after it, since they belong to the caller rather than the result. - r.topSource, r.topTarget, r.topKey, r.topConstrained = source, target, id, constrained - r.topEntry, r.topEntryValid = entry, true + r.topSource, r.topTarget = source, target + if hasKey { + r.topKey, r.topConstrained, r.topHasKey = id, constrained, true + } var result Ternary if entry&RelationComparisonResultOverflow != 0 { // The comparison overflowed before, and would again. r.overflow = true } else { - relation.results.begin(c, id) result = r.isRelatedToEx(source, target, RecursionFlagsBoth, errorNode != nil /*reportErrors*/, headMessage, IntersectionStateNone) - if r.overflow { - // Record this relation as having failed such that we don't attempt the overflowing operation again. - relation.set(c, id, RelationComparisonResultFailed|RelationComparisonResultComplexityOverflow) + if r.topBegun { + if r.overflow { + // Record this relation as having failed such that we don't attempt the overflowing operation again. + relation.set(c, r.topKey, RelationComparisonResultFailed|RelationComparisonResultComplexityOverflow) + } + c.endMemo() } - c.endMemo() } if r.overflow { if tr := c.tracer; tr != nil { @@ -2931,6 +2931,8 @@ type Relater struct { topConstrained bool topEntry RelationComparisonResult // The result cached for topKey when the comparison began topEntryValid bool // Whether topEntry is unused, and so still the cached result + topHasKey bool // Whether topKey and topConstrained are known + topBegun bool // Whether the comparison began its computation; see beginTop sourceStack []*Type targetStack []*Type // sourceDepths and targetDepths are the depths of the comparisons that @@ -2965,6 +2967,33 @@ type maybeKey struct { truncated bool } +// beginTop makes the outermost comparison a computation of its own, so that +// reusing any result it caches accounts for the effects of the whole +// comparison. Errors are reported after it, since they belong to the caller +// rather than the result. Only recursiveTypeRelatedTo caches results, so the +// comparison begins on its first call there, and most comparisons, which +// finish before, need neither the computation nor the relation key. What the +// comparison did before then cannot affect a result it caches other than +// through the types it compares. beginTop returns false if the comparison +// overflowed before, and would again. +func (r *Relater) beginTop() bool { + r.topBegun = true + c := r.c + if !r.topHasKey { + r.topKey, r.topConstrained = c.getRelationKey(r.topSource, r.topTarget, IntersectionStateNone, r.relation == c.identityRelation, false /*ignoreConstraints*/) + r.topHasKey = true + } + // A comparison made before now may have cached a result for the key. + r.topEntry, r.topEntryValid = r.relation.get(c, r.topKey), true + if r.topEntry&RelationComparisonResultOverflow != 0 { + r.topBegun = false + r.overflow = true + return false + } + r.relation.results.begin(c, r.topKey) + return true +} + func (c *Checker) getRelater() *Relater { r := c.freeRelater if r == nil { @@ -3487,6 +3516,9 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError // important to have well-defined behavior even in cases that shouldn't normally occur. return TernaryFalse } + if !r.topBegun && !r.beginTop() { + return TernaryFalse + } var id CacheHashKey var constrained bool var entry RelationComparisonResult From 88242ea1f4045423a682f4831eda8ba69535fdc3 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 08:33:01 -0700 Subject: [PATCH 113/194] Reset a pooled relater field by field putRelater reset a relater by assigning a whole new Relater, which the compiler does by building one on the stack and copying it over, for every comparison. The struct has grown with the fields that track the outermost comparison and the depths of the stacks, so the copy is now a noticeable part of each comparison. Reset the fields one at a time, and clear the set of maybe keys only when it has entries. PERF-PLACEHOLDER --- tsc/internal/checker/relater.go | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/tsc/internal/checker/relater.go b/tsc/internal/checker/relater.go index 52250071359b8..ba9f0f09320b6 100644 --- a/tsc/internal/checker/relater.go +++ b/tsc/internal/checker/relater.go @@ -3004,17 +3004,25 @@ func (c *Checker) getRelater() *Relater { } func (c *Checker) putRelater(r *Relater) { - clear(r.maybeKeysSet) - *r = Relater{ - c: c, - maybeKeys: r.maybeKeys[:0], - maybeKeysSet: r.maybeKeysSet, - sourceStack: r.sourceStack[:0], - targetStack: r.targetStack[:0], - sourceDepths: r.sourceDepths[:0], - targetDepths: r.targetDepths[:0], - next: c.freeRelater, - } + if len(r.maybeKeysSet) != 0 { + clear(r.maybeKeysSet) + } + // Reset field by field, which is cheaper than assigning a whole Relater. + r.relation = nil + r.errorNode = nil + r.errorChain = nil + r.relatedInfo = nil + r.maybeKeys = r.maybeKeys[:0] + r.sourceStack, r.targetStack = r.sourceStack[:0], r.targetStack[:0] + r.sourceDepths, r.targetDepths = r.sourceDepths[:0], r.targetDepths[:0] + r.depth, r.low, r.truncated = 0, 0, false + r.topSource, r.topTarget = nil, nil + r.topKey, r.topConstrained = CacheHashKey{}, false + r.topEntry, r.topEntryValid, r.topHasKey, r.topBegun = RelationComparisonResultNone, false, false, false + r.expandingFlags, r.expandingSourceDepth, r.expandingTargetDepth = ExpandingFlagsNone, 0, 0 + r.overflow = false + r.relationCount = 0 + r.next = c.freeRelater c.freeRelater = r } From 6ae0f5392191be072712da9ed2b9c95e20a6892d Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 08:44:20 -0700 Subject: [PATCH 114/194] Look up links without giving out ids TryGet on the node and symbol link stores assigned an id to an entity just to find that it had no links. A node or symbol without an id has no links in any store, so a lookup can stop there instead. This also means that reading links no longer changes anything, which keeps id assignment tied to the writes that need it. PERF-PLACEHOLDER --- tsc/internal/ast/utilities.go | 10 ++++++++++ tsc/internal/checker/links.go | 14 ++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/tsc/internal/ast/utilities.go b/tsc/internal/ast/utilities.go index f178903372dc2..d029159e971d3 100644 --- a/tsc/internal/ast/utilities.go +++ b/tsc/internal/ast/utilities.go @@ -33,6 +33,16 @@ func GetNodeId(node *Node) NodeId { return NodeId(id) } +// PeekNodeId returns the id of node, or 0 if it has none yet. +func PeekNodeId(node *Node) NodeId { + return NodeId(node.id.Load()) +} + +// PeekSymbolId returns the id of symbol, or 0 if it has none yet. +func PeekSymbolId(symbol *Symbol) SymbolId { + return SymbolId(symbol.id.Load()) +} + func GetSymbolId(symbol *Symbol) SymbolId { id := symbol.id.Load() if id == 0 { diff --git a/tsc/internal/checker/links.go b/tsc/internal/checker/links.go index c21981cae9d80..e7a92438685bf 100644 --- a/tsc/internal/checker/links.go +++ b/tsc/internal/checker/links.go @@ -31,8 +31,13 @@ func (s *nodeLinkStore[V]) Has(node *ast.Node) bool { return s.TryGet(node) != nil } +// TryGet returns the links of node, or nil if it has none. A node without +// an id has no links, and looking it up does not give it one. func (s *nodeLinkStore[V]) TryGet(node *ast.Node) *V { - id := uint64(s.gen.GetNodeId(node)) + id := uint64(ast.PeekNodeId(node)) + if id == 0 { + return nil + } if id >= ast.BlockIdOffset && id < ast.BlockIdOffset+maxPageLinkCount { return s.pages.TryGet(id - ast.BlockIdOffset) } @@ -57,8 +62,13 @@ func (s *symbolLinkStore[V]) Has(symbol *ast.Symbol) bool { return s.TryGet(symbol) != nil } +// TryGet returns the links of symbol, or nil if it has none. A symbol +// without an id has no links, and looking it up does not give it one. func (s *symbolLinkStore[V]) TryGet(symbol *ast.Symbol) *V { - id := uint64(s.gen.GetSymbolId(symbol)) + id := uint64(ast.PeekSymbolId(symbol)) + if id == 0 { + return nil + } if id >= ast.BlockIdOffset && id < ast.BlockIdOffset+maxPageLinkCount { return s.pages.TryGet(id - ast.BlockIdOffset) } From 94737df6a91e5630dc3f5898da6936cdda6b7357 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 09:29:30 -0700 Subject: [PATCH 115/194] Read computed object flags without a call objectFlagsCell is too large to inline, so every read of a cached object flag, such as whether a type could contain type variables, paid for a call with seven arguments and a closure just to test one bit. Callers now test the bit first, and only call objectFlagsCell when the flag is not yet computed or a query needs to observe the read. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 12 ++++++++++++ tsc/internal/checker/memo.go | 9 ++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 98450d540b9b0..d6189d3046126 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -24187,6 +24187,9 @@ func (c *Checker) getReducedType(t *Type) *Type { // isNeverIntersection reports whether the intersection t reduces to never. func (c *Checker) isNeverIntersection(t *Type) bool { + if c.objectFlagsKnown(t, ObjectFlagsIsNeverIntersectionComputed) { + return t.objectFlags&ObjectFlagsIsNeverIntersection != 0 + } return c.objectFlagsCell(t, memoNeverIntersection, ObjectFlagsIsNeverIntersectionComputed, ObjectFlagsIsNeverIntersection, true /*inProgress*/, func() ObjectFlags { if !c.isMappingOfSameObjectType(t.Types()) && c.somePropertyReducesToNever(t) { return ObjectFlagsIsNeverIntersection @@ -24708,6 +24711,9 @@ func (c *Checker) couldContainTypeVariablesWorker(t *Type) bool { if t.flags&TypeFlagsStructuredOrInstantiable == 0 { return false } + if c.objectFlagsKnown(t, ObjectFlagsCouldContainTypeVariablesComputed) { + return t.objectFlags&ObjectFlagsCouldContainTypeVariables != 0 + } return c.objectFlagsCell(t, memoCouldContainTypeVariables, ObjectFlagsCouldContainTypeVariablesComputed, ObjectFlagsCouldContainTypeVariables, false /*inProgress*/, func() ObjectFlags { return core.IfElse(c.computeCouldContainTypeVariables(t), ObjectFlagsCouldContainTypeVariables, 0) }) != 0 @@ -27526,6 +27532,9 @@ func (c *Checker) isGenericIndexType(t *Type) bool { func (c *Checker) getGenericObjectFlags(t *Type) ObjectFlags { var combinedFlags ObjectFlags if t.flags&(TypeFlagsUnionOrIntersection|TypeFlagsSubstitution) != 0 { + if c.objectFlagsKnown(t, ObjectFlagsIsGenericTypeComputed) { + return t.objectFlags & ObjectFlagsIsGenericType + } return c.objectFlagsCell(t, memoGenericObjectFlags, ObjectFlagsIsGenericTypeComputed, ObjectFlagsIsGenericType, false /*inProgress*/, func() ObjectFlags { var flags ObjectFlags if t.flags&TypeFlagsUnionOrIntersection != 0 { @@ -30547,6 +30556,9 @@ func getNameFromIndexInfo(info *IndexInfo) string { func (c *Checker) isUnknownLikeUnionType(t *Type) bool { if c.strictNullChecks && t.flags&TypeFlagsUnion != 0 { + if c.objectFlagsKnown(t, ObjectFlagsIsUnknownLikeUnionComputed) { + return t.objectFlags&ObjectFlagsIsUnknownLikeUnion != 0 + } return c.objectFlagsCell(t, memoUnknownLikeUnion, ObjectFlagsIsUnknownLikeUnionComputed, ObjectFlagsIsUnknownLikeUnion, true /*inProgress*/, func() ObjectFlags { types := t.Types() if len(types) >= 3 && types[0].flags&TypeFlagsUndefined != 0 && types[1].flags&TypeFlagsNull != 0 && core.Some(types, c.IsEmptyAnonymousObjectType) { diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 15ba6b4209be8..2c9cc2f88c40a 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -1452,6 +1452,13 @@ func (c *Checker) logFlagMemoDiscard(restore func()) { c.discardLog = append(c.discardLog, discardEntry{nil, restore, false}) } +// objectFlagsKnown reports whether the flag memo of t whose result is cached +// once computed is set can be read without objectFlagsCell, which callers +// check first since objectFlagsCell is too large to inline. +func (c *Checker) objectFlagsKnown(t *Type, computed ObjectFlags) bool { + return t.objectFlags&computed != 0 && !c.observingMemos +} + // objectFlagsCell returns the flags under value of t, a flag memo whose // result is cached once the computed flag is set, computing them in a // computation of their own if needed. With inProgress, the computed flag is @@ -1459,7 +1466,7 @@ func (c *Checker) logFlagMemoDiscard(restore func()) { func (c *Checker) objectFlagsCell(t *Type, field memoField, computed ObjectFlags, value ObjectFlags, inProgress bool, compute func() ObjectFlags) ObjectFlags { key := memoKeyOf(t, field) if t.objectFlags&computed != 0 { - c.observeFlagMemo(key) + c.observeMemo(key) return t.objectFlags & value } c.beginMemo(key) From d08bc7c365e735ca8e89d6288d11aa8d92aeb79c Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 09:51:21 -0700 Subject: [PATCH 116/194] Skip current nodes when searching type resolutions Every checked node pushes a type resolution, so the chain that resolvingAnywhereIndex and findResolutionCycleStartIndex walk was as deep as the syntax being checked, though neither ever matches the resolution of a current node. A call nested in a few expressions thus walked every enclosing node to find the calls in progress, where main only walked a stack of calls. The searches now walk a second chain that leaves out the resolutions of current nodes. Its link takes four more bytes per resolution, which reordering the fields to drop padding more than pays for. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 130 +++++++++++++++------------- tsc/internal/checker/resolutions.go | 17 ++-- 2 files changed, 80 insertions(+), 67 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index d6189d3046126..aeb8a2a9433a0 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -83,12 +83,12 @@ const ( ) type TypeResolution struct { - target TypeSystemEntity - propertyName TypeSystemPropertyName - result bool + target TypeSystemEntity // canonical is the member of a cycle headed by this resolution that is // resolved first; see observeCircularHead. - canonical TypeSystemEntity + canonical TypeSystemEntity + propertyName TypeSystemPropertyName + result bool // restartHidden records that a cycle entered below this resolution of a // module table passes through it; see resolveModuleTableMembers. restartHidden bool @@ -629,59 +629,62 @@ var nextCheckerID atomic.Uint32 // checkers may share one store; see Clone. type Checker struct { *memoStore - compareSymbols func(*ast.Symbol, *ast.Symbol) int - compareSymbolChains func([]*ast.Symbol, []*ast.Symbol) int - resolutionSerials uint32 - resolutions []resolution - instantiationStack []*Type - conditionalConstraintDepth depthLimit - inlineLevel depthLimit - serializationLevel depthLimit - currentNode *ast.Node - currentNodeResolution int // 1-based index in resolutions of the resolution of currentNode, or 0; see enterCurrentNode - varianceTypeParameter *Type - isInferencePartiallyBlocked bool - wasCanceled bool - buildingExternalModuleContainers bool - evaluate evaluator.Evaluator - resolveName func(location *ast.Node, name string, meaning ast.SymbolFlags, nameNotFoundMessage *diagnostics.Message, isUse bool, excludeGlobals bool) *ast.Symbol - resolveNameForSymbolSuggestion func(location *ast.Node, name string, meaning ast.SymbolFlags, nameNotFoundMessage *diagnostics.Message, isUse bool, excludeGlobals bool) *ast.Symbol - symbolArena core.Arena[ast.Symbol] - symbolWithDataArena core.Arena[ast.SymbolWithData] - symbolExtraArena ast.SymbolExtraArena - signatureArena core.Arena[Signature] - signatureExtraArena core.Arena[signatureExtra] - indexInfoArena core.Arena[IndexInfo] - literalTypeArena core.Arena[LiteralType] - objectTypeArena core.Arena[ObjectType] - typeReferenceArena core.Arena[TypeReference] - interfaceTypeArena core.Arena[InterfaceType] - mappedTypeArena core.Arena[MappedType] - unionTypeArena core.Arena[UnionType] - intersectionTypeArena core.Arena[IntersectionType] - typeParameterArena core.Arena[TypeParameter] - indexedAccessTypeArena core.Arena[IndexedAccessType] - conditionalTypeArena core.Arena[ConditionalType] - typeListArena core.Arena[*Type] - outerTypeParameterListArena core.Arena[[]*Type] - valueSymbolExtraArena core.Arena[valueSymbolExtra] - structuredTypeExtraArena core.Arena[structuredTypeExtra] - lazyStateArena core.Arena[LazyState] - memberLayoutArena core.Arena[MemberLayout] - layoutMemberInfos map[string]MemberInfo - freeTypeSets *temporaryTypeSet - freePropertyCounts *temporaryPropertyCounts - factory ast.NodeFactory - regExpScanner *scanner.Scanner - uniqueLiteralMapper *TypeMapper - reliabilityFlags RelationComparisonResult - reportUnreliableMapper *TypeMapper - reportUnmeasurableMapper *TypeMapper - restrictiveMapper *TypeMapper - permissiveMapper *TypeMapper - contextualBindingPatterns []*ast.Node - resolving resolvingTable // Index in resolutions of the outermost computation of each key in progress - typeResolutionTop int // 1-based index in resolutions of the innermost resolution, or 0 + compareSymbols func(*ast.Symbol, *ast.Symbol) int + compareSymbolChains func([]*ast.Symbol, []*ast.Symbol) int + resolutionSerials uint32 + resolutions []resolution + instantiationStack []*Type + conditionalConstraintDepth depthLimit + inlineLevel depthLimit + serializationLevel depthLimit + currentNode *ast.Node + currentNodeResolution int // 1-based index in resolutions of the resolution of currentNode, or 0; see enterCurrentNode + varianceTypeParameter *Type + isInferencePartiallyBlocked bool + wasCanceled bool + buildingExternalModuleContainers bool + evaluate evaluator.Evaluator + resolveName func(location *ast.Node, name string, meaning ast.SymbolFlags, nameNotFoundMessage *diagnostics.Message, isUse bool, excludeGlobals bool) *ast.Symbol + resolveNameForSymbolSuggestion func(location *ast.Node, name string, meaning ast.SymbolFlags, nameNotFoundMessage *diagnostics.Message, isUse bool, excludeGlobals bool) *ast.Symbol + symbolArena core.Arena[ast.Symbol] + symbolWithDataArena core.Arena[ast.SymbolWithData] + symbolExtraArena ast.SymbolExtraArena + signatureArena core.Arena[Signature] + signatureExtraArena core.Arena[signatureExtra] + indexInfoArena core.Arena[IndexInfo] + literalTypeArena core.Arena[LiteralType] + objectTypeArena core.Arena[ObjectType] + typeReferenceArena core.Arena[TypeReference] + interfaceTypeArena core.Arena[InterfaceType] + mappedTypeArena core.Arena[MappedType] + unionTypeArena core.Arena[UnionType] + intersectionTypeArena core.Arena[IntersectionType] + typeParameterArena core.Arena[TypeParameter] + indexedAccessTypeArena core.Arena[IndexedAccessType] + conditionalTypeArena core.Arena[ConditionalType] + typeListArena core.Arena[*Type] + outerTypeParameterListArena core.Arena[[]*Type] + valueSymbolExtraArena core.Arena[valueSymbolExtra] + structuredTypeExtraArena core.Arena[structuredTypeExtra] + lazyStateArena core.Arena[LazyState] + memberLayoutArena core.Arena[MemberLayout] + layoutMemberInfos map[string]MemberInfo + freeTypeSets *temporaryTypeSet + freePropertyCounts *temporaryPropertyCounts + factory ast.NodeFactory + regExpScanner *scanner.Scanner + uniqueLiteralMapper *TypeMapper + reliabilityFlags RelationComparisonResult + reportUnreliableMapper *TypeMapper + reportUnmeasurableMapper *TypeMapper + restrictiveMapper *TypeMapper + permissiveMapper *TypeMapper + contextualBindingPatterns []*ast.Node + resolving resolvingTable // Index in resolutions of the outermost computation of each key in progress + typeResolutionTop int // 1-based index in resolutions of the innermost resolution, or 0 + // Like typeResolutionTop, but skipping the type resolutions of current + // nodes, which are many and which nothing searches for. + searchableTop int resolutionStart int // Index in resolutions below which resolutions are not searched for cycles visibleStart int // Index in resolutions below which nothing in progress is visible; see yieldCycle cycleYields []cycleYield // Canonical recomputations in progress; see yieldCycle @@ -20376,7 +20379,7 @@ func (c *Checker) isResolvingAnywhere(target TypeSystemEntity, propertyName Type // resolvingAnywhereIndex returns the index in resolutions of the visible // resolution of the property of target in progress, or -1. func (c *Checker) resolvingAnywhereIndex(target TypeSystemEntity, propertyName TypeSystemPropertyName) int { - for i := c.typeResolutionTop - 1; i >= c.visibleStart; i = int(c.resolutions[i].prevTypeResolution) - 1 { + for i := c.searchableTop - 1; i >= c.visibleStart; i = int(c.resolutions[i].prevSearchable) - 1 { if r := &c.resolutions[i].typeResolution; r.target == target && r.propertyName == propertyName { return i } @@ -20552,6 +20555,9 @@ func (c *Checker) popTypeResolution() bool { f := &c.resolutions[n] result := f.typeResolution.result c.typeResolutionTop = int(f.prevTypeResolution) + if f.typeResolution.propertyName != TypeSystemPropertyNameCurrentNode { + c.searchableTop = int(f.prevSearchable) + } c.resolutions[n] = resolution{} c.resolutions = c.resolutions[:n] if c.circularityStart > n { @@ -20580,6 +20586,10 @@ func (c *Checker) beginTypeResolution(target TypeSystemEntity, propertyName Type f.typeResolution.propertyName = propertyName f.typeResolution.result = true c.typeResolutionTop = len(c.resolutions) + if propertyName != TypeSystemPropertyNameCurrentNode { + f.prevSearchable = int32(c.searchableTop) + c.searchableTop = len(c.resolutions) + } } // topTypeResolution returns the innermost resolution, which must be the @@ -20590,7 +20600,7 @@ func (c *Checker) topTypeResolution() *TypeResolution { } func (c *Checker) findResolutionCycleStartIndex(target TypeSystemEntity, propertyName TypeSystemPropertyName) int { - for i := c.typeResolutionTop - 1; i >= c.resolutionStart; i = int(c.resolutions[i].prevTypeResolution) - 1 { + for i := c.searchableTop - 1; i >= c.resolutionStart; i = int(c.resolutions[i].prevSearchable) - 1 { resolution := &c.resolutions[i].typeResolution if c.typeResolutionHasProperty(resolution) { // The result was set before its computation finished, which @@ -20613,7 +20623,7 @@ func (c *Checker) findResolutionCycleStartIndex(target TypeSystemEntity, propert // findResolutionBelow reports whether a type resolution of target below the // one at index i is in progress. func (c *Checker) findResolutionBelow(i int, target TypeSystemEntity, propertyName TypeSystemPropertyName) bool { - for i = int(c.resolutions[i].prevTypeResolution) - 1; i >= c.resolutionStart; i = int(c.resolutions[i].prevTypeResolution) - 1 { + for i = int(c.resolutions[i].prevSearchable) - 1; i >= c.resolutionStart; i = int(c.resolutions[i].prevSearchable) - 1 { r := &c.resolutions[i].typeResolution if r.target == target && r.propertyName == propertyName { return true diff --git a/tsc/internal/checker/resolutions.go b/tsc/internal/checker/resolutions.go index 9ed69e7a8c1e9..5a9af14f7b644 100644 --- a/tsc/internal/checker/resolutions.go +++ b/tsc/internal/checker/resolutions.go @@ -24,23 +24,26 @@ type resolution struct { // reuse of its result; see memo.go. memo bool isQuery bool - resolving bool // The resolution is the one in Checker.resolving for key - fromCheck bool // The query began in a check; see recordFromCheck - prevMemo int32 // Checker.memoTop on entry - result *memoState // Memo state of the result computed - effects *memoEffects // Allocated on first use + resolving bool // The resolution is the one in Checker.resolving for key + fromCheck bool // The query began in a check; see recordFromCheck + prevMemo int32 // Checker.memoTop on entry // Index in Checker.deferredAttach of the first result cached by the // computation before it had effects; see attachState. attachStart int32 - entry *ast.Node // Current node when the computation started + result *memoState // Memo state of the result computed + effects *memoEffects // Allocated on first use + entry *ast.Node // Current node when the computation started query savedCurrentNode // A type resolution is a computation that re-entering detects as a cycle; // see beginTypeResolution. Its other fields are those of the resolution // below it, whose work it shares. + typeResolution TypeResolution isTypeResolution bool prevTypeResolution int32 // Checker.typeResolutionTop on entry - typeResolution TypeResolution + // Checker.searchableTop on entry, for a type resolution other than that + // of a current node. + prevSearchable int32 } // A memoStateSource creates the memo state of a computation in progress on From 08ac43796db226598072dea0474e4c07867bec7e Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 09:59:29 -0700 Subject: [PATCH 117/194] Inline reading resolved members resolveStructuredTypeMembers is called for nearly every property, signature or index lookup, and almost always finds the members already resolved. Its fast path computed a memo key before testing the flags, and the function was too large to inline. The fast path is now only the flag test and a cast, which inlines, and everything else moves out of line. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 13 ++++++++++--- tsc/internal/checker/types.go | 8 ++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index aeb8a2a9433a0..0b78adbe1f7a4 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -20985,12 +20985,19 @@ func (c *Checker) isApplicableIndexType(source *Type, target *Type) bool { } func (c *Checker) resolveStructuredTypeMembers(t *Type) *StructuredType { + if t.objectFlags&(ObjectFlagsMembersResolved|ObjectFlagsMembersResolving) == ObjectFlagsMembersResolved && !c.observingMemos { + return t.asResolvedStructuredType() + } + return c.resolveStructuredTypeMembersSlow(t) +} + +// resolveStructuredTypeMembersSlow is the part of resolveStructuredTypeMembers +// past reading resolved members, out of line so that the rest inlines. +func (c *Checker) resolveStructuredTypeMembersSlow(t *Type) *StructuredType { key := memoKeyOf(t, memoStructuredMembers) if t.objectFlags&(ObjectFlagsMembersResolved|ObjectFlagsMembersResolving) == ObjectFlagsMembersResolved { // Resolved members are only read. - if c.observing() { - c.observeMemo(key) - } + c.observeMemo(key) return t.AsStructuredType() } if t.objectFlags&ObjectFlagsMembersResolving != 0 { diff --git a/tsc/internal/checker/types.go b/tsc/internal/checker/types.go index fb8870905d3ea..23f236ed5f243 100644 --- a/tsc/internal/checker/types.go +++ b/tsc/internal/checker/types.go @@ -903,6 +903,14 @@ func (t *Type) AsStructuredType() *StructuredType { return nil } +// asResolvedStructuredType is AsStructuredType for a type known to be +// structured, such as one with resolved members, without checking. +func (t *Type) asResolvedStructuredType() *StructuredType { + // SAFETY: Callers only pass types of the kinds AsStructuredType accepts, + // which embed StructuredType at offset zero. + return (*StructuredType)(unsafe.Pointer(t)) +} + func (t *Type) AsObjectType() *ObjectType { if t.kind >= typeKindObject && t.kind <= typeKindEvolvingArray { // SAFETY: Types of these kinds are structs that embed ObjectType at offset zero. From c2f55baf79600692076aa8b3feead44f73f0c28d Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 10:08:47 -0700 Subject: [PATCH 118/194] Begin and end a cached computation without calls While checking, nearly every cached computation takes the same path through beginMemo and endMemo: no pending effects to replay, no cycle or discard mark in progress, and on exit no effects recorded, no source to pop and no query begun from a check. That path went through beginCheckedMemo, startEffects, stopEffects and endResolution, each a call that does not inline, around a few field stores. Do those stores directly in beginMemo and endMemo when that case holds, and fall back to the general path otherwise. PERF-PLACEHOLDER --- tsc/internal/checker/memo.go | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 2c9cc2f88c40a..df5eda936e66c 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -667,7 +667,19 @@ func (c *Checker) beginMemo(key memoKey) { state := c.peekMemoState(key) resolving := c.beginResolving(key) c.appendResolution(key, nil, 0, int32(len(c.instantiationStack))) - c.resolutions[len(c.resolutions)-1].resolving = resolving + n := len(c.resolutions) - 1 + f := &c.resolutions[n] + f.resolving = resolving + if c.checking && c.memoPendingCount == 0 && c.memoTop|c.currentNodeResolution != 0 && !c.logEffects() { + // beginCheckedMemo for the common case, without the calls. + f.memo = true + f.prevMemo = int32(c.memoTop) + f.result = state + f.entry = c.currentNode + f.attachStart = int32(len(c.deferredAttach)) + c.memoTop = n + 1 + return + } if c.checking { if c.memoPendingCount != 0 { c.replayPending(state) @@ -973,6 +985,27 @@ func (c *Checker) replayPending(state *memoState) { // for replay by later reuse of the result. The effects also become part of // the enclosing computation, since it observed the result. func (c *Checker) endMemo() { + n := len(c.resolutions) - 1 + if f := &c.resolutions[n]; f.memo && f.effects == nil && f.source == nil && !f.fromCheck { + // stopEffects and endResolution for the common case, without the + // calls. + c.memoTop = int(f.prevMemo) + if f.resolving { + c.resolving.delete(f.key) + } + if int(f.attachStart) != len(c.deferredAttach) { + clear(c.deferredAttach[f.attachStart:]) + c.deferredAttach = c.deferredAttach[:f.attachStart] + } + *f = resolution{} + c.resolutions = c.resolutions[:n] + if c.circularityStart > n { + c.endCircularity() + } else if len(c.innerCycles) != 0 { + c.endInnerCycles(n) + } + return + } if f := c.stopEffects(); f != nil && f.effects != nil { c.retainEffects(c.resolutionState(f), f.effects) } From 0e570a9ea1febee2112bdc8a97d961dca110dc61 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 10:16:19 -0700 Subject: [PATCH 119/194] Keep the node saved by a query on the checker Every resolution carried the current node saved by a query made outside of checking, though only the computation that begins such a query uses it, and queries do not nest: once one begins, its node is being checked until it ends. Keep it in one field of the checker instead, which makes every resolution 16 bytes smaller to touch on entry and zero on exit. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 4 +++- tsc/internal/checker/memo.go | 8 +++++--- tsc/internal/checker/resolutions.go | 1 - 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 0b78adbe1f7a4..e4b0d330b761f 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -638,7 +638,9 @@ type Checker struct { inlineLevel depthLimit serializationLevel depthLimit currentNode *ast.Node - currentNodeResolution int // 1-based index in resolutions of the resolution of currentNode, or 0; see enterCurrentNode + currentNodeResolution int // 1-based index in resolutions of the resolution of currentNode, or 0; see enterCurrentNode + querySave savedCurrentNode // Saved by the query in progress made outside of checking; see startEffects + inQuery bool varianceTypeParameter *Type isInferencePartiallyBlocked bool wasCanceled bool diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index df5eda936e66c..4c4f73ccafc79 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -726,8 +726,9 @@ func (c *Checker) startEffects(state *memoState) { // reportAtCurrentNode), and every reuse computes them again. The // node's resolution is entered above the computation's resolution. f.isQuery = true - query := c.enterCurrentNode(c.currentNode) - c.resolutions[n].query = query + debug.Assert(!c.inQuery, "nested query") + c.inQuery = true + c.querySave = c.enterCurrentNode(c.currentNode) } c.memoTop = n + 1 } @@ -739,7 +740,8 @@ func (c *Checker) stopEffects() *resolution { if c.resolutions[n].isTypeResolution { n-- debug.Assert(c.resolutions[n].isQuery, "resolution left on the stack") - c.exitCurrentNode(c.resolutions[n].query) + c.exitCurrentNode(c.querySave) + c.inQuery = false } f := &c.resolutions[n] if !f.memo { diff --git a/tsc/internal/checker/resolutions.go b/tsc/internal/checker/resolutions.go index 5a9af14f7b644..6953014b3ccea 100644 --- a/tsc/internal/checker/resolutions.go +++ b/tsc/internal/checker/resolutions.go @@ -33,7 +33,6 @@ type resolution struct { result *memoState // Memo state of the result computed effects *memoEffects // Allocated on first use entry *ast.Node // Current node when the computation started - query savedCurrentNode // A type resolution is a computation that re-entering detects as a cycle; // see beginTypeResolution. Its other fields are those of the resolution From fe10b73d5360bdd3391bf92c8c0095e9c9bfe2be Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 10:26:32 -0700 Subject: [PATCH 120/194] Enter and exit a checked node without nested calls Every checked expression, statement and deferred node enters and exits a resolution for the current node, some seventeen million times in a large project. Each did so through beginTypeResolution and popTypeResolution, calls that do not inline, though a node's resolution is never searched for cycles and so needs less than either does. Do the work of both directly in enterCurrentNode and exitCurrentNode. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index e4b0d330b761f..07b039abbdb2c 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -20452,14 +20452,39 @@ func (c *Checker) enterCurrentNode(node *ast.Node) savedCurrentNode { c.endCircularity() } c.currentNode = node - c.beginTypeResolution(node, TypeSystemPropertyNameCurrentNode) + // beginTypeResolution, without the call, for a resolution that is not + // searchable. + f := c.pushResolution() + parent := &c.resolutions[len(c.resolutions)-2] + f.depthStart = parent.depthStart + f.serial = parent.serial + f.prevMemo = int32(c.memoTop) + f.isTypeResolution = true + f.prevTypeResolution = int32(c.typeResolutionTop) + f.typeResolution.target = node + f.typeResolution.propertyName = TypeSystemPropertyNameCurrentNode + f.typeResolution.result = true + c.typeResolutionTop = len(c.resolutions) c.currentNodeResolution = c.typeResolutionTop return save } func (c *Checker) exitCurrentNode(save savedCurrentNode) { - debug.Assert(len(c.resolutions) == c.currentNodeResolution, "resolutions left on the stack") - c.popTypeResolution() + // popTypeResolution, without the call. + n := len(c.resolutions) - 1 + debug.Assert(c.currentNodeResolution == n+1 && c.typeResolutionTop == n+1, "resolutions left on the stack") + f := &c.resolutions[n] + c.typeResolutionTop = int(f.prevTypeResolution) + *f = resolution{} + c.resolutions = c.resolutions[:n] + if c.circularityStart > n { + c.endCircularity() + } else if len(c.innerCycles) != 0 { + c.endInnerCycles(n) + } + if len(c.cycleYields) != 0 && c.cycleYields[len(c.cycleYields)-1].end == n { + c.endCycleYield() + } c.currentNode = save.node c.currentNodeResolution = save.resolution } From 15eb8a009d5d9103f8de3823f951c162a495044d Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 10:32:49 -0700 Subject: [PATCH 121/194] Find and record a computation in progress in one probe Each memoized computation looked up its key among the computations in progress and then, finding none, probed the table again to insert it. Probe once for the slot that holds the key or would, and use it for either case. PERF-PLACEHOLDER --- tsc/internal/checker/resolutions.go | 38 +++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/tsc/internal/checker/resolutions.go b/tsc/internal/checker/resolutions.go index 6953014b3ccea..64a07f880615a 100644 --- a/tsc/internal/checker/resolutions.go +++ b/tsc/internal/checker/resolutions.go @@ -177,6 +177,20 @@ func (t *resolvingTable) get(key memoKey) (int32, bool) { } } +// slot returns the slot holding key, or else the empty slot where it would +// be inserted, with room for the insertion. +func (t *resolvingTable) slot(key memoKey) *resolvingSlot { + if 2*(t.count+1) > len(t.slots) { + t.grow() + } + mask := len(t.slots) - 1 + for i := t.home(key); ; i = (i + 1) & mask { + if k := t.slots[i].key; k == key || k == 0 { + return &t.slots[i] + } + } +} + func (t *resolvingTable) set(key memoKey, index int32) { if 2*(t.count+1) > len(t.slots) { t.grow() @@ -235,18 +249,22 @@ func (t *resolvingTable) grow() { // one re-enters it as the policy of its kind says; see memoReentry. It reports // whether the resolution is recorded. func (c *Checker) beginResolving(key memoKey) bool { - i, ok := c.resolving.get(key) - if ok { - if int(i) >= c.visibleStart { - if memoReentry[key.field()] == reentryCircular { - c.markCircular(int(i)) - } - return false + slot := c.resolving.slot(key) + if slot.key == 0 { + *slot = resolvingSlot{key, int32(len(c.resolutions))} + c.resolving.count++ + return true + } + i := slot.index + if int(i) >= c.visibleStart { + if memoReentry[key.field()] == reentryCircular { + c.markCircular(int(i)) } - y := &c.cycleYields[len(c.cycleYields)-1] - y.shadowed = append(y.shadowed, shadowedResolving{key, i}) + return false } - c.resolving.set(key, int32(len(c.resolutions))) + y := &c.cycleYields[len(c.cycleYields)-1] + y.shadowed = append(y.shadowed, shadowedResolving{key, i}) + slot.index = int32(len(c.resolutions)) return true } From de46dc9c48f32705dceb9f0fcfff3c356f80f397 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 10:40:16 -0700 Subject: [PATCH 122/194] Begin and end a cached entry of a map without calls Computations whose results are entries of a memo map, rather than cells, still began and ended through the general path, since the fast path in endMemo excluded resolutions with a memo state source and memoMap.begin had none. Give both the same fast path, popping the entry's state from its source in endMemo. PERF-PLACEHOLDER --- tsc/internal/checker/memo.go | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 4c4f73ccafc79..580ccbce15f10 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -539,6 +539,18 @@ func (m *memoMap[K, V]) begin(c *Checker, k K) { } side.resolvingKeys = append(side.resolvingKeys, k) c.beginResolution(m, len(side.resolvingKeys)-1) + if c.checking && c.memoPendingCount == 0 && c.memoTop|c.currentNodeResolution != 0 && !c.logEffects() { + // beginCheckedMemo for the common case, without the calls. + n := len(c.resolutions) - 1 + f := &c.resolutions[n] + f.memo = true + f.prevMemo = int32(c.memoTop) + f.result = state + f.entry = c.currentNode + f.attachStart = int32(len(c.deferredAttach)) + c.memoTop = n + 1 + return + } if c.checking { if c.memoPendingCount != 0 && state != nil { c.replayPending(state) @@ -988,7 +1000,7 @@ func (c *Checker) replayPending(state *memoState) { // the enclosing computation, since it observed the result. func (c *Checker) endMemo() { n := len(c.resolutions) - 1 - if f := &c.resolutions[n]; f.memo && f.effects == nil && f.source == nil && !f.fromCheck { + if f := &c.resolutions[n]; f.memo && f.effects == nil && !f.fromCheck { // stopEffects and endResolution for the common case, without the // calls. c.memoTop = int(f.prevMemo) @@ -999,6 +1011,9 @@ func (c *Checker) endMemo() { clear(c.deferredAttach[f.attachStart:]) c.deferredAttach = c.deferredAttach[:f.attachStart] } + if f.source != nil { + f.source.popState(int(f.index)) + } *f = resolution{} c.resolutions = c.resolutions[:n] if c.circularityStart > n { From 49f626568737792f9557c91f22eb111209e2d194 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 10:51:38 -0700 Subject: [PATCH 123/194] Key object literal and binding pattern types in member order The keys that intern object literal types and binding pattern types sorted the names of their members, allocating a slice and looking up each member again by name. Both keys include the node the type is created for, whose members are always added in source order, so the order needs no normalizing; key the members as the table lists them. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 07b039abbdb2c..2eda49b5a3854 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -18811,10 +18811,8 @@ func (c *Checker) getObjectLiteralTypeKey(node *ast.Node, flags ObjectFlags, pro var b keyBuilder b.writeNode(node) b.writeUint32(uint32(flags)) - names := slices.Sorted(properties.Keys()) - b.writeInt(len(names)) - for _, name := range names { - prop := properties.Get(name) + b.writeInt(properties.Len()) + for name, prop := range properties.All() { b.writeString(name) b.writeByte(0) b.writeUint32(uint32(prop.Flags())) @@ -19324,12 +19322,11 @@ func (c *Checker) getTypeFromObjectBindingPattern(pattern *ast.Node, includePatt } b.writeUint32(uint32(objectFlags)) b.writeInt(len(indexInfos)) - names := slices.Sorted(members.Keys()) - for _, name := range names { + for name, member := range members.All() { b.writeString(name) b.writeByte(0) - b.writeUint32(uint32(members.Get(name).Flags())) - b.writeType(c.valueSymbolLinks.Get(members.Get(name)).resolvedType.peek()) + b.writeUint32(uint32(member.Flags())) + b.writeType(c.valueSymbolLinks.Get(member).resolvedType.peek()) } key := b.hash() if existing, _ := c.bindingPatternTypes.get(c, key); existing != nil { From 4f04b4dc58085d461387b81875bf0a34df324043 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sat, 31 Oct 2026 02:49:59 -0700 Subject: [PATCH 124/194] Key content-interned object types in member order The content key that interns spread, widened, regular, and rest object types sorted the names of their members, allocating a slice and looking each member up again by name. Sorting also merged spreads whose members differ only in order, such as { ...a, ...b } and { ...b, ...a } over unions, into one type whose property order was that of whichever was created first. Main never merges them, and keeping them apart makes the property order of each depend only on its own inputs. Every caller builds its members in an order determined by its inputs, so key the members as the table lists them. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 7 +++---- .../baselines/reference/conformance/spreadUnion.types | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 2eda49b5a3854..0edf53b92339e 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -14339,10 +14339,9 @@ func (c *Checker) getObjectTypeContentKey(symbol *ast.Symbol, flags ObjectFlags, b.writeByte(0) } b.writeUint32(uint32(flags)) - names := slices.Sorted(members.Keys()) - b.writeInt(len(names)) - for _, name := range names { - b.writeSymbol(members.Get(name)) + b.writeInt(members.Len()) + for member := range members.Values() { + b.writeSymbol(member) } b.writeInt(len(indexInfos)) for _, info := range indexInfos { diff --git a/tsc/testdata/baselines/reference/conformance/spreadUnion.types b/tsc/testdata/baselines/reference/conformance/spreadUnion.types index 50f6090277643..d74f767c4a624 100644 --- a/tsc/testdata/baselines/reference/conformance/spreadUnion.types +++ b/tsc/testdata/baselines/reference/conformance/spreadUnion.types @@ -38,7 +38,7 @@ var o5: { a: number } | { b: string } | { a: number, b: string }; var o5 = { ...union, ...union }; >o5 : { a: number; } | { b: string; } | { a: number; b: string; } ->{ ...union, ...union } : { a: number; } | { b: string; } | { a: number; b: string; } +>{ ...union, ...union } : { a: number; } | { b: string; } | { a: number; b: string; } | { a: number; b: string; } >union : { a: number; } | { b: string; } >union : { a: number; } | { b: string; } From c3e79c2ca13457375dd5b0d0a5383f1f5ed6b4ab Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 11:03:02 -0700 Subject: [PATCH 125/194] Keep the memo state of a cell in the memo state map again Memo cells kept a pointer to their memo state inline so that recording effects in checks, which looked up the state of nearly every result read, avoided a map lookup per read. Checks no longer look up the state of what they read unless effects are pending, and the memo state map gained a filter that answers most lookups for results without a state, which is nearly all of them: checking a large project gives about 150 thousand cells a state. The pointer only doubled the size of every cell. Keep the states of cells in the map, behind the filter, as for the entries of memo maps. PERF-PLACEHOLDER --- tsc/internal/checker/memo.go | 31 +++--------------------------- tsc/internal/checker/types_test.go | 8 ++++---- 2 files changed, 7 insertions(+), 32 deletions(-) diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 580ccbce15f10..963a359bbdc86 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -128,14 +128,6 @@ func (k memoKey) symbol() *ast.Symbol { return *(**ast.Symbol)(unsafe.Pointer(&p)) } -// cell returns the memo identified by a key of field memoCell, which is the -// address of the memo. The memo is alive, since its key is in use, and the -// heap does not move. -func (k memoKey) cell() *memoHeader { - p := uintptr(k >> 8) - return *(**memoHeader)(unsafe.Pointer(&p)) -} - type memoEffects struct { effects []func(c *Checker) marks []*ast.Symbol // Aliases marked referenced, also among effects; see withReferenceMarks @@ -187,8 +179,7 @@ type memo[T any] struct { // memoHeader is the part of a memo independent of its type, which identifies // it. type memoHeader struct { - _ memoNoCopy - state *memoState // Created on demand; see Checker.memoState + _ memoNoCopy } // memoNoCopy makes go vet reject copies of a memo, which would bypass it. @@ -280,7 +271,7 @@ func (m *memo[T]) setReported(c *Checker, v T, r currentNodeErrors) { r.list = nil } m.setIdentity(c, v) - if r.list != nil || c.memoErrorStates != 0 && m.state != nil { + if r.list != nil || c.memoErrorStates != 0 && c.peekMemoState(m.key()) != nil { c.memoState(m.key()).setErrors(c, r.list) } } @@ -764,13 +755,6 @@ func (c *Checker) stopEffects() *resolution { } func (c *Checker) memoState(key memoKey) *memoState { - if key.field() == memoCell { - h := key.cell() - if h.state == nil { - h.state = &memoState{} - } - return h.state - } state := c.memoStates[key] if state == nil { if c.memoStates == nil { @@ -796,9 +780,6 @@ func stateFilterIndex(key memoKey) uint64 { // peekMemoState returns the memo state of the result identified by key, or // nil if it has none, consulting a filter first since most results have none. func (c *Checker) peekMemoState(key memoKey) *memoState { - if key.field() == memoCell { - return key.cell().state - } if c.stateFilter == nil { return nil } @@ -864,13 +845,7 @@ func (c *Checker) linkState(state *memoState, f *memoEffects) { // //go:noinline func (c *Checker) observeCell(h *memoHeader) { - state := h.state - if !c.memoActive() { - return - } - if c.observeState(state) || state == nil && !c.checking && c.resolving.count != 0 { - c.memoCycle(c.resolvingIndex(h.key())) - } + c.observeMemo(h.key()) } //go:noinline diff --git a/tsc/internal/checker/types_test.go b/tsc/internal/checker/types_test.go index 253ad432be362..63ec6affc72df 100644 --- a/tsc/internal/checker/types_test.go +++ b/tsc/internal/checker/types_test.go @@ -488,8 +488,8 @@ func TestInferenceContextMappers(t *testing.T) { //nolint:paralleltest func TestCompactValueSymbolLinksLayout(t *testing.T) { t.Parallel() - assert.Equal(t, unsafe.Sizeof(ValueSymbolLinks{}), 5*unsafe.Sizeof(uintptr(0))) - assert.Equal(t, unsafe.Sizeof(valueSymbolExtra{}), 4*unsafe.Sizeof(uintptr(0))) + assert.Equal(t, unsafe.Sizeof(ValueSymbolLinks{}), 4*unsafe.Sizeof(uintptr(0))) + assert.Equal(t, unsafe.Sizeof(valueSymbolExtra{}), 3*unsafe.Sizeof(uintptr(0))) c, types := newCompositeTestChecker() var links ValueSymbolLinks assert.Assert(t, links.getWriteType(c) == nil) @@ -648,7 +648,7 @@ func TestStructuredTypeExtra(t *testing.T) { func TestCompactTypeNodeLinksLayout(t *testing.T) { t.Parallel() - assert.Equal(t, unsafe.Sizeof(TypeNodeLinks{}), 4*unsafe.Sizeof(uintptr(0))) + assert.Equal(t, unsafe.Sizeof(TypeNodeLinks{}), 2*unsafe.Sizeof(uintptr(0))) c, types := newCompositeTestChecker() var links TypeNodeLinks links.resolvedType.intern(types[0]) @@ -678,7 +678,7 @@ func TestCompactTypeNodeLinksLayout(t *testing.T) { func TestCompactSignatureLayout(t *testing.T) { t.Parallel() - assert.Equal(t, unsafe.Sizeof(Signature{}), 16+11*unsafe.Sizeof(uintptr(0))) + assert.Equal(t, unsafe.Sizeof(Signature{}), 16+8*unsafe.Sizeof(uintptr(0))) assert.Equal(t, unsafe.Sizeof(signatureExtra{}), 7*unsafe.Sizeof(uintptr(0))) } From b738ad34fb6badb33692b986b2177394bc7039a8 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 12:52:09 -0700 Subject: [PATCH 126/194] Check regular expression grammar once through a memo set The grammar check of a regular expression literal ran once because of a TypeChecked flag on the node, set by a plain write. Discarding the results of a cycle does not undo such a write, so if the check ran while results were later discarded, it would not run again. Use a memo set instead, like the other checks whose only results are diagnostics, and drop the memo field that guarded nothing. --- tsc/internal/checker/checker.go | 14 +++----------- tsc/internal/checker/memo.go | 1 - 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 0edf53b92339e..5f1bc990dc268 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -1034,6 +1034,7 @@ type memoStore struct { ambientModulesOnce sync.Once ambientModules []*ast.Symbol reportedUnreachableNodes memoSet[*ast.Node] + checkedRegularExpressions memoSet[*ast.Node] nonExistentProperties collections.Set[NonExistentPropertyKey] deferredDiagnosticCallbacks []func(c *Checker) memoStates map[memoKey]*memoState // Memo state of results computed by queries; see memo.go @@ -8411,18 +8412,9 @@ func (c *Checker) isTemplateLiteralContextualType(t *Type) bool { } func (c *Checker) checkRegularExpressionLiteral(node *ast.Node) *Type { - c.beginMemo(memoKeyOf(node, memoRegularExpression)) - result := c.checkRegularExpressionLiteralUncached(node) - c.endMemo() - return result -} - -func (c *Checker) checkRegularExpressionLiteralUncached(node *ast.Node) *Type { - nodeLinks := c.nodeLinks.Get(node) - if nodeLinks.flags&NodeCheckFlagsTypeChecked == 0 { - nodeLinks.flags |= NodeCheckFlagsTypeChecked + c.checkedRegularExpressions.once(c, node, func() { c.checkGrammarRegularExpressionLiteral(node.AsRegularExpressionLiteral()) - } + }) return c.globalRegExpType } diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 963a359bbdc86..56ddf0bcb6851 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -48,7 +48,6 @@ const ( memoEnumMemberValue memoBaseConstraint memoAccessorType - memoRegularExpression memoContextualParameters memoContextChecked memoInitializerIsUndefined From 55a980ae35a1f9477277912b41dbc863387b59d1 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 13:03:29 -0700 Subject: [PATCH 127/194] Remove the TypeChecked node flag Its last use was in reportNonexistentProperty, which kept both a set of (name, containing type, JS) keys and the flag on the name's node. The flag already stopped a second report for the node on any containing type, so the keyed set never caught anything the flag did not. Keep a single set of reported name nodes instead. Reports only run while checking, so this stays checking-only state, as the keyed set was. --- tsc/internal/checker/checker.go | 22 +++++----------------- tsc/internal/checker/checker_test.go | 2 +- tsc/internal/checker/types.go | 1 - 3 files changed, 6 insertions(+), 19 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 5f1bc990dc268..41feb66c07c47 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -265,14 +265,6 @@ type PropertiesTypesKey struct { includeOrigin bool } -// NonExistentPropertyKey - -type NonExistentPropertyKey struct { - propNode *ast.Node - containingType *Type - isUncheckedJS bool -} - // FlowLoopKey type FlowLoopKey struct { @@ -1035,7 +1027,7 @@ type memoStore struct { ambientModules []*ast.Symbol reportedUnreachableNodes memoSet[*ast.Node] checkedRegularExpressions memoSet[*ast.Node] - nonExistentProperties collections.Set[NonExistentPropertyKey] + nonExistentPropertyNodes collections.Set[*ast.Node] // Property names reported as nonexistent deferredDiagnosticCallbacks []func(c *Checker) memoStates map[memoKey]*memoState // Memo state of results computed by queries; see memo.go stateFilter []uint64 // Memo keys that may have a memo state; see memoState @@ -12153,16 +12145,12 @@ func (c *Checker) reportNonexistentProperty(propNode *ast.Node, containingType * c.recordEffect(func(c *Checker) { c.reportNonexistentProperty(propNode, containingType, isUncheckedJS) }) return } - key := NonExistentPropertyKey{propNode, containingType, isUncheckedJS} - if c.nonExistentProperties.Has(key) { + // Only the first report for a name is made, even if it is reported again + // on another containing type. + if c.nonExistentPropertyNodes.Has(propNode) { return } - c.nonExistentProperties.Add(key) - links := c.nodeLinks.Get(propNode) - if links.flags&NodeCheckFlagsTypeChecked != 0 { - return // error already made/in progress - } - links.flags |= NodeCheckFlagsTypeChecked + c.nonExistentPropertyNodes.Add(propNode) if ast.IsJSDocNameReferenceContext(propNode) { return } diff --git a/tsc/internal/checker/checker_test.go b/tsc/internal/checker/checker_test.go index cd053cc6aa455..accbda0072fbb 100644 --- a/tsc/internal/checker/checker_test.go +++ b/tsc/internal/checker/checker_test.go @@ -592,7 +592,7 @@ var unmemoizedCacheFields = map[string]string{ "memoStore.mu": unmemoizedMemoState, "memoStore.diagnostics": unmemoizedChecking, "memoStore.suggestionDiagnostics": unmemoizedChecking, - "memoStore.nonExistentProperties": unmemoizedChecking, + "memoStore.nonExistentPropertyNodes": unmemoizedChecking, "memoStore.deferredDiagnosticCallbacks": unmemoizedChecking, "SymbolReferenceLinks.referenceKinds": unmemoizedChecking, "AliasSymbolLinks.referenced": unmemoizedMark, diff --git a/tsc/internal/checker/types.go b/tsc/internal/checker/types.go index 23f236ed5f243..29bfa49847d07 100644 --- a/tsc/internal/checker/types.go +++ b/tsc/internal/checker/types.go @@ -415,7 +415,6 @@ type NodeCheckFlags uint32 const ( NodeCheckFlagsNone NodeCheckFlags = 0 - NodeCheckFlagsTypeChecked NodeCheckFlags = 1 << 0 // Node has been type checked NodeCheckFlagsContextChecked NodeCheckFlags = 1 << 6 // Contextual types have been assigned NodeCheckFlagsSignatureContextChecked NodeCheckFlags = 1 << 7 // Signature of a contextually typed function has been checked NodeCheckFlagsEnumValuesComputed NodeCheckFlags = 1 << 10 // Values for enum members have been computed, and any errors have been reported for them. From df31677ab46bf89dec17e51aed882ecaa978aee0 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 18:19:48 -0700 Subject: [PATCH 128/194] Measure circular variances as TypeScript does, canonically Measuring variances as a fixpoint changed the language: a type whose recursive references nest its type parameters, such as interface Foo1 { x: T; y: Foo1<(arg: T) => void> } was measured invariant instead of covariant. On zod, the stricter variances of ZodObject failed constraints (TS2344), sent comparisons into deep structural recursion (TS2589), and made checking 250x slower. Go back to TypeScript's rule: a recursive reference to a type being measured has unknown variances, so occurrences nested in it are not measured. That result depends on where the circularity is entered, so it is measured from a canonical entry, the type with the smallest symbol, as before the fixpoint. The entry was not always found, though. A reference to a type measured further down the variance stack counted as one of its marker types and was compared structurally, never reaching its variances, so no circularity was seen and the result depended on which type was measured first. Only the measurement at the top of the stack has marker types now; references to the others find the circularity and restart from the canonical entry. The variance tests now match TypeScript, except where TypeScript reports a circularity that a different check order avoids in TypeScript too. --- tsc/internal/checker/checker.go | 6 +- tsc/internal/checker/relater.go | 167 ++++++--------- .../compiler/circularVariance1.errors.txt | 68 +------ .../compiler/circularVariance2.errors.txt | 68 +------ .../recursiveVarianceFixedPoint.errors.txt | 190 +----------------- .../relationDeeplyNestedCheckOrder.errors.txt | 31 --- .../relationDeeplyNestedCheckOrder.symbols | 67 +++--- .../relationDeeplyNestedCheckOrder.types | 9 +- ...rianceCycleDiscardedDiagnostics.errors.txt | 12 +- .../varianceCycleDiscardedDiagnostics.symbols | 74 +++---- .../varianceCycleDiscardedDiagnostics.types | 18 +- .../varianceCycleEntryOrder.errors.txt | 106 +++------- ...varianceCycleStructuralFallback.errors.txt | 130 ++++-------- .../varianceDeclarationOrder.errors.txt | 31 +++ ...rianceMeasuredWithinCircularity.errors.txt | 34 +--- .../compiler/varianceMeasurement.errors.txt | 36 +--- .../relationDeeplyNestedCheckOrder.ts | 9 +- .../varianceCycleDiscardedDiagnostics.ts | 6 +- 18 files changed, 274 insertions(+), 788 deletions(-) delete mode 100644 tsc/testdata/baselines/reference/compiler/relationDeeplyNestedCheckOrder.errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/varianceDeclarationOrder.errors.txt diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 41feb66c07c47..501b99d9346d1 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -570,9 +570,7 @@ type WideningContext struct { type VarianceStackEntry struct { symbol *ast.Symbol typeParameters []*Type - resolution int // Index in Checker.resolutions of the resolution of the measurement - cycleStart int // Lowest index of an entry whose guessed variances this measurement used, or MaxInt - guessChanged bool // Whether a measurement in the circularity found stricter variances than guessed + resolution int // Index in Checker.resolutions of the resolution of the measurement } type ResolvingObjectType struct { @@ -692,8 +690,6 @@ type Checker struct { cycleParticipants []TypeResolution // Computations that observed a cycle in progress effectsMarkDepth int // 1 + resolution index of the innermost effects mark that may be discarded, or 0 varianceStack []VarianceStackEntry - varianceGuesses map[*ast.Symbol][]VarianceFlags // Variances assumed for measurements in progress; see getVariancesWorker - varianceGuessed []*ast.Symbol // Keys of varianceGuesses in order of addition flushBuf []*memoState deferredAttach []*memoState // See attachState flushStates *[]*memoState // Collects memo states given effects to replay, if non-nil; see withoutChecking diff --git a/tsc/internal/checker/relater.go b/tsc/internal/checker/relater.go index ba9f0f09320b6..e62dd02647691 100644 --- a/tsc/internal/checker/relater.go +++ b/tsc/internal/checker/relater.go @@ -1,7 +1,6 @@ package checker import ( - "math" "math/bits" "slices" "strconv" @@ -1507,32 +1506,15 @@ func (c *Checker) getAliasVariances(symbol *ast.Symbol) []VarianceFlags { // Return an array containing the variance of each type parameter. The variance is effectively // a digest of the type comparisons that occur for each type argument when instantiations of the // generic type are structurally compared. We infer the variance information by comparing -// instantiations of the generic type for type arguments with known relations. -// -// Generic types whose variance measurements depend on each other are measured together as a -// fixpoint. A measurement that needs the variances of a type still being measured uses a guess -// for them, starting from the most permissive variances. When the outermost measurement of the -// circularity finishes, any measured type whose variances are stricter than its guess gets the -// stricter guess, and everything computed since the guesses were first used is discarded and -// measured again. Measurements only get stricter, so this ends, with the same variances for -// each type whichever type is measured first. +// instantiations of the generic type for type arguments with known relations. The function +// returns an empty slice when invoked recursively for the given generic type. func (c *Checker) getVariancesWorker(symbol *ast.Symbol, typeParameters []*Type) []VarianceFlags { links := c.varianceLinks.Get(symbol) if variances := links.variances.get(c); variances != nil { return variances } if stackIndex := c.getVarianceStackIndex(symbol); stackIndex >= 0 { - return c.getVarianceGuess(stackIndex) - } - if c.checking { - // A circularity is measured again with stricter guesses after - // discarding what was computed from the earlier ones, including its - // effects, so measure while recording effects. - var variances []VarianceFlags - c.withoutChecking(func() { - variances = c.getVariancesWorker(symbol, typeParameters) - }) - return variances + return c.getRecursiveVariances(stackIndex) } var traceArgs map[string]any if tr := c.tracer; tr != nil { @@ -1553,107 +1535,62 @@ func (c *Checker) getVariancesWorker(symbol *ast.Symbol, typeParameters []*Type) if len(c.varianceStack) == 0 { c.resolutionStart = len(c.resolutions) } - index := len(c.varianceStack) - c.varianceStack = append(c.varianceStack, VarianceStackEntry{symbol: symbol, typeParameters: typeParameters, resolution: len(c.resolutions), cycleStart: math.MaxInt}) + c.varianceStack = append(c.varianceStack, VarianceStackEntry{symbol: symbol, typeParameters: typeParameters, resolution: len(c.resolutions)}) c.beginTypeResolution(symbol, TypeSystemPropertyNameVariances) - guessesStart := len(c.varianceGuessed) - mark := c.markDiscard() - instantiationCount := c.instantiationCount - var variances []VarianceFlags - for { - variances = c.measureVariances(symbol, typeParameters) - entry := &c.varianceStack[index] - guess := c.varianceGuesses[symbol] - if guess != nil { - variances = meetVariances(guess, variances) - } - if entry.cycleStart < index { - // Part of a circularity whose outermost measurement is still in progress. - if guess != nil && !slices.Equal(guess, variances) { - c.varianceGuesses[symbol] = variances - entry.guessChanged = true - } - parent := &c.varianceStack[index-1] - parent.cycleStart = min(parent.cycleStart, entry.cycleStart) - parent.guessChanged = parent.guessChanged || entry.guessChanged - break - } - if guess == nil || !entry.guessChanged && slices.Equal(guess, variances) { - break - } - c.varianceGuesses[symbol] = variances - entry.cycleStart = math.MaxInt - entry.guessChanged = false - c.discardSince(mark) - // The work of a discarded round does not count toward the limit on - // instantiations, so whether the limit is reached does not depend on - // how many rounds the circularity took to settle. - c.instantiationCount = instantiationCount + variances := c.measureVariances(symbol, typeParameters, links) + // A restart from a circularity (see getRecursiveVariances) may already + // have measured this type, from the canonical entry of the circularity. + if restarted := links.variances.get(c); len(restarted) != 0 { + variances = restarted } - if c.varianceStack[index].cycleStart >= index { - for _, s := range c.varianceGuessed[guessesStart:] { - delete(c.varianceGuesses, s) - } - c.varianceGuessed = c.varianceGuessed[:guessesStart] - } - c.releaseDiscardMark(mark) links.variances.set(c, variances) - c.varianceStack = c.varianceStack[:index] + c.varianceStack = c.varianceStack[:len(c.varianceStack)-1] c.popTypeResolution() - if index == 0 { + if len(c.varianceStack) == 0 { c.resolutionStart = saveResolutionStart } c.endMemo() return variances } -// getVarianceGuess returns the variances to assume for the generic type at the given index of -// the variance stack, whose measurement is in progress. Everything measured since then is part -// of a circularity with it, and results computed from now on depend on the guess. -func (c *Checker) getVarianceGuess(stackIndex int) []VarianceFlags { - entry := &c.varianceStack[stackIndex] - top := &c.varianceStack[len(c.varianceStack)-1] - top.cycleStart = min(top.cycleStart, stackIndex) +// getRecursiveVariances handles a measurement needing the variances of the type at the given +// index of the variance stack, whose measurement is in progress. Occurrences of type parameters +// nested in such recursive references are not measured: the variances are an empty slice, which +// comparisons treat as unknown. Since the variances measured then depend on where the +// circularity was entered, it is measured from a canonical entry, the type with the "smallest" +// symbol, as if that type had been measured first: if that is not the type re-entered, it is +// measured again with nothing in progress visible, measuring the others in the circularity as +// it reaches them, and the measurements in progress then take those results. +func (c *Checker) getRecursiveVariances(stackIndex int) []VarianceFlags { + // Results computed since the circularity was entered observed incomplete variances, so + // they are discarded once the measurement re-entered finishes. The variances themselves are + // kept, since each is measured from the canonical entry whichever type is entered first. for i := stackIndex; i < len(c.varianceStack); i++ { c.cycleParticipants = append(c.cycleParticipants, c.resolutions[c.varianceStack[i].resolution].typeResolution) } - c.markTypeResolutionCircular(entry.resolution) - guess := c.varianceGuesses[entry.symbol] - if guess == nil { - guess = make([]VarianceFlags, len(entry.typeParameters)) - for i := range guess { - guess[i] = VarianceFlagsIndependent + c.markTypeResolutionCircular(c.varianceStack[stackIndex].resolution) + minIndex := stackIndex + for i := stackIndex + 1; i < len(c.varianceStack); i++ { + if c.compareSymbols(c.varianceStack[i].symbol, c.varianceStack[minIndex].symbol) < 0 { + minIndex = i } - if c.varianceGuesses == nil { - c.varianceGuesses = make(map[*ast.Symbol][]VarianceFlags) - } - c.varianceGuesses[entry.symbol] = guess - c.varianceGuessed = append(c.varianceGuessed, entry.symbol) } - return guess -} - -// meetVariances returns, for each type parameter, the most permissive variance that is no more -// permissive than either of the given variances. -func meetVariances(a []VarianceFlags, b []VarianceFlags) []VarianceFlags { - result := make([]VarianceFlags, len(a)) - for i := range a { - x, y := a[i]&VarianceFlagsVarianceMask, b[i]&VarianceFlagsVarianceMask - var v VarianceFlags - switch { - case x == VarianceFlagsIndependent: - v = y - case y == VarianceFlagsIndependent: - v = x - default: - v = x & y - } - result[i] = v | (a[i]|b[i])&VarianceFlagsAllowsStructuralFallback + if minIndex > stackIndex && !c.isYieldingTo(c.varianceStack[minIndex].symbol, TypeSystemPropertyNameVariances) { + entry := c.varianceStack[minIndex] + saveVarianceStack := c.varianceStack + c.varianceStack = nil + c.beginCycleYield(entry.symbol, TypeSystemPropertyNameVariances, -1, len(c.resolutions)) + c.getVariancesWorker(entry.symbol, entry.typeParameters) + c.endCycleYield() + c.varianceStack = saveVarianceStack } - return result + if variances := c.varianceLinks.Get(c.varianceStack[stackIndex].symbol).variances.get(c); variances != nil { + return variances + } + return []VarianceFlags{} } -func (c *Checker) measureVariances(symbol *ast.Symbol, typeParameters []*Type) []VarianceFlags { +func (c *Checker) measureVariances(symbol *ast.Symbol, typeParameters []*Type, links *VarianceLinks) []VarianceFlags { variances := make([]VarianceFlags, len(typeParameters)) for i, tp := range typeParameters { modifiers := c.getTypeParameterModifiers(tp) @@ -1692,6 +1629,11 @@ func (c *Checker) measureVariances(symbol *ast.Symbol, typeParameters []*Type) [ } c.reliabilityFlags = saveReliabilityFlags } + // If variance computation was restarted due to a circularity we may have already + // computed variances for this generic type. If so, we exit early. + if len(links.variances.get(c)) != 0 { + break + } variances[i] = variance } return variances @@ -1721,12 +1663,15 @@ func (c *Checker) createMarkerType(symbol *ast.Symbol, source *Type, target *Typ return result } -// isMarkerType reports whether t is a marker type of a variance computation -// or variance annotation check in progress: an instantiation of the generic -// type or type alias being measured with one of its type parameters replaced -// by a variance marker. Instantiations of other types with markers, such as -// those nested in the type being measured, are not marker types, whether or -// not their own variances have been measured before. +// isMarkerType reports whether t is a marker type of the innermost variance +// computation or variance annotation check in progress: an instantiation of +// the generic type or type alias being measured with one of its type +// parameters replaced by a variance marker. Instantiations of other types with +// markers, such as those nested in the type being measured, are not marker +// types, whether or not their own variances have been measured before. Nor +// are those of measurements further down the variance stack: a reference to +// them must get their variances, so that the circularity is found and +// measured from its canonical entry (see getRecursiveVariances). func (c *Checker) isMarkerType(t *Type) bool { if len(c.varianceStack) == 0 && c.varianceTypeParameter == nil { return false @@ -1765,7 +1710,7 @@ func (c *Checker) isMarkerInstantiation(symbol *ast.Symbol, typeParameters []*Ty case c.markerSuperTypeForCheck, c.markerSubTypeForCheck: return typeParameters[replaced] == c.varianceTypeParameter default: - return c.getVarianceStackIndex(symbol) >= 0 + return len(c.varianceStack) != 0 && c.varianceStack[len(c.varianceStack)-1].symbol == symbol } } diff --git a/tsc/testdata/baselines/reference/compiler/circularVariance1.errors.txt b/tsc/testdata/baselines/reference/compiler/circularVariance1.errors.txt index f5b8506839819..e36e5bfcda1d1 100644 --- a/tsc/testdata/baselines/reference/compiler/circularVariance1.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/circularVariance1.errors.txt @@ -1,38 +1,10 @@ -circularVariance1.ts(17,1): error TS2322: Type 'Foo' is not assignable to type 'Foo'. - Types of property 'f' are incompatible. - Type 'Bar' is not assignable to type 'Bar'. - Types of parameters 'x' and 'x' are incompatible. - Type 'Baz' is not assignable to type 'Baz'. - The types of 'value.x' are incompatible between these types. - Type 'unknown[][]' is not assignable to type 'string[][]'. - Type 'unknown[]' is not assignable to type 'string[]'. - Type 'unknown' is not assignable to type 'string'. circularVariance1.ts(18,1): error TS2322: Type 'Foo' is not assignable to type 'Foo'. - Types of property 'x' are incompatible. - Type 'unknown' is not assignable to type 'string'. + Type 'unknown' is not assignable to type 'string'. circularVariance1.ts(23,1): error TS2322: Type 'Bar' is not assignable to type 'Bar'. - Types of parameters 'x' and 'x' are incompatible. - Type 'Baz' is not assignable to type 'Baz'. - The types of 'value.x' are incompatible between these types. - Type 'unknown[][]' is not assignable to type 'string[][]'. - Type 'unknown[]' is not assignable to type 'string[]'. - Type 'unknown' is not assignable to type 'string'. -circularVariance1.ts(24,1): error TS2322: Type 'Bar' is not assignable to type 'Bar'. - Types of parameters 'x' and 'x' are incompatible. - Type 'Baz' is not assignable to type 'Baz'. - The types of 'value.f' are incompatible between these types. - Type 'Bar' is not assignable to type 'Bar'. - Types of parameters 'x' and 'x' are incompatible. - Type 'Baz' is not assignable to type 'Baz'. - The types of 'value.x' are incompatible between these types. - Type 'unknown[][][][]' is not assignable to type 'string[][][][]'. - Type 'unknown[][][]' is not assignable to type 'string[][][]'. - Type 'unknown[][]' is not assignable to type 'string[][]'. - Type 'unknown[]' is not assignable to type 'string[]'. - Type 'unknown' is not assignable to type 'string'. + Type 'unknown' is not assignable to type 'string'. -==== circularVariance1.ts (4 errors) ==== +==== circularVariance1.ts (2 errors) ==== // https://github.com/microsoft/TypeScript/tsc/pull/4820 type Bar = (x: Baz) => void; @@ -50,21 +22,10 @@ circularVariance1.ts(24,1): error TS2322: Type 'Bar' is not assignable declare let foo2: Foo; foo1 = foo2; - ~~~~ -!!! error TS2322: Type 'Foo' is not assignable to type 'Foo'. -!!! error TS2322: Types of property 'f' are incompatible. -!!! error TS2322: Type 'Bar' is not assignable to type 'Bar'. -!!! error TS2322: Types of parameters 'x' and 'x' are incompatible. -!!! error TS2322: Type 'Baz' is not assignable to type 'Baz'. -!!! error TS2322: The types of 'value.x' are incompatible between these types. -!!! error TS2322: Type 'unknown[][]' is not assignable to type 'string[][]'. -!!! error TS2322: Type 'unknown[]' is not assignable to type 'string[]'. -!!! error TS2322: Type 'unknown' is not assignable to type 'string'. foo2 = foo1; // Error ~~~~ !!! error TS2322: Type 'Foo' is not assignable to type 'Foo'. -!!! error TS2322: Types of property 'x' are incompatible. -!!! error TS2322: Type 'unknown' is not assignable to type 'string'. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. declare let bar1: Bar; declare let bar2: Bar; @@ -72,25 +33,6 @@ circularVariance1.ts(24,1): error TS2322: Type 'Bar' is not assignable bar1 = bar2; // Error ~~~~ !!! error TS2322: Type 'Bar' is not assignable to type 'Bar'. -!!! error TS2322: Types of parameters 'x' and 'x' are incompatible. -!!! error TS2322: Type 'Baz' is not assignable to type 'Baz'. -!!! error TS2322: The types of 'value.x' are incompatible between these types. -!!! error TS2322: Type 'unknown[][]' is not assignable to type 'string[][]'. -!!! error TS2322: Type 'unknown[]' is not assignable to type 'string[]'. -!!! error TS2322: Type 'unknown' is not assignable to type 'string'. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. bar2 = bar1; - ~~~~ -!!! error TS2322: Type 'Bar' is not assignable to type 'Bar'. -!!! error TS2322: Types of parameters 'x' and 'x' are incompatible. -!!! error TS2322: Type 'Baz' is not assignable to type 'Baz'. -!!! error TS2322: The types of 'value.f' are incompatible between these types. -!!! error TS2322: Type 'Bar' is not assignable to type 'Bar'. -!!! error TS2322: Types of parameters 'x' and 'x' are incompatible. -!!! error TS2322: Type 'Baz' is not assignable to type 'Baz'. -!!! error TS2322: The types of 'value.x' are incompatible between these types. -!!! error TS2322: Type 'unknown[][][][]' is not assignable to type 'string[][][][]'. -!!! error TS2322: Type 'unknown[][][]' is not assignable to type 'string[][][]'. -!!! error TS2322: Type 'unknown[][]' is not assignable to type 'string[][]'. -!!! error TS2322: Type 'unknown[]' is not assignable to type 'string[]'. -!!! error TS2322: Type 'unknown' is not assignable to type 'string'. \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/circularVariance2.errors.txt b/tsc/testdata/baselines/reference/compiler/circularVariance2.errors.txt index 6c91469b82cc0..3f3c2fa71be32 100644 --- a/tsc/testdata/baselines/reference/compiler/circularVariance2.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/circularVariance2.errors.txt @@ -1,38 +1,10 @@ circularVariance2.ts(17,1): error TS2322: Type 'Bar' is not assignable to type 'Bar'. - Types of parameters 'x' and 'x' are incompatible. - Type 'Baz' is not assignable to type 'Baz'. - The types of 'value.x' are incompatible between these types. - Type 'unknown[][]' is not assignable to type 'string[][]'. - Type 'unknown[]' is not assignable to type 'string[]'. - Type 'unknown' is not assignable to type 'string'. -circularVariance2.ts(18,1): error TS2322: Type 'Bar' is not assignable to type 'Bar'. - Types of parameters 'x' and 'x' are incompatible. - Type 'Baz' is not assignable to type 'Baz'. - The types of 'value.f' are incompatible between these types. - Type 'Bar' is not assignable to type 'Bar'. - Types of parameters 'x' and 'x' are incompatible. - Type 'Baz' is not assignable to type 'Baz'. - The types of 'value.x' are incompatible between these types. - Type 'unknown[][][][]' is not assignable to type 'string[][][][]'. - Type 'unknown[][][]' is not assignable to type 'string[][][]'. - Type 'unknown[][]' is not assignable to type 'string[][]'. - Type 'unknown[]' is not assignable to type 'string[]'. - Type 'unknown' is not assignable to type 'string'. -circularVariance2.ts(23,1): error TS2322: Type 'Foo' is not assignable to type 'Foo'. - Types of property 'f' are incompatible. - Type 'Bar' is not assignable to type 'Bar'. - Types of parameters 'x' and 'x' are incompatible. - Type 'Baz' is not assignable to type 'Baz'. - The types of 'value.x' are incompatible between these types. - Type 'unknown[][]' is not assignable to type 'string[][]'. - Type 'unknown[]' is not assignable to type 'string[]'. - Type 'unknown' is not assignable to type 'string'. + Type 'unknown' is not assignable to type 'string'. circularVariance2.ts(24,1): error TS2322: Type 'Foo' is not assignable to type 'Foo'. - Types of property 'x' are incompatible. - Type 'unknown' is not assignable to type 'string'. + Type 'unknown' is not assignable to type 'string'. -==== circularVariance2.ts (4 errors) ==== +==== circularVariance2.ts (2 errors) ==== // https://github.com/microsoft/TypeScript/tsc/pull/4820 type Bar = (x: Baz) => void; @@ -52,45 +24,15 @@ circularVariance2.ts(24,1): error TS2322: Type 'Foo' is not assignable bar1 = bar2; // Error ~~~~ !!! error TS2322: Type 'Bar' is not assignable to type 'Bar'. -!!! error TS2322: Types of parameters 'x' and 'x' are incompatible. -!!! error TS2322: Type 'Baz' is not assignable to type 'Baz'. -!!! error TS2322: The types of 'value.x' are incompatible between these types. -!!! error TS2322: Type 'unknown[][]' is not assignable to type 'string[][]'. -!!! error TS2322: Type 'unknown[]' is not assignable to type 'string[]'. -!!! error TS2322: Type 'unknown' is not assignable to type 'string'. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. bar2 = bar1; - ~~~~ -!!! error TS2322: Type 'Bar' is not assignable to type 'Bar'. -!!! error TS2322: Types of parameters 'x' and 'x' are incompatible. -!!! error TS2322: Type 'Baz' is not assignable to type 'Baz'. -!!! error TS2322: The types of 'value.f' are incompatible between these types. -!!! error TS2322: Type 'Bar' is not assignable to type 'Bar'. -!!! error TS2322: Types of parameters 'x' and 'x' are incompatible. -!!! error TS2322: Type 'Baz' is not assignable to type 'Baz'. -!!! error TS2322: The types of 'value.x' are incompatible between these types. -!!! error TS2322: Type 'unknown[][][][]' is not assignable to type 'string[][][][]'. -!!! error TS2322: Type 'unknown[][][]' is not assignable to type 'string[][][]'. -!!! error TS2322: Type 'unknown[][]' is not assignable to type 'string[][]'. -!!! error TS2322: Type 'unknown[]' is not assignable to type 'string[]'. -!!! error TS2322: Type 'unknown' is not assignable to type 'string'. declare let foo1: Foo; declare let foo2: Foo; foo1 = foo2; - ~~~~ -!!! error TS2322: Type 'Foo' is not assignable to type 'Foo'. -!!! error TS2322: Types of property 'f' are incompatible. -!!! error TS2322: Type 'Bar' is not assignable to type 'Bar'. -!!! error TS2322: Types of parameters 'x' and 'x' are incompatible. -!!! error TS2322: Type 'Baz' is not assignable to type 'Baz'. -!!! error TS2322: The types of 'value.x' are incompatible between these types. -!!! error TS2322: Type 'unknown[][]' is not assignable to type 'string[][]'. -!!! error TS2322: Type 'unknown[]' is not assignable to type 'string[]'. -!!! error TS2322: Type 'unknown' is not assignable to type 'string'. foo2 = foo1; // Error ~~~~ !!! error TS2322: Type 'Foo' is not assignable to type 'Foo'. -!!! error TS2322: Types of property 'x' are incompatible. -!!! error TS2322: Type 'unknown' is not assignable to type 'string'. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/recursiveVarianceFixedPoint.errors.txt b/tsc/testdata/baselines/reference/compiler/recursiveVarianceFixedPoint.errors.txt index b431656aef8e4..1b54f45a5c6a5 100644 --- a/tsc/testdata/baselines/reference/compiler/recursiveVarianceFixedPoint.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/recursiveVarianceFixedPoint.errors.txt @@ -12,79 +12,9 @@ annotations.ts(20,1): error TS2322: Type 'AnnotatedStore' is not assign Types of property 'value' are incompatible. Type 'unknown' is not assignable to type 'string'. columnDefFirst.ts(14,1): error TS2322: Type 'ColumnDef<{ name: string; }, string>' is not assignable to type 'ColumnDef<{ name: string; }, unknown>'. - Types of property 'cell' are incompatible. - Type '((column: Column<{ name: string; }, string>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, unknown>) => void) | undefined'. - Type '(column: Column<{ name: string; }, string>) => void' is not assignable to type '(column: Column<{ name: string; }, unknown>) => void'. - Types of parameters 'column' and 'column' are incompatible. - Type 'Column<{ name: string; }, unknown>' is not assignable to type 'Column<{ name: string; }, string>'. - Types of property 'accessorFn' are incompatible. - Type '((row: { name: string; }) => unknown) | undefined' is not assignable to type '((row: { name: string; }) => string) | undefined'. - Type '(row: { name: string; }) => unknown' is not assignable to type '(row: { name: string; }) => string'. - Type 'unknown' is not assignable to type 'string'. -columnDefFirst.ts(15,1): error TS2322: Type 'ColumnDef<{ name: string; }, unknown>' is not assignable to type 'ColumnDef<{ name: string; }, string>'. - Types of property 'cell' are incompatible. - Type '((column: Column<{ name: string; }, unknown>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, string>) => void) | undefined'. - Type '(column: Column<{ name: string; }, unknown>) => void' is not assignable to type '(column: Column<{ name: string; }, string>) => void'. - Types of parameters 'column' and 'column' are incompatible. - Type 'Column<{ name: string; }, string>' is not assignable to type 'Column<{ name: string; }, unknown>'. - The types of 'columnDef.cell' are incompatible between these types. - Type '((column: Column<{ name: string; }, string>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, unknown>) => void) | undefined'. - Type '(column: Column<{ name: string; }, string>) => void' is not assignable to type '(column: Column<{ name: string; }, unknown>) => void'. - Types of parameters 'column' and 'column' are incompatible. - Type 'Column<{ name: string; }, unknown>' is not assignable to type 'Column<{ name: string; }, string>'. - Types of property 'accessorFn' are incompatible. - Type '((row: { name: string; }) => unknown) | undefined' is not assignable to type '((row: { name: string; }) => string) | undefined'. - Type '(row: { name: string; }) => unknown' is not assignable to type '(row: { name: string; }) => string'. - Type 'unknown' is not assignable to type 'string'. -columnFirst.ts(14,1): error TS2322: Type 'ColumnDef<{ name: string; }, string>' is not assignable to type 'ColumnDef<{ name: string; }, unknown>'. - Types of property 'cell' are incompatible. - Type '((column: Column<{ name: string; }, string>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, unknown>) => void) | undefined'. - Type '(column: Column<{ name: string; }, string>) => void' is not assignable to type '(column: Column<{ name: string; }, unknown>) => void'. - Types of parameters 'column' and 'column' are incompatible. - Type 'Column<{ name: string; }, unknown>' is not assignable to type 'Column<{ name: string; }, string>'. - The types of 'columnDef.cell' are incompatible between these types. - Type '((column: Column<{ name: string; }, unknown>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, string>) => void) | undefined'. - Type '(column: Column<{ name: string; }, unknown>) => void' is not assignable to type '(column: Column<{ name: string; }, string>) => void'. - Types of parameters 'column' and 'column' are incompatible. - Type 'Column<{ name: string; }, string>' is not assignable to type 'Column<{ name: string; }, unknown>'. - Type 'unknown' is not assignable to type 'string'. -columnFirst.ts(15,1): error TS2322: Type 'ColumnDef<{ name: string; }, unknown>' is not assignable to type 'ColumnDef<{ name: string; }, string>'. - Types of property 'cell' are incompatible. - Type '((column: Column<{ name: string; }, unknown>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, string>) => void) | undefined'. - Type '(column: Column<{ name: string; }, unknown>) => void' is not assignable to type '(column: Column<{ name: string; }, string>) => void'. - Types of parameters 'column' and 'column' are incompatible. - Type 'Column<{ name: string; }, string>' is not assignable to type 'Column<{ name: string; }, unknown>'. - The types of 'columnDef.cell' are incompatible between these types. - Type '((column: Column<{ name: string; }, string>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, unknown>) => void) | undefined'. - Type '(column: Column<{ name: string; }, string>) => void' is not assignable to type '(column: Column<{ name: string; }, unknown>) => void'. - Types of parameters 'column' and 'column' are incompatible. - Type 'Column<{ name: string; }, unknown>' is not assignable to type 'Column<{ name: string; }, string>'. - Types of property 'accessorFn' are incompatible. - Type '((row: { name: string; }) => unknown) | undefined' is not assignable to type '((row: { name: string; }) => string) | undefined'. - Type '(row: { name: string; }) => unknown' is not assignable to type '(row: { name: string; }) => string'. - Type 'unknown' is not assignable to type 'string'. + Type 'unknown' is not assignable to type 'string'. listenerFirst.ts(14,1): error TS2322: Type 'Listener' is not assignable to type 'Listener'. - Types of parameters 'batch' and 'batch' are incompatible. - Type 'Store' is not assignable to type 'Store'. - Types of property 'listener' are incompatible. - Type 'Listener' is not assignable to type 'Listener'. - Types of parameters 'batch' and 'batch' are incompatible. - Type 'Store' is not assignable to type 'Store'. - Type 'unknown[][]' is not assignable to type 'string[][]'. - Type 'unknown[]' is not assignable to type 'string[]'. - Type 'unknown' is not assignable to type 'string'. -listenerFirst.ts(15,1): error TS2322: Type 'Store' is not assignable to type 'Store'. - Types of property 'listener' are incompatible. - Type 'Listener' is not assignable to type 'Listener'. - Types of parameters 'batch' and 'batch' are incompatible. - Type 'Store' is not assignable to type 'Store'. - Types of property 'listener' are incompatible. - Type 'Listener' is not assignable to type 'Listener'. - Types of parameters 'batch' and 'batch' are incompatible. - Type 'Store' is not assignable to type 'Store'. - Type 'unknown[][]' is not assignable to type 'string[][]'. - Type 'unknown[]' is not assignable to type 'string[]'. - Type 'unknown' is not assignable to type 'string'. + Type 'unknown' is not assignable to type 'string'. nestedComposition.ts(14,1): error TS2322: Type 'Outer' is not assignable to type 'Outer'. Types of property 'next' are incompatible. Type 'Inner>' is not assignable to type 'Inner>'. @@ -96,25 +26,11 @@ nestedComposition.ts(15,1): error TS2322: Type 'Outer' is not assignabl Type 'unknown' is not assignable to type 'string'. positiveRecursion.ts(18,1): error TS2322: Type 'Tree' is not assignable to type 'Tree'. Type 'unknown' is not assignable to type 'string'. -storeFirst.ts(14,1): error TS2322: Type 'Store' is not assignable to type 'Store'. - Types of property 'listener' are incompatible. - Type 'Listener' is not assignable to type 'Listener'. - Types of parameters 'batch' and 'batch' are incompatible. - Type 'Store' is not assignable to type 'Store'. - Types of property 'value' are incompatible. - Type 'unknown[]' is not assignable to type 'string[]'. - Type 'unknown' is not assignable to type 'string'. -storeFirst.ts(15,1): error TS2322: Type 'Listener' is not assignable to type 'Listener'. - Types of parameters 'batch' and 'batch' are incompatible. - Type 'Store' is not assignable to type 'Store'. - Types of property 'value' are incompatible. - Type 'unknown[]' is not assignable to type 'string[]'. - Type 'unknown' is not assignable to type 'string'. structuralMeasurement.ts(23,1): error TS2322: Type 'GenericMethod' is not assignable to type 'GenericMethod'. Type 'unknown' is not assignable to type 'string'. -==== storeFirst.ts (2 errors) ==== +==== storeFirst.ts (0 errors) ==== export {}; interface Store { @@ -129,25 +45,9 @@ structuralMeasurement.ts(23,1): error TS2322: Type 'GenericMethod' is n declare let unknownListener: Listener; unknowns = strings; // Error - ~~~~~~~~ -!!! error TS2322: Type 'Store' is not assignable to type 'Store'. -!!! error TS2322: Types of property 'listener' are incompatible. -!!! error TS2322: Type 'Listener' is not assignable to type 'Listener'. -!!! error TS2322: Types of parameters 'batch' and 'batch' are incompatible. -!!! error TS2322: Type 'Store' is not assignable to type 'Store'. -!!! error TS2322: Types of property 'value' are incompatible. -!!! error TS2322: Type 'unknown[]' is not assignable to type 'string[]'. -!!! error TS2322: Type 'unknown' is not assignable to type 'string'. unknownListener = stringListener; // Error - ~~~~~~~~~~~~~~~ -!!! error TS2322: Type 'Listener' is not assignable to type 'Listener'. -!!! error TS2322: Types of parameters 'batch' and 'batch' are incompatible. -!!! error TS2322: Type 'Store' is not assignable to type 'Store'. -!!! error TS2322: Types of property 'value' are incompatible. -!!! error TS2322: Type 'unknown[]' is not assignable to type 'string[]'. -!!! error TS2322: Type 'unknown' is not assignable to type 'string'. -==== listenerFirst.ts (2 errors) ==== +==== listenerFirst.ts (1 errors) ==== export {}; type Listener = (batch: Store) => void; @@ -164,31 +64,10 @@ structuralMeasurement.ts(23,1): error TS2322: Type 'GenericMethod' is n unknownListener = stringListener; // Error ~~~~~~~~~~~~~~~ !!! error TS2322: Type 'Listener' is not assignable to type 'Listener'. -!!! error TS2322: Types of parameters 'batch' and 'batch' are incompatible. -!!! error TS2322: Type 'Store' is not assignable to type 'Store'. -!!! error TS2322: Types of property 'listener' are incompatible. -!!! error TS2322: Type 'Listener' is not assignable to type 'Listener'. -!!! error TS2322: Types of parameters 'batch' and 'batch' are incompatible. -!!! error TS2322: Type 'Store' is not assignable to type 'Store'. -!!! error TS2322: Type 'unknown[][]' is not assignable to type 'string[][]'. -!!! error TS2322: Type 'unknown[]' is not assignable to type 'string[]'. -!!! error TS2322: Type 'unknown' is not assignable to type 'string'. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. unknowns = strings; // Error - ~~~~~~~~ -!!! error TS2322: Type 'Store' is not assignable to type 'Store'. -!!! error TS2322: Types of property 'listener' are incompatible. -!!! error TS2322: Type 'Listener' is not assignable to type 'Listener'. -!!! error TS2322: Types of parameters 'batch' and 'batch' are incompatible. -!!! error TS2322: Type 'Store' is not assignable to type 'Store'. -!!! error TS2322: Types of property 'listener' are incompatible. -!!! error TS2322: Type 'Listener' is not assignable to type 'Listener'. -!!! error TS2322: Types of parameters 'batch' and 'batch' are incompatible. -!!! error TS2322: Type 'Store' is not assignable to type 'Store'. -!!! error TS2322: Type 'unknown[][]' is not assignable to type 'string[][]'. -!!! error TS2322: Type 'unknown[]' is not assignable to type 'string[]'. -!!! error TS2322: Type 'unknown' is not assignable to type 'string'. -==== columnDefFirst.ts (2 errors) ==== +==== columnDefFirst.ts (1 errors) ==== export {}; interface ColumnDef { @@ -205,34 +84,10 @@ structuralMeasurement.ts(23,1): error TS2322: Type 'GenericMethod' is n unknownColumn = stringColumn; // Error ~~~~~~~~~~~~~ !!! error TS2322: Type 'ColumnDef<{ name: string; }, string>' is not assignable to type 'ColumnDef<{ name: string; }, unknown>'. -!!! error TS2322: Types of property 'cell' are incompatible. -!!! error TS2322: Type '((column: Column<{ name: string; }, string>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, unknown>) => void) | undefined'. -!!! error TS2322: Type '(column: Column<{ name: string; }, string>) => void' is not assignable to type '(column: Column<{ name: string; }, unknown>) => void'. -!!! error TS2322: Types of parameters 'column' and 'column' are incompatible. -!!! error TS2322: Type 'Column<{ name: string; }, unknown>' is not assignable to type 'Column<{ name: string; }, string>'. -!!! error TS2322: Types of property 'accessorFn' are incompatible. -!!! error TS2322: Type '((row: { name: string; }) => unknown) | undefined' is not assignable to type '((row: { name: string; }) => string) | undefined'. -!!! error TS2322: Type '(row: { name: string; }) => unknown' is not assignable to type '(row: { name: string; }) => string'. -!!! error TS2322: Type 'unknown' is not assignable to type 'string'. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. stringColumn = unknownColumn; // Error - ~~~~~~~~~~~~ -!!! error TS2322: Type 'ColumnDef<{ name: string; }, unknown>' is not assignable to type 'ColumnDef<{ name: string; }, string>'. -!!! error TS2322: Types of property 'cell' are incompatible. -!!! error TS2322: Type '((column: Column<{ name: string; }, unknown>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, string>) => void) | undefined'. -!!! error TS2322: Type '(column: Column<{ name: string; }, unknown>) => void' is not assignable to type '(column: Column<{ name: string; }, string>) => void'. -!!! error TS2322: Types of parameters 'column' and 'column' are incompatible. -!!! error TS2322: Type 'Column<{ name: string; }, string>' is not assignable to type 'Column<{ name: string; }, unknown>'. -!!! error TS2322: The types of 'columnDef.cell' are incompatible between these types. -!!! error TS2322: Type '((column: Column<{ name: string; }, string>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, unknown>) => void) | undefined'. -!!! error TS2322: Type '(column: Column<{ name: string; }, string>) => void' is not assignable to type '(column: Column<{ name: string; }, unknown>) => void'. -!!! error TS2322: Types of parameters 'column' and 'column' are incompatible. -!!! error TS2322: Type 'Column<{ name: string; }, unknown>' is not assignable to type 'Column<{ name: string; }, string>'. -!!! error TS2322: Types of property 'accessorFn' are incompatible. -!!! error TS2322: Type '((row: { name: string; }) => unknown) | undefined' is not assignable to type '((row: { name: string; }) => string) | undefined'. -!!! error TS2322: Type '(row: { name: string; }) => unknown' is not assignable to type '(row: { name: string; }) => string'. -!!! error TS2322: Type 'unknown' is not assignable to type 'string'. -==== columnFirst.ts (2 errors) ==== +==== columnFirst.ts (0 errors) ==== export {}; interface Column { @@ -247,36 +102,7 @@ structuralMeasurement.ts(23,1): error TS2322: Type 'GenericMethod' is n declare let unknownColumn: ColumnDef<{ name: string }, unknown>; unknownColumn = stringColumn; // Error - ~~~~~~~~~~~~~ -!!! error TS2322: Type 'ColumnDef<{ name: string; }, string>' is not assignable to type 'ColumnDef<{ name: string; }, unknown>'. -!!! error TS2322: Types of property 'cell' are incompatible. -!!! error TS2322: Type '((column: Column<{ name: string; }, string>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, unknown>) => void) | undefined'. -!!! error TS2322: Type '(column: Column<{ name: string; }, string>) => void' is not assignable to type '(column: Column<{ name: string; }, unknown>) => void'. -!!! error TS2322: Types of parameters 'column' and 'column' are incompatible. -!!! error TS2322: Type 'Column<{ name: string; }, unknown>' is not assignable to type 'Column<{ name: string; }, string>'. -!!! error TS2322: The types of 'columnDef.cell' are incompatible between these types. -!!! error TS2322: Type '((column: Column<{ name: string; }, unknown>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, string>) => void) | undefined'. -!!! error TS2322: Type '(column: Column<{ name: string; }, unknown>) => void' is not assignable to type '(column: Column<{ name: string; }, string>) => void'. -!!! error TS2322: Types of parameters 'column' and 'column' are incompatible. -!!! error TS2322: Type 'Column<{ name: string; }, string>' is not assignable to type 'Column<{ name: string; }, unknown>'. -!!! error TS2322: Type 'unknown' is not assignable to type 'string'. stringColumn = unknownColumn; // Error - ~~~~~~~~~~~~ -!!! error TS2322: Type 'ColumnDef<{ name: string; }, unknown>' is not assignable to type 'ColumnDef<{ name: string; }, string>'. -!!! error TS2322: Types of property 'cell' are incompatible. -!!! error TS2322: Type '((column: Column<{ name: string; }, unknown>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, string>) => void) | undefined'. -!!! error TS2322: Type '(column: Column<{ name: string; }, unknown>) => void' is not assignable to type '(column: Column<{ name: string; }, string>) => void'. -!!! error TS2322: Types of parameters 'column' and 'column' are incompatible. -!!! error TS2322: Type 'Column<{ name: string; }, string>' is not assignable to type 'Column<{ name: string; }, unknown>'. -!!! error TS2322: The types of 'columnDef.cell' are incompatible between these types. -!!! error TS2322: Type '((column: Column<{ name: string; }, string>) => void) | undefined' is not assignable to type '((column: Column<{ name: string; }, unknown>) => void) | undefined'. -!!! error TS2322: Type '(column: Column<{ name: string; }, string>) => void' is not assignable to type '(column: Column<{ name: string; }, unknown>) => void'. -!!! error TS2322: Types of parameters 'column' and 'column' are incompatible. -!!! error TS2322: Type 'Column<{ name: string; }, unknown>' is not assignable to type 'Column<{ name: string; }, string>'. -!!! error TS2322: Types of property 'accessorFn' are incompatible. -!!! error TS2322: Type '((row: { name: string; }) => unknown) | undefined' is not assignable to type '((row: { name: string; }) => string) | undefined'. -!!! error TS2322: Type '(row: { name: string; }) => unknown' is not assignable to type '(row: { name: string; }) => string'. -!!! error TS2322: Type 'unknown' is not assignable to type 'string'. ==== positiveRecursion.ts (1 errors) ==== export {}; diff --git a/tsc/testdata/baselines/reference/compiler/relationDeeplyNestedCheckOrder.errors.txt b/tsc/testdata/baselines/reference/compiler/relationDeeplyNestedCheckOrder.errors.txt deleted file mode 100644 index aee81d03ee5ad..0000000000000 --- a/tsc/testdata/baselines/reference/compiler/relationDeeplyNestedCheckOrder.errors.txt +++ /dev/null @@ -1,31 +0,0 @@ -relationDeeplyNestedCheckOrder.ts(12,1): error TS2322: Type 'A<{ a: string; }>' is not assignable to type 'A<{ a: "lit"; }>'. - The types of 'm1.a.m0.m1' are incompatible between these types. - Type 'string' is not assignable to type '"lit"'. -relationDeeplyNestedCheckOrder.ts(13,1): error TS2322: Type 'B<{ a: string; }>' is not assignable to type 'B<{ a: "lit"; }>'. - The types of 'm0.m1.a.m0.m1' are incompatible between these types. - Type 'string' is not assignable to type '"lit"'. - - -==== relationDeeplyNestedCheckOrder.ts (2 errors) ==== - // Relating 'B<{ a: string }>' to 'B<{ a: "lit" }>' eventually relates 'string' - // to '"lit"' through 'm0.m1.a.m0.m1'. Relating the 'A' instantiations first - // reaches the same comparison only after giving up on deeply nested types, - // which must not make relating the 'B' instantiations succeed afterwards. - - type A = { m0: (x: B) => void; m1: { [K in keyof T]: B } }; - type B = { m0: A }; - - declare let a1: A<{ a: string }>, a2: A<{ a: "lit" }>; - declare let b1: B<{ a: string }>, b2: B<{ a: "lit" }>; - - a2 = a1; - ~~ -!!! error TS2322: Type 'A<{ a: string; }>' is not assignable to type 'A<{ a: "lit"; }>'. -!!! error TS2322: The types of 'm1.a.m0.m1' are incompatible between these types. -!!! error TS2322: Type 'string' is not assignable to type '"lit"'. - b2 = b1; // Error - ~~ -!!! error TS2322: Type 'B<{ a: string; }>' is not assignable to type 'B<{ a: "lit"; }>'. -!!! error TS2322: The types of 'm0.m1.a.m0.m1' are incompatible between these types. -!!! error TS2322: Type 'string' is not assignable to type '"lit"'. - \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/relationDeeplyNestedCheckOrder.symbols b/tsc/testdata/baselines/reference/compiler/relationDeeplyNestedCheckOrder.symbols index 50e733d8606c1..cdf23cc04d684 100644 --- a/tsc/testdata/baselines/reference/compiler/relationDeeplyNestedCheckOrder.symbols +++ b/tsc/testdata/baselines/reference/compiler/relationDeeplyNestedCheckOrder.symbols @@ -2,52 +2,53 @@ === relationDeeplyNestedCheckOrder.ts === // Relating 'B<{ a: string }>' to 'B<{ a: "lit" }>' eventually relates 'string' -// to '"lit"' through 'm0.m1.a.m0.m1'. Relating the 'A' instantiations first -// reaches the same comparison only after giving up on deeply nested types, -// which must not make relating the 'B' instantiations succeed afterwards. +// to '"lit"' through 'm0.m1.a.m0.m1', but only after measuring the variances +// of 'A', which gives up on deeply nested types. TypeScript reports an error +// for the 'B' assignment only when it is checked before the 'A' assignment; +// the result must not depend on which is checked first. type A = { m0: (x: B) => void; m1: { [K in keyof T]: B } }; >A : Symbol(A, Decl(relationDeeplyNestedCheckOrder.ts, 0, 0)) ->T : Symbol(T, Decl(relationDeeplyNestedCheckOrder.ts, 5, 7)) ->m0 : Symbol(m0, Decl(relationDeeplyNestedCheckOrder.ts, 5, 13)) ->x : Symbol(x, Decl(relationDeeplyNestedCheckOrder.ts, 5, 19)) ->B : Symbol(B, Decl(relationDeeplyNestedCheckOrder.ts, 5, 71)) ->T : Symbol(T, Decl(relationDeeplyNestedCheckOrder.ts, 5, 7)) ->m1 : Symbol(m1, Decl(relationDeeplyNestedCheckOrder.ts, 5, 36)) ->K : Symbol(K, Decl(relationDeeplyNestedCheckOrder.ts, 5, 44)) ->T : Symbol(T, Decl(relationDeeplyNestedCheckOrder.ts, 5, 7)) ->B : Symbol(B, Decl(relationDeeplyNestedCheckOrder.ts, 5, 71)) ->T : Symbol(T, Decl(relationDeeplyNestedCheckOrder.ts, 5, 7)) ->K : Symbol(K, Decl(relationDeeplyNestedCheckOrder.ts, 5, 44)) - -type B = { m0: A }; ->B : Symbol(B, Decl(relationDeeplyNestedCheckOrder.ts, 5, 71)) >T : Symbol(T, Decl(relationDeeplyNestedCheckOrder.ts, 6, 7)) >m0 : Symbol(m0, Decl(relationDeeplyNestedCheckOrder.ts, 6, 13)) ->A : Symbol(A, Decl(relationDeeplyNestedCheckOrder.ts, 0, 0)) +>x : Symbol(x, Decl(relationDeeplyNestedCheckOrder.ts, 6, 19)) +>B : Symbol(B, Decl(relationDeeplyNestedCheckOrder.ts, 6, 71)) >T : Symbol(T, Decl(relationDeeplyNestedCheckOrder.ts, 6, 7)) +>m1 : Symbol(m1, Decl(relationDeeplyNestedCheckOrder.ts, 6, 36)) +>K : Symbol(K, Decl(relationDeeplyNestedCheckOrder.ts, 6, 44)) +>T : Symbol(T, Decl(relationDeeplyNestedCheckOrder.ts, 6, 7)) +>B : Symbol(B, Decl(relationDeeplyNestedCheckOrder.ts, 6, 71)) +>T : Symbol(T, Decl(relationDeeplyNestedCheckOrder.ts, 6, 7)) +>K : Symbol(K, Decl(relationDeeplyNestedCheckOrder.ts, 6, 44)) + +type B = { m0: A }; +>B : Symbol(B, Decl(relationDeeplyNestedCheckOrder.ts, 6, 71)) +>T : Symbol(T, Decl(relationDeeplyNestedCheckOrder.ts, 7, 7)) +>m0 : Symbol(m0, Decl(relationDeeplyNestedCheckOrder.ts, 7, 13)) +>A : Symbol(A, Decl(relationDeeplyNestedCheckOrder.ts, 0, 0)) +>T : Symbol(T, Decl(relationDeeplyNestedCheckOrder.ts, 7, 7)) declare let a1: A<{ a: string }>, a2: A<{ a: "lit" }>; ->a1 : Symbol(a1, Decl(relationDeeplyNestedCheckOrder.ts, 8, 11)) +>a1 : Symbol(a1, Decl(relationDeeplyNestedCheckOrder.ts, 9, 11)) >A : Symbol(A, Decl(relationDeeplyNestedCheckOrder.ts, 0, 0)) ->a : Symbol(a, Decl(relationDeeplyNestedCheckOrder.ts, 8, 19)) ->a2 : Symbol(a2, Decl(relationDeeplyNestedCheckOrder.ts, 8, 33)) +>a : Symbol(a, Decl(relationDeeplyNestedCheckOrder.ts, 9, 19)) +>a2 : Symbol(a2, Decl(relationDeeplyNestedCheckOrder.ts, 9, 33)) >A : Symbol(A, Decl(relationDeeplyNestedCheckOrder.ts, 0, 0)) ->a : Symbol(a, Decl(relationDeeplyNestedCheckOrder.ts, 8, 41)) +>a : Symbol(a, Decl(relationDeeplyNestedCheckOrder.ts, 9, 41)) declare let b1: B<{ a: string }>, b2: B<{ a: "lit" }>; ->b1 : Symbol(b1, Decl(relationDeeplyNestedCheckOrder.ts, 9, 11)) ->B : Symbol(B, Decl(relationDeeplyNestedCheckOrder.ts, 5, 71)) ->a : Symbol(a, Decl(relationDeeplyNestedCheckOrder.ts, 9, 19)) ->b2 : Symbol(b2, Decl(relationDeeplyNestedCheckOrder.ts, 9, 33)) ->B : Symbol(B, Decl(relationDeeplyNestedCheckOrder.ts, 5, 71)) ->a : Symbol(a, Decl(relationDeeplyNestedCheckOrder.ts, 9, 41)) +>b1 : Symbol(b1, Decl(relationDeeplyNestedCheckOrder.ts, 10, 11)) +>B : Symbol(B, Decl(relationDeeplyNestedCheckOrder.ts, 6, 71)) +>a : Symbol(a, Decl(relationDeeplyNestedCheckOrder.ts, 10, 19)) +>b2 : Symbol(b2, Decl(relationDeeplyNestedCheckOrder.ts, 10, 33)) +>B : Symbol(B, Decl(relationDeeplyNestedCheckOrder.ts, 6, 71)) +>a : Symbol(a, Decl(relationDeeplyNestedCheckOrder.ts, 10, 41)) a2 = a1; ->a2 : Symbol(a2, Decl(relationDeeplyNestedCheckOrder.ts, 8, 33)) ->a1 : Symbol(a1, Decl(relationDeeplyNestedCheckOrder.ts, 8, 11)) +>a2 : Symbol(a2, Decl(relationDeeplyNestedCheckOrder.ts, 9, 33)) +>a1 : Symbol(a1, Decl(relationDeeplyNestedCheckOrder.ts, 9, 11)) -b2 = b1; // Error ->b2 : Symbol(b2, Decl(relationDeeplyNestedCheckOrder.ts, 9, 33)) ->b1 : Symbol(b1, Decl(relationDeeplyNestedCheckOrder.ts, 9, 11)) +b2 = b1; +>b2 : Symbol(b2, Decl(relationDeeplyNestedCheckOrder.ts, 10, 33)) +>b1 : Symbol(b1, Decl(relationDeeplyNestedCheckOrder.ts, 10, 11)) diff --git a/tsc/testdata/baselines/reference/compiler/relationDeeplyNestedCheckOrder.types b/tsc/testdata/baselines/reference/compiler/relationDeeplyNestedCheckOrder.types index a7755fb5d5533..fedd3a84c64f9 100644 --- a/tsc/testdata/baselines/reference/compiler/relationDeeplyNestedCheckOrder.types +++ b/tsc/testdata/baselines/reference/compiler/relationDeeplyNestedCheckOrder.types @@ -2,9 +2,10 @@ === relationDeeplyNestedCheckOrder.ts === // Relating 'B<{ a: string }>' to 'B<{ a: "lit" }>' eventually relates 'string' -// to '"lit"' through 'm0.m1.a.m0.m1'. Relating the 'A' instantiations first -// reaches the same comparison only after giving up on deeply nested types, -// which must not make relating the 'B' instantiations succeed afterwards. +// to '"lit"' through 'm0.m1.a.m0.m1', but only after measuring the variances +// of 'A', which gives up on deeply nested types. TypeScript reports an error +// for the 'B' assignment only when it is checked before the 'A' assignment; +// the result must not depend on which is checked first. type A = { m0: (x: B) => void; m1: { [K in keyof T]: B } }; >A : A @@ -33,7 +34,7 @@ a2 = a1; >a2 : A<{ a: "lit"; }> >a1 : A<{ a: string; }> -b2 = b1; // Error +b2 = b1; >b2 = b1 : B<{ a: string; }> >b2 : B<{ a: "lit"; }> >b1 : B<{ a: string; }> diff --git a/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.errors.txt b/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.errors.txt index 1c5cf559cc404..67a74da6b9b6d 100644 --- a/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.errors.txt @@ -1,10 +1,12 @@ -varianceCycleDiscardedDiagnostics.ts(22,7): error TS2322: Type 'string' is not assignable to type 'number'. +varianceCycleDiscardedDiagnostics.ts(14,33): error TS2339: Property 'foo' does not exist on type 'A'. ==== varianceCycleDiscardedDiagnostics.ts (1 errors) ==== // Measuring the variances of Bar resolves the type of Value, which picks an - // overload by relating Foo to Foo while the variances of Foo are - // still a guess. Diagnostics from that attempt must not outlive it. + // overload by relating Foo to Foo while the variances of Bar are + // still being measured. Diagnostics from that attempt must not outlive it, + // and the result must not depend on whether Value or the variances of Bar + // are needed first. interface A { a: string } interface B { foo: string } @@ -14,6 +16,8 @@ varianceCycleDiscardedDiagnostics.ts(22,7): error TS2322: Type 'string' is not a class Bar { x!: T; Value = pick(new Foo(this)).foo; + ~~~ +!!! error TS2339: Property 'foo' does not exist on type 'A'. } class Foo { @@ -24,6 +28,4 @@ varianceCycleDiscardedDiagnostics.ts(22,7): error TS2322: Type 'string' is not a } const v: number = new Bar().Value; - ~ -!!! error TS2322: Type 'string' is not assignable to type 'number'. \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.symbols b/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.symbols index 3da4d35f8204d..e08928ce4a02d 100644 --- a/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.symbols +++ b/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.symbols @@ -2,70 +2,70 @@ === varianceCycleDiscardedDiagnostics.ts === // Measuring the variances of Bar resolves the type of Value, which picks an -// overload by relating Foo to Foo while the variances of Foo are -// still a guess. Diagnostics from that attempt must not outlive it. +// overload by relating Foo to Foo while the variances of Bar are +// still being measured. Diagnostics from that attempt must not outlive it, +// and the result must not depend on whether Value or the variances of Bar +// are needed first. interface A { a: string } >A : Symbol(A, Decl(varianceCycleDiscardedDiagnostics.ts, 0, 0)) ->a : Symbol(A.a, Decl(varianceCycleDiscardedDiagnostics.ts, 4, 13)) +>a : Symbol(A.a, Decl(varianceCycleDiscardedDiagnostics.ts, 6, 13)) interface B { foo: string } ->B : Symbol(B, Decl(varianceCycleDiscardedDiagnostics.ts, 4, 25)) ->foo : Symbol(B.foo, Decl(varianceCycleDiscardedDiagnostics.ts, 5, 13)) +>B : Symbol(B, Decl(varianceCycleDiscardedDiagnostics.ts, 6, 25)) +>foo : Symbol(B.foo, Decl(varianceCycleDiscardedDiagnostics.ts, 7, 13)) declare function pick(x: Foo): A; ->pick : Symbol(pick, Decl(varianceCycleDiscardedDiagnostics.ts, 5, 27), Decl(varianceCycleDiscardedDiagnostics.ts, 6, 41)) ->x : Symbol(x, Decl(varianceCycleDiscardedDiagnostics.ts, 6, 22)) ->Foo : Symbol(Foo, Decl(varianceCycleDiscardedDiagnostics.ts, 12, 1)) +>pick : Symbol(pick, Decl(varianceCycleDiscardedDiagnostics.ts, 7, 27), Decl(varianceCycleDiscardedDiagnostics.ts, 8, 41)) +>x : Symbol(x, Decl(varianceCycleDiscardedDiagnostics.ts, 8, 22)) +>Foo : Symbol(Foo, Decl(varianceCycleDiscardedDiagnostics.ts, 14, 1)) >A : Symbol(A, Decl(varianceCycleDiscardedDiagnostics.ts, 0, 0)) declare function pick(x: object): B; ->pick : Symbol(pick, Decl(varianceCycleDiscardedDiagnostics.ts, 5, 27), Decl(varianceCycleDiscardedDiagnostics.ts, 6, 41)) ->x : Symbol(x, Decl(varianceCycleDiscardedDiagnostics.ts, 7, 22)) ->B : Symbol(B, Decl(varianceCycleDiscardedDiagnostics.ts, 4, 25)) +>pick : Symbol(pick, Decl(varianceCycleDiscardedDiagnostics.ts, 7, 27), Decl(varianceCycleDiscardedDiagnostics.ts, 8, 41)) +>x : Symbol(x, Decl(varianceCycleDiscardedDiagnostics.ts, 9, 22)) +>B : Symbol(B, Decl(varianceCycleDiscardedDiagnostics.ts, 6, 25)) class Bar { ->Bar : Symbol(Bar, Decl(varianceCycleDiscardedDiagnostics.ts, 7, 36)) ->T : Symbol(T, Decl(varianceCycleDiscardedDiagnostics.ts, 9, 10)) +>Bar : Symbol(Bar, Decl(varianceCycleDiscardedDiagnostics.ts, 9, 36)) +>T : Symbol(T, Decl(varianceCycleDiscardedDiagnostics.ts, 11, 10)) x!: T; ->x : Symbol(Bar.x, Decl(varianceCycleDiscardedDiagnostics.ts, 9, 14)) ->T : Symbol(T, Decl(varianceCycleDiscardedDiagnostics.ts, 9, 10)) +>x : Symbol(Bar.x, Decl(varianceCycleDiscardedDiagnostics.ts, 11, 14)) +>T : Symbol(T, Decl(varianceCycleDiscardedDiagnostics.ts, 11, 10)) Value = pick(new Foo(this)).foo; ->Value : Symbol(Bar.Value, Decl(varianceCycleDiscardedDiagnostics.ts, 10, 10)) ->pick(new Foo(this)).foo : Symbol(B.foo, Decl(varianceCycleDiscardedDiagnostics.ts, 5, 13)) ->pick : Symbol(pick, Decl(varianceCycleDiscardedDiagnostics.ts, 5, 27), Decl(varianceCycleDiscardedDiagnostics.ts, 6, 41)) ->Foo : Symbol(Foo, Decl(varianceCycleDiscardedDiagnostics.ts, 12, 1)) ->this : Symbol(Bar, Decl(varianceCycleDiscardedDiagnostics.ts, 7, 36)) ->foo : Symbol(B.foo, Decl(varianceCycleDiscardedDiagnostics.ts, 5, 13)) +>Value : Symbol(Bar.Value, Decl(varianceCycleDiscardedDiagnostics.ts, 12, 10)) +>pick : Symbol(pick, Decl(varianceCycleDiscardedDiagnostics.ts, 7, 27), Decl(varianceCycleDiscardedDiagnostics.ts, 8, 41)) +>Foo : Symbol(Foo, Decl(varianceCycleDiscardedDiagnostics.ts, 14, 1)) +>this : Symbol(Bar, Decl(varianceCycleDiscardedDiagnostics.ts, 9, 36)) } class Foo { ->Foo : Symbol(Foo, Decl(varianceCycleDiscardedDiagnostics.ts, 12, 1)) ->T : Symbol(T, Decl(varianceCycleDiscardedDiagnostics.ts, 14, 10)) +>Foo : Symbol(Foo, Decl(varianceCycleDiscardedDiagnostics.ts, 14, 1)) +>T : Symbol(T, Decl(varianceCycleDiscardedDiagnostics.ts, 16, 10)) bar!: Bar; ->bar : Symbol(Foo.bar, Decl(varianceCycleDiscardedDiagnostics.ts, 14, 14)) ->Bar : Symbol(Bar, Decl(varianceCycleDiscardedDiagnostics.ts, 7, 36)) ->T : Symbol(T, Decl(varianceCycleDiscardedDiagnostics.ts, 14, 10)) +>bar : Symbol(Foo.bar, Decl(varianceCycleDiscardedDiagnostics.ts, 16, 14)) +>Bar : Symbol(Bar, Decl(varianceCycleDiscardedDiagnostics.ts, 9, 36)) +>T : Symbol(T, Decl(varianceCycleDiscardedDiagnostics.ts, 16, 10)) constructor(bar: Bar) { ->bar : Symbol(bar, Decl(varianceCycleDiscardedDiagnostics.ts, 16, 16)) ->Bar : Symbol(Bar, Decl(varianceCycleDiscardedDiagnostics.ts, 7, 36)) ->T : Symbol(T, Decl(varianceCycleDiscardedDiagnostics.ts, 14, 10)) +>bar : Symbol(bar, Decl(varianceCycleDiscardedDiagnostics.ts, 18, 16)) +>Bar : Symbol(Bar, Decl(varianceCycleDiscardedDiagnostics.ts, 9, 36)) +>T : Symbol(T, Decl(varianceCycleDiscardedDiagnostics.ts, 16, 10)) this.bar = bar; ->this.bar : Symbol(Foo.bar, Decl(varianceCycleDiscardedDiagnostics.ts, 14, 14)) ->this : Symbol(Foo, Decl(varianceCycleDiscardedDiagnostics.ts, 12, 1)) ->bar : Symbol(Foo.bar, Decl(varianceCycleDiscardedDiagnostics.ts, 14, 14)) ->bar : Symbol(bar, Decl(varianceCycleDiscardedDiagnostics.ts, 16, 16)) +>this.bar : Symbol(Foo.bar, Decl(varianceCycleDiscardedDiagnostics.ts, 16, 14)) +>this : Symbol(Foo, Decl(varianceCycleDiscardedDiagnostics.ts, 14, 1)) +>bar : Symbol(Foo.bar, Decl(varianceCycleDiscardedDiagnostics.ts, 16, 14)) +>bar : Symbol(bar, Decl(varianceCycleDiscardedDiagnostics.ts, 18, 16)) } } const v: number = new Bar().Value; ->v : Symbol(v, Decl(varianceCycleDiscardedDiagnostics.ts, 21, 5)) ->new Bar().Value : Symbol(Bar.Value, Decl(varianceCycleDiscardedDiagnostics.ts, 10, 10)) ->Bar : Symbol(Bar, Decl(varianceCycleDiscardedDiagnostics.ts, 7, 36)) ->Value : Symbol(Bar.Value, Decl(varianceCycleDiscardedDiagnostics.ts, 10, 10)) +>v : Symbol(v, Decl(varianceCycleDiscardedDiagnostics.ts, 23, 5)) +>new Bar().Value : Symbol(Bar.Value, Decl(varianceCycleDiscardedDiagnostics.ts, 12, 10)) +>Bar : Symbol(Bar, Decl(varianceCycleDiscardedDiagnostics.ts, 9, 36)) +>Value : Symbol(Bar.Value, Decl(varianceCycleDiscardedDiagnostics.ts, 12, 10)) diff --git a/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.types b/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.types index 903fbaaf8c881..ad994f6a17985 100644 --- a/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.types +++ b/tsc/testdata/baselines/reference/compiler/varianceCycleDiscardedDiagnostics.types @@ -2,8 +2,10 @@ === varianceCycleDiscardedDiagnostics.ts === // Measuring the variances of Bar resolves the type of Value, which picks an -// overload by relating Foo to Foo while the variances of Foo are -// still a guess. Diagnostics from that attempt must not outlive it. +// overload by relating Foo to Foo while the variances of Bar are +// still being measured. Diagnostics from that attempt must not outlive it, +// and the result must not depend on whether Value or the variances of Bar +// are needed first. interface A { a: string } >a : string @@ -26,14 +28,14 @@ class Bar { >x : T Value = pick(new Foo(this)).foo; ->Value : string ->pick(new Foo(this)).foo : string ->pick(new Foo(this)) : B +>Value : any +>pick(new Foo(this)).foo : any +>pick(new Foo(this)) : A >pick : { (x: Foo): A; (x: object): B; } >new Foo(this) : Foo >Foo : typeof Foo >this : this ->foo : string +>foo : any } class Foo { @@ -56,8 +58,8 @@ class Foo { const v: number = new Bar().Value; >v : number ->new Bar().Value : string +>new Bar().Value : any >new Bar() : Bar >Bar : typeof Bar ->Value : string +>Value : any diff --git a/tsc/testdata/baselines/reference/compiler/varianceCycleEntryOrder.errors.txt b/tsc/testdata/baselines/reference/compiler/varianceCycleEntryOrder.errors.txt index 36d69f16d627f..3093fe2786a2e 100644 --- a/tsc/testdata/baselines/reference/compiler/varianceCycleEntryOrder.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/varianceCycleEntryOrder.errors.txt @@ -1,54 +1,28 @@ -barFirst.ts(8,1): error TS2322: Type 'Bar' is not assignable to type 'Bar<"lit">'. - The types of 'foo.b.f' are incompatible between these types. - Type '(u: Foo>) => void' is not assignable to type '(u: Foo>) => void'. - Types of parameters 'u' and 'u' are incompatible. - Type 'Foo>' is not assignable to type 'Foo>'. - The types of 'x.f' are incompatible between these types. - Type '(u: "lit") => void' is not assignable to type '(u: string) => void'. - Types of parameters 'u' and 'u' are incompatible. - Type 'string' is not assignable to type '"lit"'. barFirst.ts(9,1): error TS2322: Type 'Bar<"lit">' is not assignable to type 'Bar'. - Types of property 'f' are incompatible. - Type '(u: "lit") => void' is not assignable to type '(u: string) => void'. - Types of parameters 'u' and 'u' are incompatible. - Type 'string' is not assignable to type '"lit"'. + Type 'string' is not assignable to type '"lit"'. barFirst.ts(10,1): error TS2322: Type 'Foo' is not assignable to type 'Foo<"lit">'. Types of property 'x' are incompatible. Type 'string' is not assignable to type '"lit"'. barFirst.ts(11,1): error TS2322: Type 'Foo<"lit">' is not assignable to type 'Foo'. - The types of 'b.f' are incompatible between these types. - Type '(u: Foo<"lit">) => void' is not assignable to type '(u: Foo) => void'. - Types of parameters 'u' and 'u' are incompatible. - Type 'Foo' is not assignable to type 'Foo<"lit">'. - Types of property 'x' are incompatible. - Type 'string' is not assignable to type '"lit"'. + Types of property 'b' are incompatible. + Type 'Bar>' is not assignable to type 'Bar>'. + Type 'Foo' is not assignable to type 'Foo<"lit">'. + Types of property 'x' are incompatible. + Type 'string' is not assignable to type '"lit"'. fooFirst.ts(8,1): error TS2322: Type 'Foo' is not assignable to type 'Foo<"lit">'. Types of property 'x' are incompatible. Type 'string' is not assignable to type '"lit"'. fooFirst.ts(9,1): error TS2322: Type 'Foo<"lit">' is not assignable to type 'Foo'. - The types of 'b.f' are incompatible between these types. - Type '(u: Foo<"lit">) => void' is not assignable to type '(u: Foo) => void'. - Types of parameters 'u' and 'u' are incompatible. - Type 'Foo' is not assignable to type 'Foo<"lit">'. - Types of property 'x' are incompatible. - Type 'string' is not assignable to type '"lit"'. -fooFirst.ts(10,1): error TS2322: Type 'Bar' is not assignable to type 'Bar<"lit">'. - The types of 'foo.b.f' are incompatible between these types. - Type '(u: Foo>) => void' is not assignable to type '(u: Foo>) => void'. - Types of parameters 'u' and 'u' are incompatible. - Type 'Foo>' is not assignable to type 'Foo>'. - The types of 'x.f' are incompatible between these types. - Type '(u: "lit") => void' is not assignable to type '(u: string) => void'. - Types of parameters 'u' and 'u' are incompatible. - Type 'string' is not assignable to type '"lit"'. + Types of property 'b' are incompatible. + Type 'Bar>' is not assignable to type 'Bar>'. + Type 'Foo' is not assignable to type 'Foo<"lit">'. + Types of property 'x' are incompatible. + Type 'string' is not assignable to type '"lit"'. fooFirst.ts(11,1): error TS2322: Type 'Bar<"lit">' is not assignable to type 'Bar'. - Types of property 'f' are incompatible. - Type '(u: "lit") => void' is not assignable to type '(u: string) => void'. - Types of parameters 'u' and 'u' are incompatible. - Type 'string' is not assignable to type '"lit"'. + Type 'string' is not assignable to type '"lit"'. -==== fooFirst.ts (4 errors) ==== +==== fooFirst.ts (3 errors) ==== export {}; interface Foo { x: T; b: Bar> } @@ -64,32 +38,18 @@ fooFirst.ts(11,1): error TS2322: Type 'Bar<"lit">' is not assignable to type 'Ba fs = fl; // Error ~~ !!! error TS2322: Type 'Foo<"lit">' is not assignable to type 'Foo'. -!!! error TS2322: The types of 'b.f' are incompatible between these types. -!!! error TS2322: Type '(u: Foo<"lit">) => void' is not assignable to type '(u: Foo) => void'. -!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. -!!! error TS2322: Type 'Foo' is not assignable to type 'Foo<"lit">'. -!!! error TS2322: Types of property 'x' are incompatible. -!!! error TS2322: Type 'string' is not assignable to type '"lit"'. +!!! error TS2322: Types of property 'b' are incompatible. +!!! error TS2322: Type 'Bar>' is not assignable to type 'Bar>'. +!!! error TS2322: Type 'Foo' is not assignable to type 'Foo<"lit">'. +!!! error TS2322: Types of property 'x' are incompatible. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. bl = bs; // Error - ~~ -!!! error TS2322: Type 'Bar' is not assignable to type 'Bar<"lit">'. -!!! error TS2322: The types of 'foo.b.f' are incompatible between these types. -!!! error TS2322: Type '(u: Foo>) => void' is not assignable to type '(u: Foo>) => void'. -!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. -!!! error TS2322: Type 'Foo>' is not assignable to type 'Foo>'. -!!! error TS2322: The types of 'x.f' are incompatible between these types. -!!! error TS2322: Type '(u: "lit") => void' is not assignable to type '(u: string) => void'. -!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. -!!! error TS2322: Type 'string' is not assignable to type '"lit"'. bs = bl; // Error ~~ !!! error TS2322: Type 'Bar<"lit">' is not assignable to type 'Bar'. -!!! error TS2322: Types of property 'f' are incompatible. -!!! error TS2322: Type '(u: "lit") => void' is not assignable to type '(u: string) => void'. -!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. -!!! error TS2322: Type 'string' is not assignable to type '"lit"'. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. -==== barFirst.ts (4 errors) ==== +==== barFirst.ts (3 errors) ==== export {}; interface Foo { x: T; b: Bar> } @@ -98,23 +58,10 @@ fooFirst.ts(11,1): error TS2322: Type 'Bar<"lit">' is not assignable to type 'Ba declare let fs: Foo, fl: Foo<"lit">; declare let bs: Bar, bl: Bar<"lit">; bl = bs; // Error - ~~ -!!! error TS2322: Type 'Bar' is not assignable to type 'Bar<"lit">'. -!!! error TS2322: The types of 'foo.b.f' are incompatible between these types. -!!! error TS2322: Type '(u: Foo>) => void' is not assignable to type '(u: Foo>) => void'. -!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. -!!! error TS2322: Type 'Foo>' is not assignable to type 'Foo>'. -!!! error TS2322: The types of 'x.f' are incompatible between these types. -!!! error TS2322: Type '(u: "lit") => void' is not assignable to type '(u: string) => void'. -!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. -!!! error TS2322: Type 'string' is not assignable to type '"lit"'. bs = bl; // Error ~~ !!! error TS2322: Type 'Bar<"lit">' is not assignable to type 'Bar'. -!!! error TS2322: Types of property 'f' are incompatible. -!!! error TS2322: Type '(u: "lit") => void' is not assignable to type '(u: string) => void'. -!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. -!!! error TS2322: Type 'string' is not assignable to type '"lit"'. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. fl = fs; // Error ~~ !!! error TS2322: Type 'Foo' is not assignable to type 'Foo<"lit">'. @@ -123,10 +70,9 @@ fooFirst.ts(11,1): error TS2322: Type 'Bar<"lit">' is not assignable to type 'Ba fs = fl; // Error ~~ !!! error TS2322: Type 'Foo<"lit">' is not assignable to type 'Foo'. -!!! error TS2322: The types of 'b.f' are incompatible between these types. -!!! error TS2322: Type '(u: Foo<"lit">) => void' is not assignable to type '(u: Foo) => void'. -!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. -!!! error TS2322: Type 'Foo' is not assignable to type 'Foo<"lit">'. -!!! error TS2322: Types of property 'x' are incompatible. -!!! error TS2322: Type 'string' is not assignable to type '"lit"'. +!!! error TS2322: Types of property 'b' are incompatible. +!!! error TS2322: Type 'Bar>' is not assignable to type 'Bar>'. +!!! error TS2322: Type 'Foo' is not assignable to type 'Foo<"lit">'. +!!! error TS2322: Types of property 'x' are incompatible. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/varianceCycleStructuralFallback.errors.txt b/tsc/testdata/baselines/reference/compiler/varianceCycleStructuralFallback.errors.txt index 7e367290c06dd..85a24505357b2 100644 --- a/tsc/testdata/baselines/reference/compiler/varianceCycleStructuralFallback.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/varianceCycleStructuralFallback.errors.txt @@ -2,61 +2,31 @@ maFirst.ts(8,1): error TS2322: Type 'MA<{ p: string; }>' is not assignable to ty The types of 'x.p' are incompatible between these types. Type 'string' is not assignable to type '"lit"'. maFirst.ts(9,1): error TS2322: Type 'MA<{ p: "lit"; }>' is not assignable to type 'MA<{ p: string; }>'. - The types of 'b.f' are incompatible between these types. - Type '(u: MA<{ p: "lit"; }>) => void' is not assignable to type '(u: MA<{ p: string; }>) => void'. - Types of parameters 'u' and 'u' are incompatible. - Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. - The types of 'x.p' are incompatible between these types. - Type 'string' is not assignable to type '"lit"'. -maFirst.ts(10,1): error TS2322: Type 'MB<{ p: string; }>' is not assignable to type 'MB<{ p: "lit"; }>'. - The types of 'a.b.f' are incompatible between these types. - Type '(u: MA>) => void' is not assignable to type '(u: MA>) => void'. - Types of parameters 'u' and 'u' are incompatible. - Type 'MA>' is not assignable to type 'MA>'. - The types of 'x.f' are incompatible between these types. - Type '(u: { p: "lit"; }) => void' is not assignable to type '(u: { p: string; }) => void'. - Types of parameters 'u' and 'u' are incompatible. - Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. - Types of property 'p' are incompatible. - Type 'string' is not assignable to type '"lit"'. + Types of property 'b' are incompatible. + Type 'MB>' is not assignable to type 'MB>'. + Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. + The types of 'x.p' are incompatible between these types. + Type 'string' is not assignable to type '"lit"'. maFirst.ts(11,1): error TS2322: Type 'MB<{ p: "lit"; }>' is not assignable to type 'MB<{ p: string; }>'. - Types of property 'f' are incompatible. - Type '(u: { p: "lit"; }) => void' is not assignable to type '(u: { p: string; }) => void'. - Types of parameters 'u' and 'u' are incompatible. - Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. - Types of property 'p' are incompatible. - Type 'string' is not assignable to type '"lit"'. -mbFirst.ts(8,1): error TS2322: Type 'MB<{ p: string; }>' is not assignable to type 'MB<{ p: "lit"; }>'. - The types of 'a.b.f' are incompatible between these types. - Type '(u: MA>) => void' is not assignable to type '(u: MA>) => void'. - Types of parameters 'u' and 'u' are incompatible. - Type 'MA>' is not assignable to type 'MA>'. - The types of 'x.f' are incompatible between these types. - Type '(u: { p: "lit"; }) => void' is not assignable to type '(u: { p: string; }) => void'. - Types of parameters 'u' and 'u' are incompatible. - Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. - Types of property 'p' are incompatible. - Type 'string' is not assignable to type '"lit"'. + Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. + Types of property 'p' are incompatible. + Type 'string' is not assignable to type '"lit"'. mbFirst.ts(9,1): error TS2322: Type 'MB<{ p: "lit"; }>' is not assignable to type 'MB<{ p: string; }>'. - Types of property 'f' are incompatible. - Type '(u: { p: "lit"; }) => void' is not assignable to type '(u: { p: string; }) => void'. - Types of parameters 'u' and 'u' are incompatible. - Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. - Types of property 'p' are incompatible. - Type 'string' is not assignable to type '"lit"'. + Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. + Types of property 'p' are incompatible. + Type 'string' is not assignable to type '"lit"'. mbFirst.ts(10,1): error TS2322: Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. The types of 'x.p' are incompatible between these types. Type 'string' is not assignable to type '"lit"'. mbFirst.ts(11,1): error TS2322: Type 'MA<{ p: "lit"; }>' is not assignable to type 'MA<{ p: string; }>'. - The types of 'b.f' are incompatible between these types. - Type '(u: MA<{ p: "lit"; }>) => void' is not assignable to type '(u: MA<{ p: string; }>) => void'. - Types of parameters 'u' and 'u' are incompatible. - Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. - The types of 'x.p' are incompatible between these types. - Type 'string' is not assignable to type '"lit"'. + Types of property 'b' are incompatible. + Type 'MB>' is not assignable to type 'MB>'. + Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. + The types of 'x.p' are incompatible between these types. + Type 'string' is not assignable to type '"lit"'. -==== maFirst.ts (4 errors) ==== +==== maFirst.ts (3 errors) ==== export {}; type MA = { x: { [K in keyof T]-?: T[K] }; b: MB> }; @@ -72,36 +42,20 @@ mbFirst.ts(11,1): error TS2322: Type 'MA<{ p: "lit"; }>' is not assignable to ty as = al; ~~ !!! error TS2322: Type 'MA<{ p: "lit"; }>' is not assignable to type 'MA<{ p: string; }>'. -!!! error TS2322: The types of 'b.f' are incompatible between these types. -!!! error TS2322: Type '(u: MA<{ p: "lit"; }>) => void' is not assignable to type '(u: MA<{ p: string; }>) => void'. -!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. -!!! error TS2322: Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. -!!! error TS2322: The types of 'x.p' are incompatible between these types. -!!! error TS2322: Type 'string' is not assignable to type '"lit"'. +!!! error TS2322: Types of property 'b' are incompatible. +!!! error TS2322: Type 'MB>' is not assignable to type 'MB>'. +!!! error TS2322: Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. +!!! error TS2322: The types of 'x.p' are incompatible between these types. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. bl = bs; - ~~ -!!! error TS2322: Type 'MB<{ p: string; }>' is not assignable to type 'MB<{ p: "lit"; }>'. -!!! error TS2322: The types of 'a.b.f' are incompatible between these types. -!!! error TS2322: Type '(u: MA>) => void' is not assignable to type '(u: MA>) => void'. -!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. -!!! error TS2322: Type 'MA>' is not assignable to type 'MA>'. -!!! error TS2322: The types of 'x.f' are incompatible between these types. -!!! error TS2322: Type '(u: { p: "lit"; }) => void' is not assignable to type '(u: { p: string; }) => void'. -!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. -!!! error TS2322: Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. -!!! error TS2322: Types of property 'p' are incompatible. -!!! error TS2322: Type 'string' is not assignable to type '"lit"'. bs = bl; ~~ !!! error TS2322: Type 'MB<{ p: "lit"; }>' is not assignable to type 'MB<{ p: string; }>'. -!!! error TS2322: Types of property 'f' are incompatible. -!!! error TS2322: Type '(u: { p: "lit"; }) => void' is not assignable to type '(u: { p: string; }) => void'. -!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. -!!! error TS2322: Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. -!!! error TS2322: Types of property 'p' are incompatible. -!!! error TS2322: Type 'string' is not assignable to type '"lit"'. +!!! error TS2322: Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. +!!! error TS2322: Types of property 'p' are incompatible. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. -==== mbFirst.ts (4 errors) ==== +==== mbFirst.ts (3 errors) ==== export {}; type MA = { x: { [K in keyof T]-?: T[K] }; b: MB> }; @@ -110,27 +64,12 @@ mbFirst.ts(11,1): error TS2322: Type 'MA<{ p: "lit"; }>' is not assignable to ty declare let as: MA<{ p: string }>, al: MA<{ p: "lit" }>; declare let bs: MB<{ p: string }>, bl: MB<{ p: "lit" }>; bl = bs; - ~~ -!!! error TS2322: Type 'MB<{ p: string; }>' is not assignable to type 'MB<{ p: "lit"; }>'. -!!! error TS2322: The types of 'a.b.f' are incompatible between these types. -!!! error TS2322: Type '(u: MA>) => void' is not assignable to type '(u: MA>) => void'. -!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. -!!! error TS2322: Type 'MA>' is not assignable to type 'MA>'. -!!! error TS2322: The types of 'x.f' are incompatible between these types. -!!! error TS2322: Type '(u: { p: "lit"; }) => void' is not assignable to type '(u: { p: string; }) => void'. -!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. -!!! error TS2322: Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. -!!! error TS2322: Types of property 'p' are incompatible. -!!! error TS2322: Type 'string' is not assignable to type '"lit"'. bs = bl; ~~ !!! error TS2322: Type 'MB<{ p: "lit"; }>' is not assignable to type 'MB<{ p: string; }>'. -!!! error TS2322: Types of property 'f' are incompatible. -!!! error TS2322: Type '(u: { p: "lit"; }) => void' is not assignable to type '(u: { p: string; }) => void'. -!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. -!!! error TS2322: Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. -!!! error TS2322: Types of property 'p' are incompatible. -!!! error TS2322: Type 'string' is not assignable to type '"lit"'. +!!! error TS2322: Type '{ p: string; }' is not assignable to type '{ p: "lit"; }'. +!!! error TS2322: Types of property 'p' are incompatible. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. al = as; ~~ !!! error TS2322: Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. @@ -139,10 +78,9 @@ mbFirst.ts(11,1): error TS2322: Type 'MA<{ p: "lit"; }>' is not assignable to ty as = al; ~~ !!! error TS2322: Type 'MA<{ p: "lit"; }>' is not assignable to type 'MA<{ p: string; }>'. -!!! error TS2322: The types of 'b.f' are incompatible between these types. -!!! error TS2322: Type '(u: MA<{ p: "lit"; }>) => void' is not assignable to type '(u: MA<{ p: string; }>) => void'. -!!! error TS2322: Types of parameters 'u' and 'u' are incompatible. -!!! error TS2322: Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. -!!! error TS2322: The types of 'x.p' are incompatible between these types. -!!! error TS2322: Type 'string' is not assignable to type '"lit"'. +!!! error TS2322: Types of property 'b' are incompatible. +!!! error TS2322: Type 'MB>' is not assignable to type 'MB>'. +!!! error TS2322: Type 'MA<{ p: string; }>' is not assignable to type 'MA<{ p: "lit"; }>'. +!!! error TS2322: The types of 'x.p' are incompatible between these types. +!!! error TS2322: Type 'string' is not assignable to type '"lit"'. \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/varianceDeclarationOrder.errors.txt b/tsc/testdata/baselines/reference/compiler/varianceDeclarationOrder.errors.txt new file mode 100644 index 0000000000000..76e1b58ab4906 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/varianceDeclarationOrder.errors.txt @@ -0,0 +1,31 @@ +refFirst.ts(10,14): error TS2322: Type 'DS<{ total: M; }, string>' is not assignable to type 'DS, string>'. + Property 'total' is missing in type 'Record' but required in type '{ total: M; }'. + + +==== refFirst.ts (1 errors) ==== + type M = { kind: "m" }; + type Filtered = { [K in keyof T as T[K] extends M ? K : never]: T[K] }; + interface Config { measure: keyof T } + interface Ref { dataset: DS, N> } + interface DS { + a(config: Config>): void; + b: Ref; + } + declare const x: DS<{ total: M }, string>; + export const y: DS, string> = x; + ~ +!!! error TS2322: Type 'DS<{ total: M; }, string>' is not assignable to type 'DS, string>'. +!!! error TS2322: Property 'total' is missing in type 'Record' but required in type '{ total: M; }'. + +==== dsFirst.ts (0 errors) ==== + type M = { kind: "m" }; + type Filtered = { [K in keyof T as T[K] extends M ? K : never]: T[K] }; + interface Config { measure: keyof T } + interface DS { + a(config: Config>): void; + b: Ref; + } + interface Ref { dataset: DS, N> } + declare const x: DS<{ total: M }, string>; + export const y: DS, string> = x; + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/varianceMeasuredWithinCircularity.errors.txt b/tsc/testdata/baselines/reference/compiler/varianceMeasuredWithinCircularity.errors.txt index 2782c1f5b0e65..d3d975854426a 100644 --- a/tsc/testdata/baselines/reference/compiler/varianceMeasuredWithinCircularity.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/varianceMeasuredWithinCircularity.errors.txt @@ -13,24 +13,9 @@ varianceMeasuredWithinCircularity.ts(24,5): error TS2322: Type 'Selection' is not assignable to type 'TransitionLike'. - The types returned by 'selection().join' are incompatible between these types. - Type '(enter: string | ((elem: Selection) => Selection | TransitionLike)) => Selection' is not assignable to type '(enter: string | ((elem: Selection) => Selection | TransitionLike)) => Selection'. - Types of parameters 'enter' and 'enter' are incompatible. - Type 'string | ((elem: Selection) => Selection | TransitionLike)' is not assignable to type 'string | ((elem: Selection) => Selection | TransitionLike)'. - Type '(elem: Selection) => Selection | TransitionLike' is not assignable to type 'string | ((elem: Selection) => Selection | TransitionLike)'. - Type '(elem: Selection) => Selection | TransitionLike' is not assignable to type '(elem: Selection) => Selection | TransitionLike'. - Type 'Selection | TransitionLike' is not assignable to type 'Selection | TransitionLike'. - Type 'Selection' is not assignable to type 'Selection | TransitionLike'. - Type 'Selection' is not assignable to type 'Selection'. - The types returned by 'children().data' are incompatible between these types. - Type '(key: (parent: Base) => string) => Selection' is not assignable to type '(key: (parent: Derived) => string) => Selection'. - Types of parameters 'key' and 'key' are incompatible. - Types of parameters 'parent' and 'parent' are incompatible. - Property 'derived' is missing in type 'Base' but required in type 'Derived'. -==== varianceMeasuredWithinCircularity.ts (2 errors) ==== +==== varianceMeasuredWithinCircularity.ts (1 errors) ==== // The variances of Selection and TransitionLike depend on each other. // The callback of `data` requires Selection to be covariant in P, while // `join` passes Selection to a callback, which then requires it to @@ -75,21 +60,4 @@ varianceMeasuredWithinCircularity.ts(27,5): error TS2322: Type 'TransitionLike; let t2: TransitionLike = t1; - ~~ -!!! error TS2322: Type 'TransitionLike' is not assignable to type 'TransitionLike'. -!!! error TS2322: The types returned by 'selection().join' are incompatible between these types. -!!! error TS2322: Type '(enter: string | ((elem: Selection) => Selection | TransitionLike)) => Selection' is not assignable to type '(enter: string | ((elem: Selection) => Selection | TransitionLike)) => Selection'. -!!! error TS2322: Types of parameters 'enter' and 'enter' are incompatible. -!!! error TS2322: Type 'string | ((elem: Selection) => Selection | TransitionLike)' is not assignable to type 'string | ((elem: Selection) => Selection | TransitionLike)'. -!!! error TS2322: Type '(elem: Selection) => Selection | TransitionLike' is not assignable to type 'string | ((elem: Selection) => Selection | TransitionLike)'. -!!! error TS2322: Type '(elem: Selection) => Selection | TransitionLike' is not assignable to type '(elem: Selection) => Selection | TransitionLike'. -!!! error TS2322: Type 'Selection | TransitionLike' is not assignable to type 'Selection | TransitionLike'. -!!! error TS2322: Type 'Selection' is not assignable to type 'Selection | TransitionLike'. -!!! error TS2322: Type 'Selection' is not assignable to type 'Selection'. -!!! error TS2322: The types returned by 'children().data' are incompatible between these types. -!!! error TS2322: Type '(key: (parent: Base) => string) => Selection' is not assignable to type '(key: (parent: Derived) => string) => Selection'. -!!! error TS2322: Types of parameters 'key' and 'key' are incompatible. -!!! error TS2322: Types of parameters 'parent' and 'parent' are incompatible. -!!! error TS2322: Property 'derived' is missing in type 'Base' but required in type 'Derived'. -!!! related TS2728 varianceMeasuredWithinCircularity.ts:11:34: 'derived' is declared here. \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/varianceMeasurement.errors.txt b/tsc/testdata/baselines/reference/compiler/varianceMeasurement.errors.txt index 711f3286edf99..7a361e5b94ac6 100644 --- a/tsc/testdata/baselines/reference/compiler/varianceMeasurement.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/varianceMeasurement.errors.txt @@ -1,11 +1,5 @@ varianceMeasurement.ts(10,7): error TS2322: Type 'Foo1' is not assignable to type 'Foo1<"a">'. - Types of property 'x' are incompatible. - Type 'string' is not assignable to type '"a"'. -varianceMeasurement.ts(11,7): error TS2322: Type 'Foo1' is not assignable to type 'Foo1'. - The types of 'y.x' are incompatible between these types. - Type '(arg: string) => void' is not assignable to type '(arg: unknown) => void'. - Types of parameters 'arg' and 'arg' are incompatible. - Type 'unknown' is not assignable to type 'string'. + Type 'string' is not assignable to type '"a"'. varianceMeasurement.ts(21,7): error TS2322: Type 'Foo2' is not assignable to type 'Foo2<"a">'. Types of property 'x' are incompatible. Type 'string' is not assignable to type '"a"'. @@ -15,13 +9,7 @@ varianceMeasurement.ts(22,7): error TS2322: Type 'Foo2' is not assignabl Types of parameters 'arg' and 'arg' are incompatible. Type 'unknown' is not assignable to type 'string'. varianceMeasurement.ts(33,7): error TS2322: Type 'Foo3' is not assignable to type 'Foo3<"a">'. - Types of property 'x' are incompatible. - Type 'string' is not assignable to type '"a"'. -varianceMeasurement.ts(34,7): error TS2322: Type 'Foo3' is not assignable to type 'Foo3'. - The types of 'y.x' are incompatible between these types. - Type '(arg: string) => void' is not assignable to type '(arg: unknown) => void'. - Types of parameters 'arg' and 'arg' are incompatible. - Type 'unknown' is not assignable to type 'string'. + Type 'string' is not assignable to type '"a"'. varianceMeasurement.ts(44,7): error TS2322: Type 'Foo4' is not assignable to type 'Foo4<"a">'. Types of property 'x' are incompatible. Type 'string' is not assignable to type '"a"'. @@ -38,7 +26,7 @@ varianceMeasurement.ts(75,7): error TS2322: Type 'C' is not ass Type 'number' is not assignable to type 'string'. -==== varianceMeasurement.ts (11 errors) ==== +==== varianceMeasurement.ts (9 errors) ==== // The type below should be invariant in T but is measured as covariant because // we don't analyze recursive references. @@ -51,15 +39,8 @@ varianceMeasurement.ts(75,7): error TS2322: Type 'C' is not ass const f11: Foo1<'a'> = f10; ~~~ !!! error TS2322: Type 'Foo1' is not assignable to type 'Foo1<"a">'. -!!! error TS2322: Types of property 'x' are incompatible. -!!! error TS2322: Type 'string' is not assignable to type '"a"'. +!!! error TS2322: Type 'string' is not assignable to type '"a"'. const f12: Foo1 = f10; - ~~~ -!!! error TS2322: Type 'Foo1' is not assignable to type 'Foo1'. -!!! error TS2322: The types of 'y.x' are incompatible between these types. -!!! error TS2322: Type '(arg: string) => void' is not assignable to type '(arg: unknown) => void'. -!!! error TS2322: Types of parameters 'arg' and 'arg' are incompatible. -!!! error TS2322: Type 'unknown' is not assignable to type 'string'. // The type below is invariant in T and is measured as such. @@ -94,15 +75,8 @@ varianceMeasurement.ts(75,7): error TS2322: Type 'C' is not ass const f31: Foo3<'a'> = f30; ~~~ !!! error TS2322: Type 'Foo3' is not assignable to type 'Foo3<"a">'. -!!! error TS2322: Types of property 'x' are incompatible. -!!! error TS2322: Type 'string' is not assignable to type '"a"'. +!!! error TS2322: Type 'string' is not assignable to type '"a"'. const f32: Foo3 = f30; - ~~~ -!!! error TS2322: Type 'Foo3' is not assignable to type 'Foo3'. -!!! error TS2322: The types of 'y.x' are incompatible between these types. -!!! error TS2322: Type '(arg: string) => void' is not assignable to type '(arg: unknown) => void'. -!!! error TS2322: Types of parameters 'arg' and 'arg' are incompatible. -!!! error TS2322: Type 'unknown' is not assignable to type 'string'. // The type below is invariant in T and is measured as such. diff --git a/tsc/testdata/tests/cases/compiler/relationDeeplyNestedCheckOrder.ts b/tsc/testdata/tests/cases/compiler/relationDeeplyNestedCheckOrder.ts index a085da345dfcb..638ea1b62008b 100644 --- a/tsc/testdata/tests/cases/compiler/relationDeeplyNestedCheckOrder.ts +++ b/tsc/testdata/tests/cases/compiler/relationDeeplyNestedCheckOrder.ts @@ -2,9 +2,10 @@ // @noEmit: true // Relating 'B<{ a: string }>' to 'B<{ a: "lit" }>' eventually relates 'string' -// to '"lit"' through 'm0.m1.a.m0.m1'. Relating the 'A' instantiations first -// reaches the same comparison only after giving up on deeply nested types, -// which must not make relating the 'B' instantiations succeed afterwards. +// to '"lit"' through 'm0.m1.a.m0.m1', but only after measuring the variances +// of 'A', which gives up on deeply nested types. TypeScript reports an error +// for the 'B' assignment only when it is checked before the 'A' assignment; +// the result must not depend on which is checked first. type A = { m0: (x: B) => void; m1: { [K in keyof T]: B } }; type B = { m0: A }; @@ -13,4 +14,4 @@ declare let a1: A<{ a: string }>, a2: A<{ a: "lit" }>; declare let b1: B<{ a: string }>, b2: B<{ a: "lit" }>; a2 = a1; -b2 = b1; // Error +b2 = b1; diff --git a/tsc/testdata/tests/cases/compiler/varianceCycleDiscardedDiagnostics.ts b/tsc/testdata/tests/cases/compiler/varianceCycleDiscardedDiagnostics.ts index c610fbca080d7..9b61b16136fc2 100644 --- a/tsc/testdata/tests/cases/compiler/varianceCycleDiscardedDiagnostics.ts +++ b/tsc/testdata/tests/cases/compiler/varianceCycleDiscardedDiagnostics.ts @@ -3,8 +3,10 @@ // @noEmit: true // Measuring the variances of Bar resolves the type of Value, which picks an -// overload by relating Foo to Foo while the variances of Foo are -// still a guess. Diagnostics from that attempt must not outlive it. +// overload by relating Foo to Foo while the variances of Bar are +// still being measured. Diagnostics from that attempt must not outlive it, +// and the result must not depend on whether Value or the variances of Bar +// are needed first. interface A { a: string } interface B { foo: string } From f31e287dbd41cf98d28dc180f17c3104736b6eb4 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 19:17:30 -0700 Subject: [PATCH 129/194] Stop walking the stack once a cycle head is already a dependency Each reentry of a computation in progress made every computation above it depend on it. addDep avoids duplicates only for the computation the dependency was most recently added to, so with several cycle heads in progress, as when relating deeply recursive types, every reentry walked the whole stack and appended the head again to each computation on it: on zod v4, 1.5M appends from 114K reentries, a quarter of all memory allocated. Walk down from the top instead, and stop at the first computation that an earlier reentry already made depend on the same head: the computations below it were in progress then too, so they already depend on it. Each computation records which of its dependencies memoCycle added, so other dependencies on the head do not stop the walk early. PERF-PLACEHOLDER --- tsc/internal/checker/memo.go | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 56ddf0bcb6851..f21d08f27cda5 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -132,6 +132,7 @@ type memoEffects struct { marks []*ast.Symbol // Aliases marked referenced, also among effects; see withReferenceMarks deps []*memoEffects parent *memoEffects // Resolution d was most recently added to; avoids duplicate deps + cycles []int32 // Indices in deps of the cycle heads memoCycle added entry *ast.Node // Current node when the computation started, if entered entered bool // Whether this is the resolution of a computation, not just a set of deps replayed bool @@ -1114,6 +1115,7 @@ func (c *Checker) replayEffects(f *memoEffects, outerEntry *ast.Node, outerEnter c.currentNode = saveCurrentNode f.effects = nil f.deps = nil + f.cycles = nil } // atMemoStartNode reports whether the current node is the one the innermost @@ -1299,7 +1301,11 @@ func (c *Checker) memoCycle(depth int) { return } var outer *memoEffects - for i := depth; i < len(c.resolutions); i++ { + // Walk down from the top, stopping at a computation an earlier reentry + // already made depend on outer: the computations below it were in + // progress then too, so they depend on outer as well. Without this, + // every reentry of a cycle would walk, and grow, the whole stack. + for i := len(c.resolutions) - 1; i >= depth; i-- { if !c.resolutions[i].memo { continue } @@ -1309,15 +1315,33 @@ func (c *Checker) memoCycle(depth int) { outer = c.memoEffectsAt(depth - 1) } f := c.memoEffectsAt(i) - if i < c.effectsMarkDepth-1 && f != outer && outer.parent != f { + if f == outer || outer.parent == f { + continue + } + if f.dependsOnCycle(outer) { + break + } + if i < c.effectsMarkDepth-1 { // The resolution is in progress below the mark, so discarding to // the mark must also discard this dependency. c.logDepsDiscard(f) } - f.addDep(outer) + f.cycles = append(f.cycles, int32(len(f.deps))) + f.deps = append(f.deps, outer) + outer.parent = f } } +// dependsOnCycle reports whether memoCycle made f depend on the cycle head. +func (f *memoEffects) dependsOnCycle(head *memoEffects) bool { + for _, i := range f.cycles { + if f.deps[i] == head { + return true + } + } + return false +} + // logDepsDiscard logs the dependencies of a computation in progress below the // innermost effects mark, which are about to grow, so discardSince can // restore them. @@ -1680,6 +1704,9 @@ func (f *memoEffects) truncateDeps(n int) { } clear(f.deps[n:]) f.deps = f.deps[:n] + for len(f.cycles) != 0 && int(f.cycles[len(f.cycles)-1]) >= n { + f.cycles = f.cycles[:len(f.cycles)-1] + } } // logPendingDiscard logs the effects of the result in the memo state, which From fd2dfaa77f6993fae4e85d5d385a72e47756e733 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 22:55:43 -0700 Subject: [PATCH 130/194] Resume checking as soon as nothing in progress can be discarded Once a cycle is detected inside a check, the outermost computation in progress switches to recording its effects as a query does, and stays that way until it finishes, even though the cycle usually closes long before. Every read after that pays for dependency accounting. When the last cycle, inner cycle, effects mark and discard log entry are gone, nothing computed since can be discarded anymore, so the effects recorded so far are replayed at the node each computation started at, as they would be when the outermost one finishes, and checking resumes applying effects directly. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 1 + tsc/internal/checker/memo.go | 57 +++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 501b99d9346d1..96ebaeaac565c 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -691,6 +691,7 @@ type Checker struct { effectsMarkDepth int // 1 + resolution index of the innermost effects mark that may be discarded, or 0 varianceStack []VarianceStackEntry flushBuf []*memoState + resumeBuf []int deferredAttach []*memoState // See attachState flushStates *[]*memoState // Collects memo states given effects to replay, if non-nil; see withoutChecking apparentArgumentCount *int diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index f21d08f27cda5..d446a3f7d5bc0 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -1261,11 +1261,19 @@ func (c *Checker) recordFromCheck() { // endQueryFromCheck ends the query begun by recordFromCheck, replaying // the effects of everything it computed in the check. func (c *Checker) endQueryFromCheck() { + if c.flushStates == nil { + // The query already ended; see resumeChecking. + return + } states := *c.flushStates c.flushStates = nil c.checking = true c.syncObserving() defer clear(states) + c.replayFlushed(states) +} + +func (c *Checker) replayFlushed(states []*memoState) { for _, state := range states { if state.pending != nil { f := state.pending @@ -1277,6 +1285,53 @@ func (c *Checker) endQueryFromCheck() { } } +// resumeChecking ends the query begun by recordFromCheck as soon as nothing +// computed since can be discarded: no cycle is in progress and no effects +// mark is held. Recording until the outermost computation finishes would be +// equivalent, but makes every read until then account for effects. What the +// query recorded applies now, as it would have in the check, including what +// the computations in progress recorded, which continue as in a check. +func (c *Checker) resumeChecking() { + if c.checking || c.flushStates != &c.flushBuf || c.logEffects() || len(c.innerCycles) != 0 || len(c.discardLog) != 0 { + return + } + chain := c.resumeBuf[:0] + for i := c.memoTop - 1; i >= 0; i = int(c.resolutions[i].prevMemo) - 1 { + chain = append(chain, i) + } + saveCurrentNode := c.currentNode + if len(chain) != 0 { + root := &c.resolutions[chain[len(chain)-1]] + root.fromCheck = false + if root.entry != nil { + // The effects apply as they would when the outermost computation + // finishes, back at the node it started at. + c.currentNode = root.entry + } + } + states := c.flushBuf + c.flushStates = nil + c.checking = true + c.syncObserving() + c.replayFlushed(states) + clear(states) + loc := c.currentNode + for k := len(chain) - 1; k >= 0; k-- { + r := &c.resolutions[chain[k]] + if f := r.effects; f != nil { + r.effects = nil + c.currentNode = loc + c.replayEffects(f, loc, true) + } + if r.entry != nil { + loc = r.entry + } + } + c.currentNode = saveCurrentNode + clear(chain) + c.resumeBuf = chain[:0] +} + // withChecking runs fn in a check. func (c *Checker) withChecking(fn func()) { // Checking starts only from top-level requests, so any resolution left at @@ -1551,6 +1606,7 @@ func (c *Checker) endCircularity() { c.discardCycle(mark, false) c.cycleParticipants = nil c.trimDiscardLog() + c.resumeChecking() } // discardCycle discards the results logged since mark, except those of the @@ -1694,6 +1750,7 @@ func (c *Checker) discardSince(m discardMark) { func (c *Checker) releaseDiscardMark(m discardMark) { c.effectsMarkDepth = m.effectsMarkDepth c.trimDiscardLog() + c.resumeChecking() } func (f *memoEffects) truncateDeps(n int) { From 074b673880bd47059a89175ff4a552fbb94f9c63 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 22:55:43 -0700 Subject: [PATCH 131/194] Discard only what reads incomplete variances A measurement of variances re-entering one in progress marked the whole measurement circular, so everything computed until it finished was recorded as a query and then thrown away, even though almost none of it depends on variances. On zod, nearly all reads in a check were made under such a cycle, and a third of the instantiations were recomputations. Only comparisons and inferences read variances. As TypeScript does for Ternary.Unknown, a comparison that observed incomplete variances is not cached, nor is any comparison in progress around it. Once the outermost comparison completes, its result escapes to whatever asked, and only then is the measurement re-entered marked circular, so that what reads that result is discarded when it finishes. Comparisons made by a measurement itself are exempt: the variances measured are kept as before, since each is measured from the canonical entry whichever type is entered first. An inference reading incomplete variances marks the measurement circular right away. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 2 + tsc/internal/checker/inference.go | 4 +- tsc/internal/checker/relater.go | 85 +++++++++++++++++++++++++++---- 3 files changed, 79 insertions(+), 12 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 96ebaeaac565c..4f85f5d56edb9 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -690,6 +690,8 @@ type Checker struct { cycleParticipants []TypeResolution // Computations that observed a cycle in progress effectsMarkDepth int // 1 + resolution index of the innermost effects mark that may be discarded, or 0 varianceStack []VarianceStackEntry + incompleteVariances int // 1 + resolution index of the outermost measurement whose incomplete variances were observed, or 0; see getRecursiveVariances + measuringVariances bool // The comparison about to start measures variances; see isMarkerTypeAssignableTo flushBuf []*memoState resumeBuf []int deferredAttach []*memoState // See attachState diff --git a/tsc/internal/checker/inference.go b/tsc/internal/checker/inference.go index 9f390e8057107..b9fd0939cd8fa 100644 --- a/tsc/internal/checker/inference.go +++ b/tsc/internal/checker/inference.go @@ -285,11 +285,11 @@ func (c *Checker) inferFromAliasTypeArguments(n *InferenceState, source *Type, t nodeIsInJsFile := ast.IsInJSFile(source.alias.symbol.ValueDeclaration()) sourceTypes := c.fillMissingTypeArguments(source.alias.typeArguments, params, minParams, nodeIsInJsFile) targetTypes := c.fillMissingTypeArguments(target.alias.typeArguments, params, minParams, nodeIsInJsFile) - c.inferFromTypeArguments(n, sourceTypes, targetTypes, c.getAliasVariances(source.alias.symbol)) + c.inferFromTypeArguments(n, sourceTypes, targetTypes, c.getVariancesForInference(func() []VarianceFlags { return c.getAliasVariances(source.alias.symbol) })) } func (c *Checker) inferFromReferenceTypeArguments(n *InferenceState, source *Type, target *Type) { - c.inferFromTypeArguments(n, c.getTypeArguments(source), c.getTypeArguments(target), c.getVariances(source.AsTypeReference().target)) + c.inferFromTypeArguments(n, c.getTypeArguments(source), c.getTypeArguments(target), c.getVariancesForInference(func() []VarianceFlags { return c.getVariances(source.AsTypeReference().target) })) } func (c *Checker) inferFromTypeArguments(n *InferenceState, sourceTypes []*Type, targetTypes []*Type, variances []VarianceFlags) { diff --git a/tsc/internal/checker/relater.go b/tsc/internal/checker/relater.go index e62dd02647691..e62e9e87cd928 100644 --- a/tsc/internal/checker/relater.go +++ b/tsc/internal/checker/relater.go @@ -413,7 +413,16 @@ func (c *Checker) checkTypeRelatedToWithKey( // The comparison overflowed before, and would again. r.overflow = true } else { + measuring := c.measuringVariances + c.measuringVariances = false + saveIncomplete := c.incompleteVariances + c.incompleteVariances = 0 result = r.isRelatedToEx(source, target, RecursionFlagsBoth, errorNode != nil /*reportErrors*/, headMessage, IntersectionStateNone) + incomplete := c.incompleteVariances + c.incompleteVariances = saveIncomplete + if incomplete != 0 && !measuring { + c.markIncompleteVariances(incomplete) + } if r.topBegun { if r.overflow { // Record this relation as having failed such that we don't attempt the overflowing operation again. @@ -1562,13 +1571,6 @@ func (c *Checker) getVariancesWorker(symbol *ast.Symbol, typeParameters []*Type) // measured again with nothing in progress visible, measuring the others in the circularity as // it reaches them, and the measurements in progress then take those results. func (c *Checker) getRecursiveVariances(stackIndex int) []VarianceFlags { - // Results computed since the circularity was entered observed incomplete variances, so - // they are discarded once the measurement re-entered finishes. The variances themselves are - // kept, since each is measured from the canonical entry whichever type is entered first. - for i := stackIndex; i < len(c.varianceStack); i++ { - c.cycleParticipants = append(c.cycleParticipants, c.resolutions[c.varianceStack[i].resolution].typeResolution) - } - c.markTypeResolutionCircular(c.varianceStack[stackIndex].resolution) minIndex := stackIndex for i := stackIndex + 1; i < len(c.varianceStack); i++ { if c.compareSymbols(c.varianceStack[i].symbol, c.varianceStack[minIndex].symbol) < 0 { @@ -1587,9 +1589,48 @@ func (c *Checker) getRecursiveVariances(stackIndex int) []VarianceFlags { if variances := c.varianceLinks.Get(c.varianceStack[stackIndex].symbol).variances.get(c); variances != nil { return variances } + // The variances are incomplete. Only comparisons and inferences read + // variances: a comparison observing them is not cached, and once the + // outermost one completes, what reads its result is discarded when the + // measurement re-entered finishes, unless it is one measuring variances, + // which are kept, since each is measured from the canonical entry + // whichever type is entered first. + c.incompleteVariances = minIncompleteVariances(c.incompleteVariances, c.varianceStack[stackIndex].resolution+1) return []VarianceFlags{} } +func minIncompleteVariances(a int, b int) int { + if a == 0 || b != 0 && b < a { + return b + } + return a +} + +// markIncompleteVariances marks circular the measurement of variances in +// progress at index head-1 in resolutions, whose incomplete variances were +// observed, keeping the variances of it and those measured above it. +func (c *Checker) markIncompleteVariances(head int) { + for _, e := range c.varianceStack { + if e.resolution >= head-1 { + c.cycleParticipants = append(c.cycleParticipants, c.resolutions[e.resolution].typeResolution) + } + } + c.markTypeResolutionCircular(head - 1) +} + +// getVariancesForInference returns the variances get returns, for an +// inference, which is discarded if they are incomplete. +func (c *Checker) getVariancesForInference(get func() []VarianceFlags) []VarianceFlags { + saveIncomplete := c.incompleteVariances + c.incompleteVariances = 0 + variances := get() + if c.incompleteVariances != 0 { + c.markIncompleteVariances(c.incompleteVariances) + } + c.incompleteVariances = saveIncomplete + return variances +} + func (c *Checker) measureVariances(symbol *ast.Symbol, typeParameters []*Type, links *VarianceLinks) []VarianceFlags { variances := make([]VarianceFlags, len(typeParameters)) for i, tp := range typeParameters { @@ -1612,13 +1653,13 @@ func (c *Checker) measureVariances(symbol *ast.Symbol, typeParameters []*Type, l // invariance, covariance, contravariance or bivariance. typeWithSuper := c.createMarkerType(symbol, tp, c.markerSuperType) typeWithSub := c.createMarkerType(symbol, tp, c.markerSubType) - variance = core.IfElse(c.isTypeAssignableTo(typeWithSub, typeWithSuper), VarianceFlagsCovariant, 0) | - core.IfElse(c.isTypeAssignableTo(typeWithSuper, typeWithSub), VarianceFlagsContravariant, 0) + variance = core.IfElse(c.isMarkerTypeAssignableTo(typeWithSub, typeWithSuper), VarianceFlagsCovariant, 0) | + core.IfElse(c.isMarkerTypeAssignableTo(typeWithSuper, typeWithSub), VarianceFlagsContravariant, 0) // If the instantiations appear to be related bivariantly it may be because the // type parameter is independent (i.e. it isn't witnessed anywhere in the generic // type). To determine this we compare instantiations where the type parameter is // replaced with marker types that are known to be unrelated. - if variance == VarianceFlagsBivariant && c.isTypeAssignableTo(c.createMarkerType(symbol, tp, c.markerOtherType), typeWithSuper) { + if variance == VarianceFlagsBivariant && c.isMarkerTypeAssignableTo(c.createMarkerType(symbol, tp, c.markerOtherType), typeWithSuper) { variance = VarianceFlagsIndependent } if c.reliabilityFlags&RelationComparisonResultReportsUnmeasurable != 0 { @@ -1639,6 +1680,15 @@ func (c *Checker) measureVariances(symbol *ast.Symbol, typeParameters []*Type, l return variances } +// isMarkerTypeAssignableTo is isTypeAssignableTo for a comparison measuring +// variances. +func (c *Checker) isMarkerTypeAssignableTo(source *Type, target *Type) bool { + c.measuringVariances = true + result := c.isTypeAssignableTo(source, target) + c.measuringVariances = false + return result +} + func (c *Checker) getVarianceStackIndex(symbol *ast.Symbol) int { for i, entry := range c.varianceStack { if entry.symbol == symbol { @@ -3577,6 +3627,8 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError } saveReliabilityFlags := r.c.reliabilityFlags r.c.reliabilityFlags = 0 + saveIncomplete := r.c.incompleteVariances + r.c.incompleteVariances = 0 var result Ternary if r.expandingFlags == ExpandingFlagsBoth { if tr := r.c.tracer; tr != nil { @@ -3597,6 +3649,8 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError } propagatingVarianceFlags := r.c.reliabilityFlags r.c.reliabilityFlags |= saveReliabilityFlags + incomplete := r.c.incompleteVariances + r.c.incompleteVariances = minIncompleteVariances(saveIncomplete, incomplete) if recursionFlags&RecursionFlagsSource != 0 { r.sourceStack = r.sourceStack[:len(r.sourceStack)-1] r.sourceDepths = r.sourceDepths[:len(r.sourceDepths)-1] @@ -3616,6 +3670,17 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError // from scratch would give. Only the overflow is cached. r.resetMaybeStack(maybeStart, propagatingVarianceFlags, false) result = TernaryFalse + case incomplete != 0 && low >= depth: + // The result observed incomplete variances, so it is not what + // comparing from scratch would give (see getRecursiveVariances). + r.resetMaybeStack(maybeStart, propagatingVarianceFlags, false) + if result == TernaryMaybe { + result = TernaryTrue + } + case incomplete != 0: + // As above, once the outermost comparison this one assumed completes. + r.low = min(r.low, low) + r.truncated = r.truncated || truncated case result == TernaryFalse: // A false result goes straight into global cache (when something is false under // assumptions it will also be false without assumptions) From b70440ee60404f88b3deff057617d6081ba158c1 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sat, 31 Oct 2026 01:10:22 -0700 Subject: [PATCH 132/194] Stop comparisons of a measurement a restart superseded When a circularity among variance measurements restarts from its canonical entry, the restart sets the variances of each type it measures, and the measurements in progress below it only finish to throw their results away. Their comparisons read incomplete variances, so none of them is cached, and on zod's cluster of a dozen mutually recursive types, which restarts from a new canonical entry each time the cycle grows, that redone work was a tenth of all comparisons. A comparison that is part of a measurement whose variances are now set stops at once, as reading the incomplete variances of the measurement, so that what it compared is still not cached and the result is the same. PERF-PLACEHOLDER --- tsc/internal/checker/relater.go | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/tsc/internal/checker/relater.go b/tsc/internal/checker/relater.go index e62e9e87cd928..97ad0b0c13d57 100644 --- a/tsc/internal/checker/relater.go +++ b/tsc/internal/checker/relater.go @@ -415,6 +415,10 @@ func (c *Checker) checkTypeRelatedToWithKey( } else { measuring := c.measuringVariances c.measuringVariances = false + if measuring { + e := c.varianceStack[len(c.varianceStack)-1] + r.measured, r.measuredResolution = c.varianceLinks.Get(e.symbol), e.resolution + } saveIncomplete := c.incompleteVariances c.incompleteVariances = 0 result = r.isRelatedToEx(source, target, RecursionFlagsBoth, errorNode != nil /*reportErrors*/, headMessage, IntersectionStateNone) @@ -2950,7 +2954,12 @@ type Relater struct { expandingTargetDepth int overflow bool relationCount int - next *Relater + // measured is the variances of the type whose measurement the + // comparison is part of, if any, and measuredResolution the index in + // Checker.resolutions of that measurement. + measured *VarianceLinks + measuredResolution int + next *Relater } type maybeKey struct { @@ -3017,6 +3026,7 @@ func (c *Checker) putRelater(r *Relater) { r.expandingFlags, r.expandingSourceDepth, r.expandingTargetDepth = ExpandingFlagsNone, 0, 0 r.overflow = false r.relationCount = 0 + r.measured, r.measuredResolution = nil, 0 r.next = c.freeRelater c.freeRelater = r } @@ -3519,6 +3529,15 @@ func (r *Relater) recursiveTypeRelatedTo(source *Type, target *Type, reportError // important to have well-defined behavior even in cases that shouldn't normally occur. return TernaryFalse } + if r.measured != nil && len(r.measured.variances.peek()) != 0 { + // A restart from a circularity measured the type from the canonical + // entry (see getRecursiveVariances), so the measurement in progress is + // superseded and its result unused. It stops here, as reading the + // incomplete variances of the measurement, so that what it compared + // is not cached. + r.c.incompleteVariances = minIncompleteVariances(r.c.incompleteVariances, r.measuredResolution+1) + return TernaryFalse + } if !r.topBegun && !r.beginTop() { return TernaryFalse } From d12486ee4e26def14ee0b94c78b7a03577ebb299 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 23:32:16 -0700 Subject: [PATCH 133/194] Find an entry's computation in progress without scanning the stack Re-entering a memo map entry searched the whole resolution stack for the resolution computing it. Relation and instantiation maps keep hundreds of entries in progress during deep comparisons, so each begin paid for a scan of the stack per matching key. Each entry in progress now records the index of its resolution. PERF-PLACEHOLDER --- tsc/internal/checker/memo.go | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index d446a3f7d5bc0..03e739c3cb343 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -348,7 +348,8 @@ type memoMap[K comparable, V any] struct { type memoMapSide[K comparable] struct { memoStates map[K]*memoState - resolvingKeys []K // Keys of computations in progress without a memo state yet + resolvingKeys []K // Keys of computations in progress without a memo state yet + resolvingAt []int32 // Index in Checker.resolutions of each // If set, keyBits returns well-mixed bits of a key, with which stateKeys // filters the keys that may have a memo state, since few do and looking // up one that does not costs as much as one that does. @@ -529,6 +530,7 @@ func (m *memoMap[K, V]) begin(c *Checker, k K) { state = m.stateOf(k) } side.resolvingKeys = append(side.resolvingKeys, k) + side.resolvingAt = append(side.resolvingAt, int32(len(c.resolutions))) c.beginResolution(m, len(side.resolvingKeys)-1) if c.checking && c.memoPendingCount == 0 && c.memoTop|c.currentNodeResolution != 0 && !c.logEffects() { // beginCheckedMemo for the common case, without the calls. @@ -562,7 +564,8 @@ func (m *memoMap[K, V]) resolvingIndex(c *Checker, k K) int { if key != k { continue } - j := m.resolutionIndex(c, i) + j := int(m.side.resolvingAt[i]) + debug.Assert(c.resolutions[j].source == memoStateSource(m) && int(c.resolutions[j].index) == i, "entry in progress without a resolution") if j >= c.visibleStart { return j + 1 } @@ -571,15 +574,6 @@ func (m *memoMap[K, V]) resolvingIndex(c *Checker, k K) int { return 0 } -func (m *memoMap[K, V]) resolutionIndex(c *Checker, i int) int { - for j := len(c.resolutions) - 1; j >= 0; j-- { - if f := &c.resolutions[j]; f.source == memoStateSource(m) && int(f.index) == i { - return j - } - } - panic("entry in progress without a resolution") -} - // isOwnResolution reports whether the current resolution computes the entry // for k. func (m *memoMap[K, V]) isOwnResolution(c *Checker, k K) bool { @@ -594,6 +588,7 @@ func (m *memoMap[K, V]) stateAt(i int) *memoState { func (m *memoMap[K, V]) popState(i int) { clear(m.side.resolvingKeys[i:]) m.side.resolvingKeys = m.side.resolvingKeys[:i] + m.side.resolvingAt = m.side.resolvingAt[:i] } func (m *memoMap[K, V]) state(k K) *memoState { From 3f34cd795b5520782b378441e38beebb80dad21b Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 30 Oct 2026 23:32:17 -0700 Subject: [PATCH 134/194] Rule out reports with a filter that stays in cache Once any result has reports to replay, every read in a check looked for the result's memo state, through a filter sized for all states, which mostly misses cache. In a check with no effects pending, only reports are replayed, and few results have them, so a small filter of the keys with reports, and a flag per memo map, rule out nearly every read first. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 1 + tsc/internal/checker/checker_test.go | 1 + tsc/internal/checker/memo.go | 27 +++++++++++++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 4f85f5d56edb9..a2e9083169699 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -1030,6 +1030,7 @@ type memoStore struct { deferredDiagnosticCallbacks []func(c *Checker) memoStates map[memoKey]*memoState // Memo state of results computed by queries; see memo.go stateFilter []uint64 // Memo keys that may have a memo state; see memoState + errorFilter errorKeyFilter // Memo keys that may have reports; see observeMemo memoPendingCount int // Number of memoStates with unreplayed effects memoErrorStates int // Number of memoStates with reports; see setReported diff --git a/tsc/internal/checker/checker_test.go b/tsc/internal/checker/checker_test.go index accbda0072fbb..7e19db25c7509 100644 --- a/tsc/internal/checker/checker_test.go +++ b/tsc/internal/checker/checker_test.go @@ -589,6 +589,7 @@ var unmemoizedCacheFields = map[string]string{ "memoStore.memoPendingCount": unmemoizedMemoState, "memoStore.memoErrorStates": unmemoizedMemoState, "memoStore.stateFilter": unmemoizedMemoState, + "memoStore.errorFilter": unmemoizedMemoState, "memoStore.mu": unmemoizedMemoState, "memoStore.diagnostics": unmemoizedChecking, "memoStore.suggestionDiagnostics": unmemoizedChecking, diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 03e739c3cb343..85ca95e80cac6 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -272,6 +272,10 @@ func (m *memo[T]) setReported(c *Checker, v T, r currentNodeErrors) { } m.setIdentity(c, v) if r.list != nil || c.memoErrorStates != 0 && c.peekMemoState(m.key()) != nil { + if r.list != nil { + i := errorFilterIndex(m.key()) + c.errorFilter[i/64] |= 1 << (i % 64) + } c.memoState(m.key()).setErrors(c, r.list) } } @@ -355,6 +359,7 @@ type memoMapSide[K comparable] struct { // up one that does not costs as much as one that does. keyBits func(K) uint64 stateKeys []uint64 + hasErrors bool // Whether an entry ever had reports; see setReported } func (m *memoMap[K, V]) sideTable() *memoMapSide[K] { @@ -418,6 +423,10 @@ func (m *memoMap[K, V]) observe(c *Checker, k K) { if m.side.memoStates == nil && len(m.side.resolvingKeys) == 0 { return } + if c.checking && c.memoPendingCount == 0 && !m.side.hasErrors { + // Only reports are replayed; see observeMemo. + return + } // A computation in progress may not have a memo state yet; see // resolutionState. if state := m.stateOf(k); c.observeState(state) || state == nil && !c.checking { @@ -472,6 +481,9 @@ func (m *memoMap[K, V]) setReported(c *Checker, k K, v V, r currentNodeErrors) { } m.setIdentity(c, k, v) if r.list != nil || c.memoErrorStates != 0 && m.stateOf(k) != nil { + if r.list != nil { + m.sideTable().hasErrors = true + } m.state(k).setErrors(c, r.list) } } @@ -768,6 +780,14 @@ func (c *Checker) memoState(key memoKey) *memoState { const stateFilterBits = 22 +const errorFilterBits = 12 + +type errorKeyFilter [1 << errorFilterBits / 64]uint64 + +func errorFilterIndex(key memoKey) uint64 { + return uint64(key) * 0x9E3779B97F4A7C15 >> (64 - errorFilterBits) +} + func stateFilterIndex(key memoKey) uint64 { return uint64(key) * 0x9E3779B97F4A7C15 >> (64 - stateFilterBits) } @@ -853,6 +873,13 @@ func (c *Checker) observeMemo(key memoKey) { if !c.memoActive() { return } + if c.checking && c.memoPendingCount == 0 { + // Only reports are replayed, which few results have, so a filter + // small enough to stay in cache rules out most. + if i := errorFilterIndex(key); c.errorFilter[i/64]&(1<<(i%64)) == 0 { + return + } + } // A computation in progress may not have a memo state yet; see // resolutionState. if state := c.peekMemoState(key); c.observeState(state) || state == nil && !c.checking && c.resolving.count != 0 { From a146ff8c6b595f5ecd2db9a8e0561749e66bce4b Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sat, 31 Oct 2026 00:21:53 -0700 Subject: [PATCH 135/194] Stop runaway instantiations at twice the per-computation depth Chains that start a new memoized computation at every level, such as conditional types that compare instantiations of themselves, never reach the limit on one computation's depth and only stop at the limit on the whole instantiation. TypeScript stops every instantiation at a depth of 100, so a program it accepts never nests this deeply; the larger limit only needs to leave room for computations started below 100 to reach their own limit. At 1000, each runaway chain in zod v4 nested ten times deeper than TypeScript before stopping, with the same errors at any limit from 150 up. PERF-PLACEHOLDER --- tsc/internal/checker/memo.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 85ca95e80cac6..30991a1a09693 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -1867,7 +1867,7 @@ func (c *Checker) typeResolutionMemo(r *TypeResolution) *memoHeader { const ( instantiationDepthLimit = 100 - instantiationTotalDepthLimit = 1000 + instantiationTotalDepthLimit = 200 instantiationCountLimit = 5_000_000 ) From d6ae47876d5525ee4ce97a7142fe27e3c365e050 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sat, 31 Oct 2026 00:34:37 -0700 Subject: [PATCH 136/194] Size the memo state filter to the number of states Few results have a memo state (about two thousand in zod v4), yet every computation probes the filter of their keys, which at four million bits missed the cache on most probes. Grow the filter with the states, keeping enough bits per state for few false positives. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 2 +- tsc/internal/checker/memo.go | 58 +++++++++++++++++++++++++-------- 2 files changed, 45 insertions(+), 15 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index a2e9083169699..255907093dd65 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -1029,7 +1029,7 @@ type memoStore struct { nonExistentPropertyNodes collections.Set[*ast.Node] // Property names reported as nonexistent deferredDiagnosticCallbacks []func(c *Checker) memoStates map[memoKey]*memoState // Memo state of results computed by queries; see memo.go - stateFilter []uint64 // Memo keys that may have a memo state; see memoState + stateFilter stateKeyFilter // Memo keys that may have a memo state; see memoState errorFilter errorKeyFilter // Memo keys that may have reports; see observeMemo memoPendingCount int // Number of memoStates with unreplayed effects memoErrorStates int // Number of memoStates with reports; see setReported diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 30991a1a09693..a4ca74918f9d1 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -3,6 +3,7 @@ package checker import ( "iter" "maps" + "math/bits" "slices" "unsafe" @@ -769,16 +770,52 @@ func (c *Checker) memoState(key memoKey) *memoState { } state = &memoState{} c.memoStates[key] = state - if c.stateFilter == nil { - c.stateFilter = make([]uint64, 1<> f.shift +} + +func (f *stateKeyFilter) mayContain(key memoKey) bool { + if f.words == nil { + return false + } + i := f.index(key) + return f.words[i/64]&(1<<(i%64)) != 0 +} + +// add adds key, which states has just been given a state for. +func (f *stateKeyFilter) add(key memoKey, states map[memoKey]*memoState) { + if n := 64 * len(f.words); n < stateFilterBitsPerState*len(states) { + n = max(2*n, 1<<15) + f.words = make([]uint64, n/64) + f.shift = uint8(65 - bits.Len(uint(n))) + for k := range states { + f.set(k) + } + return + } + f.set(key) +} + +func (f *stateKeyFilter) set(key memoKey) { + i := f.index(key) + f.words[i/64] |= 1 << (i % 64) +} const errorFilterBits = 12 @@ -788,17 +825,10 @@ func errorFilterIndex(key memoKey) uint64 { return uint64(key) * 0x9E3779B97F4A7C15 >> (64 - errorFilterBits) } -func stateFilterIndex(key memoKey) uint64 { - return uint64(key) * 0x9E3779B97F4A7C15 >> (64 - stateFilterBits) -} - // peekMemoState returns the memo state of the result identified by key, or // nil if it has none, consulting a filter first since most results have none. func (c *Checker) peekMemoState(key memoKey) *memoState { - if c.stateFilter == nil { - return nil - } - if i := stateFilterIndex(key); c.stateFilter[i/64]&(1<<(i%64)) == 0 { + if !c.stateFilter.mayContain(key) { return nil } return c.memoStates[key] From 3dfb95b40fafac847b2019bf54591a66c585ea1f Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sat, 31 Oct 2026 02:00:25 -0700 Subject: [PATCH 137/194] Store variances by symbol id Cycle searches visit the resolution of every variance measurement on the stack, and each visit looks up the symbol's variances in a hash map. The symbol link store indexes by symbol id instead, as other symbol links do. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 255907093dd65..457f2b3bc8af4 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -914,7 +914,7 @@ type memoStore struct { typeAliasLinks core.LinkStore[*ast.Symbol, TypeAliasLinks] declaredTypeLinks core.LinkStore[*ast.Symbol, DeclaredTypeLinks] spreadLinks core.LinkStore[*ast.Symbol, SpreadLinks] - varianceLinks core.LinkStore[*ast.Symbol, VarianceLinks] + varianceLinks symbolLinkStore[VarianceLinks] ReverseMappedSymbolLinks core.LinkStore[*ast.Symbol, ReverseMappedSymbolLinks] markedAssignmentSymbolLinks core.LinkStore[*ast.Symbol, MarkedAssignmentSymbolLinks] importedContainingModules memoMap[symbolFileKey, []*ast.Symbol] // Modules imported by a file that export a symbol From 43f3ddd69039d74952e649eb876dd454512e6887 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sat, 31 Oct 2026 02:00:32 -0700 Subject: [PATCH 138/194] Read cached results without beginning a memo Most memo frames on large programs wrap a read of a result that is already cached: the type of a type node, a type parameter's constraint or default, a symbol's declared type, members or exports, a module's exports. Beginning and ending the memo costs a hash insert and delete and a stack push for each. When no memo is active, a memo records and replays nothing, and a cached read enters no computation, so skipping the memo changes nothing, unless the computation is in progress: a class or interface publishes its declared type before it is complete, and re-entering it must still find the cycle. A type node's type is only read from its links where getConditionalFlowTypeOfType would leave it unchanged. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 73 ++++++++++++++++++++++++++++++--- tsc/internal/checker/memo.go | 13 ++++++ 2 files changed, 81 insertions(+), 5 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 457f2b3bc8af4..2ae8396b26ba5 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -17023,6 +17023,9 @@ func (c *Checker) getExportsOfSymbol(symbol *ast.Symbol) ast.SymbolTable { func (c *Checker) getResolvedMembersOrExportsOfSymbol(symbol *ast.Symbol, resolutionKind MembersOrExportsResolutionKind) ast.SymbolTable { key := memoKeyOf(symbol, memoResolvedMembers+memoField(resolutionKind)) + if links := c.membersAndExportsLinks.TryGet(symbol); links != nil && links[resolutionKind] != nil && c.readsWithoutMemo(key) { + return links[resolutionKind] + } if floor := c.findEarlierMembersInCycle(key, symbol); floor >= 0 { return c.yieldMembers(key, symbol, resolutionKind, floor) } @@ -17290,7 +17293,11 @@ func (c *Checker) getMembersOfSymbol(symbol *ast.Symbol) ast.SymbolTable { func (c *Checker) getExportsOfModule(moduleSymbol *ast.Symbol) ast.SymbolTable { links := c.moduleSymbolLinks.Get(moduleSymbol) - c.beginMemo(memoKeyOf(links, memoModuleExports)) + key := memoKeyOf(links, memoModuleExports) + if links.resolvedExports != nil && c.readsWithoutMemo(key) { + return links.resolvedExports + } + c.beginMemo(key) result := c.getExportsOfModuleCached(moduleSymbol, links) c.endMemo() return result @@ -18320,7 +18327,11 @@ func (c *Checker) getConstraintOfType(t *Type) *Type { } func (c *Checker) getConstraintOfTypeParameter(typeParameter *Type) *Type { - c.beginMemo(memoKeyOf(typeParameter, memoTypeParameterConstraint)) + key := memoKeyOf(typeParameter, memoTypeParameterConstraint) + if typeParameter.flags&TypeFlagsTypeParameter != 0 && typeParameter.AsTypeParameter().resolvedBaseConstraint.peek() != nil && typeParameter.AsTypeParameter().constraint.peek() != nil && c.readsWithoutMemo(key) { + return c.getConstraintOfTypeParameterUncached(typeParameter) + } + c.beginMemo(key) result := c.getConstraintOfTypeParameterUncached(typeParameter) c.endMemo() return result @@ -24426,7 +24437,11 @@ func (c *Checker) getDefaultTypeArgumentType(isInJavaScriptFile bool) *Type { // this gets the instantiated default type of its target. If the type parameter has no default type or // the default is circular, `undefined` is returned. func (c *Checker) getDefaultFromTypeParameter(t *Type) *Type { - c.beginMemo(memoKeyOf(t, memoTypeParameterDefault)) + key := memoKeyOf(t, memoTypeParameterDefault) + if t.flags&TypeFlagsTypeParameter != 0 && t.AsTypeParameter().resolvedDefaultType.peek() != nil && c.readsWithoutMemo(key) { + return c.getDefaultFromTypeParameterUncached(t) + } + c.beginMemo(key) result := c.getDefaultFromTypeParameterUncached(t) c.endMemo() return result @@ -25365,7 +25380,11 @@ func (c *Checker) tryGetTypeFromTypeNode(node *ast.Node) *Type { } func (c *Checker) getTypeFromTypeNode(node *ast.Node) *Type { - c.beginMemo(memoKeyOf(node, memoTypeNodeType)) + key := memoKeyOf(node, memoTypeNodeType) + if t := c.peekTypeFromTypeNode(node); t != nil && c.readsWithoutMemo(key) { + return t + } + c.beginMemo(key) result := c.getTypeFromTypeNodeUncached(node) c.endMemo() return result @@ -25383,6 +25402,30 @@ func memoTypeNode(c *Checker, node *ast.Node, worker func(*Checker, *ast.Node) * return worker(c, node) } +// peekTypeFromTypeNode returns the type of node if reading it only reads a +// cached result, or nil: for a kind whose type is cached in the node's links, +// at a location where getConditionalFlowTypeOfType leaves it unchanged. +func (c *Checker) peekTypeFromTypeNode(node *ast.Node) *Type { + switch node.Kind { + case ast.KindTypeReference, ast.KindExpressionWithTypeArguments, ast.KindUnionType, ast.KindIntersectionType, + ast.KindConditionalType, ast.KindIndexedAccessType, ast.KindArrayType, ast.KindTupleType, ast.KindThisType, + ast.KindTypeOperator, ast.KindLiteralType: + links := c.typeNodeLinks.TryGet(node) + if links == nil || links.resolvedType.peek() == nil { + return nil + } + for n := node; n != nil && !ast.IsStatement(n) && n.Kind != ast.KindJSDoc; n = n.Parent { + parent := n.Parent + if ast.IsConditionalTypeNode(parent) && n == parent.AsConditionalTypeNode().TrueType || + ast.IsMappedTypeNode(parent) && parent.AsMappedTypeNode().NameType == nil && n == parent.Type() { + return nil + } + } + return links.resolvedType.peek() + } + return nil +} + func (c *Checker) getTypeFromTypeNodeUncached(node *ast.Node) *Type { return c.getConditionalFlowTypeOfType(c.getTypeFromTypeNodeWorker(node), node) } @@ -26302,7 +26345,11 @@ func isLocalTypeAlias(symbol *ast.Symbol) bool { } func (c *Checker) getDeclaredTypeOfSymbol(symbol *ast.Symbol) *Type { - c.beginMemo(memoKeyOf(symbol, memoDeclaredType)) + key := memoKeyOf(symbol, memoDeclaredType) + if t := c.peekDeclaredTypeOfSymbol(symbol); t != nil && c.readsWithoutMemo(key) { + return t + } + c.beginMemo(key) result := c.getDeclaredTypeOfSymbolUncached(symbol) c.endMemo() return result @@ -26316,6 +26363,22 @@ func (c *Checker) getDeclaredTypeOfSymbolUncached(symbol *ast.Symbol) *Type { return result } +// peekDeclaredTypeOfSymbol returns the declared type of symbol if it is +// resolved, or nil. +func (c *Checker) peekDeclaredTypeOfSymbol(symbol *ast.Symbol) *Type { + switch { + case symbol.Flags()&ast.SymbolFlagsTypeAlias != 0 && symbol.Flags()&(ast.SymbolFlagsClass|ast.SymbolFlagsInterface|ast.SymbolFlagsTypeParameter) == 0: + if links := c.typeAliasLinks.TryGet(symbol); links != nil { + return links.declaredType.peek() + } + case symbol.Flags()&(ast.SymbolFlagsClass|ast.SymbolFlagsInterface|ast.SymbolFlagsTypeParameter|ast.SymbolFlagsEnum|ast.SymbolFlagsEnumMember|ast.SymbolFlagsAlias) != 0: + if links := c.declaredTypeLinks.TryGet(symbol); links != nil { + return links.declaredType.peek() + } + } + return nil +} + func (c *Checker) tryGetDeclaredTypeOfSymbol(symbol *ast.Symbol) *Type { switch { case symbol.Flags()&(ast.SymbolFlagsClass|ast.SymbolFlagsInterface) != 0: diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index a4ca74918f9d1..5ef53190e38a5 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -674,6 +674,19 @@ func (c *Checker) syncObserving() { // effects recorded by a previous computation of that result, and starts a // resolution for this computation, which in a query records its effects. It // must be matched by endMemo. +// readsWithoutMemo reports whether a memoized computation identified by key, +// whose result is cached, can read it without beginning the memo: when no +// memo is active, the memo records and replays nothing, and the computation +// only reads, unless it re-enters itself in progress, with the result +// published before it is complete. +func (c *Checker) readsWithoutMemo(key memoKey) bool { + if c.observing() { + return false + } + _, resolving := c.resolving.get(key) + return !resolving +} + func (c *Checker) beginMemo(key memoKey) { state := c.peekMemoState(key) resolving := c.beginResolving(key) From 25b9b2f332318e3a2ae710798085d7bb5af842fb Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sat, 31 Oct 2026 02:07:11 -0700 Subject: [PATCH 139/194] Look for reports only in results that can have them Once any result has reports to replay, which happens early in most programs, every cached read while checking went out of line to the error filter. Only a type alias's declared type and the instantiations of type aliases and conditional types collect reports, so reads of other results now only account for pending effects. The alias's declared type gets its own kind of memo, which still looks for them. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 2 +- tsc/internal/checker/memo.go | 31 +++++++++++++++++++++++-------- tsc/internal/checker/types.go | 2 +- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 2ae8396b26ba5..1e19867c5ef77 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -26368,7 +26368,7 @@ func (c *Checker) getDeclaredTypeOfSymbolUncached(symbol *ast.Symbol) *Type { func (c *Checker) peekDeclaredTypeOfSymbol(symbol *ast.Symbol) *Type { switch { case symbol.Flags()&ast.SymbolFlagsTypeAlias != 0 && symbol.Flags()&(ast.SymbolFlagsClass|ast.SymbolFlagsInterface|ast.SymbolFlagsTypeParameter) == 0: - if links := c.typeAliasLinks.TryGet(symbol); links != nil { + if links := c.typeAliasLinks.TryGet(symbol); links != nil && c.memoErrorStates == 0 { return links.declaredType.peek() } case symbol.Flags()&(ast.SymbolFlagsClass|ast.SymbolFlagsInterface|ast.SymbolFlagsTypeParameter|ast.SymbolFlagsEnum|ast.SymbolFlagsEnumMember|ast.SymbolFlagsAlias) != 0: diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 5ef53190e38a5..8f75e78d40fa1 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -258,13 +258,27 @@ func (m *memo[T]) setIdentity(c *Checker, v T) { } } +// A memoReported is a memo whose result can have errors to replay; see +// setReported. Reading it accounts for them even when nothing else must be +// accounted for. +type memoReported[T comparable] struct { + memo[T] +} + +func (m *memoReported[T]) get(c *Checker) T { + if c.observing() || c.memoErrorStates != 0 { + c.observeCell(&m.memoHeader) + } + return m.memoValue +} + // setReported is setIdentity for a result whose computation collected errors // reported at the current node, as returned by endCurrentNodeErrors. Every // node reusing the result reports them again, as it would had it computed the // result itself. If computing the result elsewhere may not report them (see // endCurrentNodeErrors), it is instead discarded with other results cached // for the current node. -func (m *memo[T]) setReported(c *Checker, v T, r currentNodeErrors) { +func (m *memoReported[T]) setReported(c *Checker, v T, r currentNodeErrors) { if r.cyclic { if c.logResults() { m.logDiscard(c) @@ -403,7 +417,7 @@ func (m *memoMap[K, V]) stateOf(k K) *memoState { // get returns the cached result for k, accounting for the effects of // computing it. func (m *memoMap[K, V]) get(c *Checker, k K) (V, bool) { - if m.side != nil && c.observing() { + if m.side != nil && (c.observing() || m.side.hasErrors) { m.observe(c, k) } v, ok := m.memoEntries[k] @@ -654,19 +668,20 @@ func (c *Checker) memoActive() bool { return !c.checking || c.memoPendingCount|c.memoErrorStates != 0 } -// observing reports whether reading a cached result must account for its -// effects. It is memoActive, kept in a field for the many reads that check -// it. +// observing reports whether reading a cached result that cannot have errors +// to replay must account for its effects: memoActive, except for results +// with errors, which only memoReported and memoMap cache. It is kept in a +// field for the many reads that check it. func (c *Checker) observing() bool { return c.observingMemos } -// syncObserving updates observingMemos after a change to what memoActive -// depends on: the checking flag or the counts it reads. The counts are shared with other checkers using the same +// syncObserving updates observingMemos after a change to what it depends +// on: the checking flag or the counts it reads. The counts are shared with other checkers using the same // store, but those only run while this one is not checking, and it syncs on // starting to check. func (c *Checker) syncObserving() { - c.observingMemos = c.memoActive() + c.observingMemos = !c.checking || c.memoPendingCount != 0 } // beginMemo is called on entry to a memoized function whose result for this diff --git a/tsc/internal/checker/types.go b/tsc/internal/checker/types.go index 29bfa49847d07..8476777341c1a 100644 --- a/tsc/internal/checker/types.go +++ b/tsc/internal/checker/types.go @@ -310,7 +310,7 @@ type ExportTypeLinks struct { // Links for type aliases type TypeAliasLinks struct { - declaredType memo[*Type] + declaredType memoReported[*Type] typeParameters []*Type // Type parameters of type alias (undefined if non-generic) instantiations memoMap[CacheHashKey, *Type] // Instantiations of generic type alias (undefined if non-generic) } From d2c28a45ea7dc514c4fbec103906f0bfde949bc4 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sat, 31 Oct 2026 03:28:46 -0700 Subject: [PATCH 140/194] Key late-bindable kinds by parent Whether a member can late-merge depends only on its parent, so keying the dense store by member filled one entry per member and missed for every new member of an already-seen parent. Key it by parent instead, which also makes the lateBindableKinds memo map redundant, so drop it. Members of one parent are usually looked up together, so also keep the last parent and its kinds on the checker. This is per-checker scratch and stays off the shared memo store. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 51 +++++++++++++++++---------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 1e19867c5ef77..2383434ac5b0d 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -619,19 +619,23 @@ var nextCheckerID atomic.Uint32 // checkers may share one store; see Clone. type Checker struct { *memoStore - compareSymbols func(*ast.Symbol, *ast.Symbol) int - compareSymbolChains func([]*ast.Symbol, []*ast.Symbol) int - resolutionSerials uint32 - resolutions []resolution - instantiationStack []*Type - conditionalConstraintDepth depthLimit - inlineLevel depthLimit - serializationLevel depthLimit - currentNode *ast.Node - currentNodeResolution int // 1-based index in resolutions of the resolution of currentNode, or 0; see enterCurrentNode - querySave savedCurrentNode // Saved by the query in progress made outside of checking; see startEffects - inQuery bool - varianceTypeParameter *Type + compareSymbols func(*ast.Symbol, *ast.Symbol) int + compareSymbolChains func([]*ast.Symbol, []*ast.Symbol) int + resolutionSerials uint32 + resolutions []resolution + instantiationStack []*Type + conditionalConstraintDepth depthLimit + inlineLevel depthLimit + serializationLevel depthLimit + currentNode *ast.Node + currentNodeResolution int // 1-based index in resolutions of the resolution of currentNode, or 0; see enterCurrentNode + querySave savedCurrentNode // Saved by the query in progress made outside of checking; see startEffects + inQuery bool + varianceTypeParameter *Type + // The parent last looked up in parentLateBindableKinds and its kinds, as + // members of one parent are often looked up together. + lastLateBindableParent *ast.Symbol + lastLateBindableKinds uint8 isInferencePartiallyBlocked bool wasCanceled bool buildingExternalModuleContainers bool @@ -885,9 +889,8 @@ type memoStore struct { suggestionDiagnostics ast.DiagnosticsCollection mergedSymbols symbolLinkStore[*ast.Symbol] lateMergedSymbols memoMap[*ast.Symbol, *ast.Symbol] - lateBindableKinds memoMap[*ast.Symbol, uint8] - // lateBindableKinds of the parent of a member, with lateBindableKnown - // set once known; see getLateMergedSymbol. + // getLateBindableKinds of the merged symbol of a parent of members, with + // lateBindableKnown set once known; see getLateMergedSymbol. parentLateBindableKinds symbolLinkStore[uint8] // mergesFrozen is set once global merging is done; mergedSymbols is // immutable from then on. @@ -15220,11 +15223,15 @@ func (c *Checker) getLateMergedSymbol(symbol *ast.Symbol) *ast.Symbol { if !late { // Most members cannot merge, which depends only on syntax and on // the merges done before checking, so it is looked up cheaply. - known := c.parentLateBindableKinds.Get(symbol) - if *known == 0 { - *known = c.getLateBindableKinds(c.getMergedSymbol(symbol.Parent())) | lateBindableKnown + if symbol.Parent() != c.lastLateBindableParent { + known := c.parentLateBindableKinds.Get(symbol.Parent()) + if *known == 0 { + *known = c.getLateBindableKinds(c.getMergedSymbol(symbol.Parent())) | lateBindableKnown + } + c.lastLateBindableParent = symbol.Parent() + c.lastLateBindableKinds = *known &^ lateBindableKnown } - lateBindable = *known &^ lateBindableKnown + lateBindable = c.lastLateBindableKinds if lateBindable == 0 { return symbol } @@ -15260,9 +15267,6 @@ const lateBindableKnown uint8 = 1 << 7 // members and exports of symbol could late-bind any when resolved, as a set // of 1< Date: Sat, 31 Oct 2026 03:43:14 -0700 Subject: [PATCH 141/194] Look up a computation's memo state only when needed Beginning a computation in a check looked up the memo state of its result up front, though in the common case nothing reads it: the state is created lazily when the computation has effects to retain, and otherwise only compared against in attachState. For memo maps keyed by relation keys that lookup misses the cache, since the filter of keys with a state is large. Leave the state unset on the fast path, and have attachState peek it when it needs to compare. Peeking later can only find a state created since the computation began, which the computation's own writers already skip, so the comparison gives the same answer. PERF-PLACEHOLDER --- tsc/internal/checker/memo.go | 37 ++++++++++++++++++++++------- tsc/internal/checker/resolutions.go | 1 + 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 8f75e78d40fa1..fc6f679465e1e 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -544,7 +544,6 @@ func (m *memoMap[K, V]) compute(c *Checker, k K, fn func() V) V { // enter starts the computation of the result for k; see beginMemo. func (m *memoMap[K, V]) begin(c *Checker, k K) { - state := m.stateOf(k) side := m.sideTable() outer := 0 if len(side.resolvingKeys) != 0 { @@ -553,24 +552,25 @@ func (m *memoMap[K, V]) begin(c *Checker, k K) { if outer != 0 { // Re-entering an entry marks the cycle circular; see reentryCircular. c.markCircular(outer - 1) - // Marking may have given the entry a state. - state = m.stateOf(k) } side.resolvingKeys = append(side.resolvingKeys, k) side.resolvingAt = append(side.resolvingAt, int32(len(c.resolutions))) c.beginResolution(m, len(side.resolvingKeys)-1) if c.checking && c.memoPendingCount == 0 && c.memoTop|c.currentNodeResolution != 0 && !c.logEffects() { - // beginCheckedMemo for the common case, without the calls. + // beginCheckedMemo for the common case, without the calls. The memo + // state of the result is looked up only if needed; see + // resolutionState. n := len(c.resolutions) - 1 f := &c.resolutions[n] f.memo = true f.prevMemo = int32(c.memoTop) - f.result = state f.entry = c.currentNode f.attachStart = int32(len(c.deferredAttach)) c.memoTop = n + 1 return } + // Looked up after marking a cycle, which may give the entry a state. + state := m.stateOf(k) if c.checking { if c.memoPendingCount != 0 && state != nil { c.replayPending(state) @@ -612,6 +612,10 @@ func (m *memoMap[K, V]) stateAt(i int) *memoState { return m.state(m.side.resolvingKeys[i]) } +func (m *memoMap[K, V]) peekStateAt(i int) *memoState { + return m.stateOf(m.side.resolvingKeys[i]) +} + func (m *memoMap[K, V]) popState(i int) { clear(m.side.resolvingKeys[i:]) m.side.resolvingKeys = m.side.resolvingKeys[:i] @@ -703,22 +707,23 @@ func (c *Checker) readsWithoutMemo(key memoKey) bool { } func (c *Checker) beginMemo(key memoKey) { - state := c.peekMemoState(key) resolving := c.beginResolving(key) c.appendResolution(key, nil, 0, int32(len(c.instantiationStack))) n := len(c.resolutions) - 1 f := &c.resolutions[n] f.resolving = resolving if c.checking && c.memoPendingCount == 0 && c.memoTop|c.currentNodeResolution != 0 && !c.logEffects() { - // beginCheckedMemo for the common case, without the calls. + // beginCheckedMemo for the common case, without the calls. The memo + // state of the result is looked up only if needed; see + // resolutionState. f.memo = true f.prevMemo = int32(c.memoTop) - f.result = state f.entry = c.currentNode f.attachStart = int32(len(c.deferredAttach)) c.memoTop = n + 1 return } + state := c.peekMemoState(key) if c.checking { if c.memoPendingCount != 0 { c.replayPending(state) @@ -880,7 +885,7 @@ func (c *Checker) attachState(state *memoState) { if n < 0 { return } - if c.resolutions[n].result == state { + if c.peekResolutionState(&c.resolutions[n]) == state { // Writers skip their own computation before creating its state, so // a state created later is never the computation's own. return @@ -1130,6 +1135,20 @@ func (c *Checker) resolutionState(f *resolution) *memoState { return f.result } +// peekResolutionState is resolutionState without creating the memo state, +// returning nil if the result has none yet. +func (c *Checker) peekResolutionState(f *resolution) *memoState { + if f.result == nil { + switch { + case f.source != nil: + f.result = f.source.peekStateAt(int(f.index)) + case f.key != 0: + f.result = c.peekMemoState(f.key) + } + } + return f.result +} + // retainEffects retains the effects of a computation that just finished for // replay by later reuse of its result, and adds them to the enclosing // computation. diff --git a/tsc/internal/checker/resolutions.go b/tsc/internal/checker/resolutions.go index 64a07f880615a..687f9de9dd4e5 100644 --- a/tsc/internal/checker/resolutions.go +++ b/tsc/internal/checker/resolutions.go @@ -49,6 +49,7 @@ type resolution struct { // demand, since few computations do work worth storing. type memoStateSource interface { stateAt(i int) *memoState + peekStateAt(i int) *memoState popState(i int) } From 9ce5a095e2c22fea595b7ab75da4727d91297df8 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sat, 31 Oct 2026 04:04:44 -0700 Subject: [PATCH 142/194] Index global resolutions by a small integer Each call of a global type or symbol resolver looked up its result in the store by a key holding the global's name, hashing the string every time. Assigning each key an integer when its resolver is created lets the result live in a memo at that index instead, with no lookup at all. Resolvers are only created as a checker is initialized, in the same order, so checkers sharing a store agree on the integers, and the memos can be allocated once, after the first checker created them. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 62 ++++++++++++++++++++++------ tsc/internal/checker/checker_test.go | 3 ++ 2 files changed, 53 insertions(+), 12 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 2383434ac5b0d..509c9f59ddea5 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -621,6 +621,7 @@ type Checker struct { *memoStore compareSymbols func(*ast.Symbol, *ast.Symbol) int compareSymbolChains func([]*ast.Symbol, []*ast.Symbol) int + globalIDs map[globalKey]globalID resolutionSerials uint32 resolutions []resolution instantiationStack []*Type @@ -830,8 +831,8 @@ type memoStore struct { canCollectSymbolAliasAccessibilityData bool arrayVariances []VarianceFlags globals ast.SymbolTable - globalTypes memoMap[globalKey, *Type] - globalSymbols memoMap[globalKey, *ast.Symbol] + globalTypes []memo[resolvedGlobal[*Type]] // Indexed by globalID + globalSymbols []memo[resolvedGlobal[*ast.Symbol]] // Indexed by globalID stringLiteralTypes memoMap[string, *Type] numberLiteralTypes memoMap[jsnum.Number, *Type] nanType *Type @@ -1229,6 +1230,14 @@ func (c *Checker) initCheckerState() { c.getGlobalClassFieldDecoratorContextType = c.getGlobalTypeResolver("ClassFieldDecoratorContext", 2 /*arity*/, true /*reportErrors*/) c.initializeClosures() c.initializeIterationResolvers() + // Memos are identified by their addresses, so the cells are allocated + // once all resolvers have their IDs, which every checker sharing the + // store assigns alike. + if c.globalTypes == nil { + c.globalTypes = make([]memo[resolvedGlobal[*Type]], len(c.globalIDs)) + c.globalSymbols = make([]memo[resolvedGlobal[*ast.Symbol]], len(c.globalIDs)) + } + debug.Assert(len(c.globalTypes) == len(c.globalIDs), "checkers sharing a store assigned different global IDs") } // Clone returns a new checker sharing c's store. The clone observes and @@ -1283,6 +1292,24 @@ type globalKey struct { reportErrors bool } +// globalID is the small integer standing for a globalKey in the store, so +// that resolving a global hashes an integer rather than a name. Resolvers are +// all created as a checker is initialized, in the same order, so every +// checker sharing a store assigns the same IDs. +type globalID uint32 + +func (c *Checker) getGlobalID(key globalKey) globalID { + if id, ok := c.globalIDs[key]; ok { + return id + } + if c.globalIDs == nil { + c.globalIDs = make(map[globalKey]globalID) + } + id := globalID(len(c.globalIDs)) + c.globalIDs[key] = id + return id +} + type globalKind uint8 const ( @@ -1294,17 +1321,24 @@ const ( // Resolve to the global class or interface by the given name and arity, or emptyObjectType/emptyGenericType otherwise func (c *Checker) getGlobalTypeResolver(name string, arity int, reportErrors bool) func() *Type { - key := globalKey{globalKindType, name, arity, reportErrors} + key := c.getGlobalID(globalKey{globalKindType, name, arity, reportErrors}) return func() *Type { - if t, ok := c.globalTypes.get(c, key); ok { - return t + m := &c.globalTypes[key] + if r := m.get(c); r.resolved { + return r.value } - return c.globalTypes.compute(c, key, func() *Type { - return c.getGlobalType(name, arity, reportErrors) - }) + return c.memoCompute(m, func() resolvedGlobal[*Type] { + return resolvedGlobal[*Type]{c.getGlobalType(name, arity, reportErrors), true} + }).value } } +// resolvedGlobal is the result of resolving a global, which may be nil. +type resolvedGlobal[T any] struct { + value T + resolved bool +} + // Resolve to the global type alias symbol by the given name and arity, or nil otherwise func (c *Checker) getGlobalTypeAliasResolver(name string, arity int, reportErrors bool) func() *ast.Symbol { return c.getGlobalSymbolResolver(globalKey{globalKindTypeAlias, name, arity, reportErrors}, func() *ast.Symbol { @@ -1325,12 +1359,16 @@ func (c *Checker) getGlobalTypeSymbolResolver(name string, reportErrors bool) fu }) } -func (c *Checker) getGlobalSymbolResolver(key globalKey, resolve func() *ast.Symbol) func() *ast.Symbol { +func (c *Checker) getGlobalSymbolResolver(k globalKey, resolve func() *ast.Symbol) func() *ast.Symbol { + key := c.getGlobalID(k) return func() *ast.Symbol { - if symbol, ok := c.globalSymbols.get(c, key); ok { - return symbol + m := &c.globalSymbols[key] + if r := m.get(c); r.resolved { + return r.value } - return c.globalSymbols.compute(c, key, resolve) + return c.memoCompute(m, func() resolvedGlobal[*ast.Symbol] { + return resolvedGlobal[*ast.Symbol]{resolve(), true} + }).value } } diff --git a/tsc/internal/checker/checker_test.go b/tsc/internal/checker/checker_test.go index 7e19db25c7509..a09946dd26c20 100644 --- a/tsc/internal/checker/checker_test.go +++ b/tsc/internal/checker/checker_test.go @@ -282,6 +282,9 @@ func TestCachedStateIsMemoized(t *testing.T) { } func isMemoType(expr goast.Expr) bool { + if a, ok := expr.(*goast.ArrayType); ok { + expr = a.Elt + } switch e := expr.(type) { case *goast.IndexExpr: expr = e.X From d15fb8c2348f6476c80966d150f3d400223dfeb0 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sat, 31 Oct 2026 04:58:08 -0700 Subject: [PATCH 143/194] Share awaited and promised types with callers that report errors Callers passing an error node computed awaited and promised types in their own context, so their errors belong to their node, but this also meant they never reused a cached result. Awaiting in async functions passes an error node, so most awaited types were computed again at every use. A promised type reports errors only when there is none, so a result is shared with every caller. An awaited type can report errors alongside a result, for a union some of whose members cannot be awaited, so only a result whose computation reported nothing is cached. Callers with an error node then reuse it, and compute in their own context only when there is no such result. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 34 ++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 509c9f59ddea5..c079f467aadaf 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -622,6 +622,7 @@ type Checker struct { compareSymbols func(*ast.Symbol, *ast.Symbol) int compareSymbolChains func([]*ast.Symbol, []*ast.Symbol) int globalIDs map[globalKey]globalID + awaitedTypeErrors uint32 // Errors computing awaited types have reported or would report; see getAwaitedTypeNoAliasEx resolutionSerials uint32 resolutions []resolution instantiationStack []*Type @@ -31911,14 +31912,18 @@ func (c *Checker) getPromisedTypeOfPromiseEx(t *Type, errorNode *ast.Node, thisT if IsTypeAny(t) { return nil } - if errorNode != nil { - // Errors belong to errorNode; see getIterationTypesOfIterable. - return c.getPromisedTypeOfPromiseWorker(t, errorNode, thisTypeForErrorOut) - } key := CachedTypeKey{kind: CachedTypeKindPromisedTypeOfPromise, typeId: t.id} if cached, _ := c.cachedTypes.get(c, key); cached != nil { return cached } + if errorNode != nil { + // Errors belong to errorNode; see getIterationTypesOfIterable. Only + // a missing result reports any, so a result is shared all the same. + if result := c.getPromisedTypeOfPromiseEx(t, nil /*errorNode*/, thisTypeForErrorOut); result != nil { + return result + } + return c.getPromisedTypeOfPromiseWorker(t, errorNode, thisTypeForErrorOut) + } c.cachedTypes.begin(c, key) defer c.endMemo() result := c.getPromisedTypeOfPromiseWorker(t, nil /*errorNode*/, thisTypeForErrorOut) @@ -34287,19 +34292,27 @@ func (c *Checker) getAwaitedTypeNoAliasEx(t *Type, errorNode *ast.Node, diagnost if c.isAwaitedTypeInstantiation(t) { return t } - if errorNode != nil { - // Errors belong to errorNode; see getIterationTypesOfIterable. - return c.getAwaitedTypeNoAliasWorker(t, errorNode, diagnosticMessage, args...) - } // If we've already cached an awaited type, return a possible `Awaited` for it. key := CachedTypeKey{kind: CachedTypeKindAwaitedType, typeId: t.id} if awaitedType, _ := c.cachedTypes.get(c, key); awaitedType != nil { return awaitedType } + if errorNode != nil { + // Errors belong to errorNode; see getIterationTypesOfIterable. Only a + // result computing which reports nothing is cached, so it is shared + // all the same. + if c.getAwaitedTypeNoAliasEx(t, nil /*errorNode*/, nil /*diagnosticMessage*/) != nil { + if awaitedType, _ := c.cachedTypes.get(c, key); awaitedType != nil { + return awaitedType + } + } + return c.getAwaitedTypeNoAliasWorker(t, errorNode, diagnosticMessage, args...) + } c.cachedTypes.begin(c, key) defer c.endMemo() + errors := c.awaitedTypeErrors awaitedType := c.getAwaitedTypeNoAliasWorker(t, nil /*errorNode*/, nil /*diagnosticMessage*/) - if awaitedType != nil { + if awaitedType != nil && c.awaitedTypeErrors == errors { c.cachedTypes.set(c, key, awaitedType) } return awaitedType @@ -34309,6 +34322,7 @@ func (c *Checker) getAwaitedTypeNoAliasWorker(t *Type, errorNode *ast.Node, diag // For a union, get a union of the awaited types of each constituent. if t.flags&TypeFlagsUnion != 0 { if c.isAwaitingType(t) { + c.awaitedTypeErrors++ if errorNode != nil { c.error(errorNode, diagnostics.Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method) } @@ -34360,6 +34374,7 @@ func (c *Checker) getAwaitedTypeNoAliasWorker(t *Type, errorNode *ast.Node, diag // onrejected: (error: any) => any): BadPromiseA; // } // + c.awaitedTypeErrors++ if errorNode != nil { c.error(errorNode, diagnostics.Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method) } @@ -34388,6 +34403,7 @@ func (c *Checker) getAwaitedTypeNoAliasWorker(t *Type, errorNode *ast.Node, diag // function, they would need to wrap it in some other value. If they want it to // be treated as a promise, they can cast to . if c.isThenableType(t) { + c.awaitedTypeErrors++ if errorNode != nil { var diagnostic *ast.Diagnostic if thisTypeForError != nil { From 647084ee6cbfc544c7c57b88b9d7f195ef67c9a2 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sat, 31 Oct 2026 05:58:37 -0700 Subject: [PATCH 144/194] Skip resolving an enclosing call that is already resolved Resolving a call nested in an argument of another call first computes its contextual type, so that the enclosing call is resolved first, as in source order. Checking in source order has nearly always resolved or begun resolving the enclosing call by then, and computing the contextual type again only to find that cost a walk through the enclosing call for every nested call. The enclosing call is now found directly, and the contextual type only computed when it is not yet resolving. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 43 +++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index c079f467aadaf..1e81da5a3fd22 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -8837,45 +8837,48 @@ func (c *Checker) isSymbolOrSymbolForCall(node *ast.Node) bool { return globalESSymbol == c.resolveName(left, "Symbol", ast.SymbolFlagsValue, nil /*nameNotFoundMessage*/, false /*isUse*/, false) } -// isContextuallyTypedByEnclosingCall reports whether the contextual type of -// an expression may come from an argument of an enclosing call. Other -// contexts are not resolved ahead of the expression, since computing them -// may evaluate expressions that checking only evaluates otherwise, such as -// the target of a destructuring assignment. -func isContextuallyTypedByEnclosingCall(node *ast.Node) bool { +// getContextuallyTypingCall returns the enclosing call an argument of which +// may give an expression its contextual type, or nil. Other contexts are not +// resolved ahead of the expression, since computing them may evaluate +// expressions that checking only evaluates otherwise, such as the target of a +// destructuring assignment. +func getContextuallyTypingCall(node *ast.Node) *ast.Node { for { parent := node.Parent switch parent.Kind { case ast.KindCallExpression, ast.KindNewExpression: - return node != parent.Expression() + if node == parent.Expression() { + return nil + } + return parent case ast.KindParenthesizedExpression, ast.KindSpreadElement, ast.KindArrayLiteralExpression, ast.KindObjectLiteralExpression, ast.KindPropertyAssignment, ast.KindAwaitExpression: node = parent continue case ast.KindConditionalExpression: if node == parent.AsConditionalExpression().Condition { - return false + return nil } case ast.KindBinaryExpression: switch parent.AsBinaryExpression().OperatorToken.Kind { case ast.KindBarBarToken, ast.KindAmpersandAmpersandToken, ast.KindQuestionQuestionToken, ast.KindCommaToken: if node != parent.AsBinaryExpression().Right { - return false + return nil } default: - return false + return nil } case ast.KindArrowFunction: if node != parent.Body() { - return false + return nil } case ast.KindReturnStatement: parent = ast.GetContainingFunction(parent) if parent == nil || !ast.IsFunctionExpressionOrArrowFunction(parent) { - return false + return nil } default: - return false + return nil } node = parent } @@ -8924,8 +8927,10 @@ func (c *Checker) getResolvedSignatureUncached(node *ast.Node, candidatesOutArra // type parameters this call references. Resolved from within this call // instead, the enclosing call sees this one marked as resolving, and // the result depends on which call was queried first. - if (ast.IsCallExpression(node) || ast.IsNewExpression(node)) && isContextuallyTypedByEnclosingCall(node) { - c.getContextualType(node, ContextFlagsNone) + if ast.IsCallExpression(node) || ast.IsNewExpression(node) { + if call := getContextuallyTypingCall(node); call != nil && !c.isSignatureResolvingOrResolved(call) { + c.getContextualType(node, ContextFlagsNone) + } } cached = links.resolvedSignature.get(c) if cached == c.resolvingSignature && c.isSignatureResolutionHidden(links) { @@ -8991,6 +8996,14 @@ type signatureResolving struct { // isSignatureResolutionHidden reports whether the resolution of the call // with the given links is in progress below what is visible; see yieldCycle. +// isSignatureResolvingOrResolved reports whether the signature of a call is +// resolved, or being resolved by a resolution visible to the current one. +func (c *Checker) isSignatureResolvingOrResolved(call *ast.Node) bool { + links := c.signatureLinks.Get(call) + s := links.resolvedSignature.get(c) + return s != nil && !(s == c.resolvingSignature && c.isSignatureResolutionHidden(links)) +} + func (c *Checker) isSignatureResolutionHidden(links *SignatureLinks) bool { if c.visibleStart == 0 { return false From 891e34f9662abc09b1bbed0891ef034f7b694d1c Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sat, 31 Oct 2026 09:18:25 -0700 Subject: [PATCH 145/194] Compare object literal types by content directly Interning object literal types by content hashed every property name and type of each literal checked into a key, and looked the key up in a map keyed by that hash. The key starts with the node, so the types created for one literal are only ever compared with each other. Keep the types created for each object literal node instead, and compare their content with the new content directly. Few literals are checked more than once, so this is usually an empty list, and nothing is hashed. Comparing content directly also cannot confuse two contents whose hashes collide. PERF-PLACEHOLDER --- tsc/internal/ast/symbol.go | 5 ++ tsc/internal/checker/checker.go | 87 +++++++++++++++++---------------- 2 files changed, 49 insertions(+), 43 deletions(-) diff --git a/tsc/internal/ast/symbol.go b/tsc/internal/ast/symbol.go index 247a4e0ca81f7..139a869c336f2 100644 --- a/tsc/internal/ast/symbol.go +++ b/tsc/internal/ast/symbol.go @@ -223,6 +223,11 @@ func (m *SymbolMap) symbolAt(i int) *Symbol { return symbol } +// At returns the name and symbol of the i-th entry, in insertion order. +func (m *SymbolMap) At(i int) (string, *Symbol) { + return m.keyAt(i), m.symbolAt(i) +} + func (m *SymbolMap) find(key string) int { if m == nil { return -1 diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 1e81da5a3fd22..9615d8e5373ae 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -878,7 +878,7 @@ type memoStore struct { unionTypes memoMap[CacheHashKey, *Type] unionOfUnionTypes memoMap[UnionOfUnionKey, *Type] intersectionTypes memoMap[CacheHashKey, *Type] - objectLiteralTypes memoMap[CacheHashKey, *Type] + objectLiteralTypes memoMap[*ast.Node, []objectLiteralType] spreadTypes memoMap[CacheHashKey, *Type] objectContentTypes memoMap[CacheHashKey, *Type] spreadSymbols memoMap[spreadSymbolKey, *ast.Symbol] @@ -13904,16 +13904,18 @@ func (c *Checker) checkObjectLiteral(node *ast.Node, checkMode CheckMode) *Type if patternWithComputedProperties { flags |= ObjectFlagsObjectLiteralPatternWithComputedProperties } - key := c.getObjectLiteralTypeKey(node, flags, propertiesTable, indexInfos) - if existing, _ := c.objectLiteralTypes.get(c, key); existing != nil { - return existing + existingTypes, _ := c.objectLiteralTypes.peek(node) + for _, existing := range existingTypes { + if c.isSameObjectLiteralType(existing, flags, propertiesTable, indexInfos) { + return existing.t + } } result := c.newAnonymousType(node.Symbol(), propertiesTable, nil, nil, indexInfos) result.objectFlags |= flags if inDestructuringPattern { c.patternForType.intern(result, node) } - c.objectLiteralTypes.intern(key, result) + c.objectLiteralTypes.intern(node, append(existingTypes, objectLiteralType{flags, propertiesTable, indexInfos, result})) return result } for _, memberDecl := range node.Properties() { @@ -18849,50 +18851,49 @@ func (b *keyBuilder) writeNode(node *ast.Node) { } } -// getObjectLiteralTypeKey identifies the content of an object literal type, so -// that checking the same object literal again with the same results yields the -// same type. -func (c *Checker) getObjectLiteralTypeKey(node *ast.Node, flags ObjectFlags, properties ast.SymbolTable, indexInfos []*IndexInfo) CacheHashKey { - var b keyBuilder - b.writeNode(node) - b.writeUint32(uint32(flags)) - b.writeInt(properties.Len()) - for name, prop := range properties.All() { - b.writeString(name) - b.writeByte(0) - b.writeUint32(uint32(prop.Flags())) - b.writeUint32(uint32(prop.CheckFlags())) - // Members created by this object literal have their types set at +// An objectLiteralType is a type created for an object literal, with the +// content it was created from; see isSameObjectLiteralType. +type objectLiteralType struct { + flags ObjectFlags + properties ast.SymbolTable + indexInfos []*IndexInfo + t *Type +} + +// isSameObjectLiteralType reports whether an object literal type created +// before has the given content, so that checking the same object literal +// again with the same results yields the same type. +func (c *Checker) isSameObjectLiteralType(e objectLiteralType, flags ObjectFlags, properties ast.SymbolTable, indexInfos []*IndexInfo) bool { + if e.flags != flags || e.properties.Len() != properties.Len() || len(e.indexInfos) != len(indexInfos) { + return false + } + for i, info := range indexInfos { + other := e.indexInfos[i] + if info.keyType != other.keyType || info.valueType != other.valueType || info.isReadonly != other.isReadonly || !slices.Equal(info.components, other.components) { + return false + } + } + for i := range properties.Len() { + name, prop := properties.At(i) + otherName, other := e.properties.At(i) + if name != otherName || prop.Flags() != other.Flags() || prop.CheckFlags() != other.CheckFlags() { + return false + } + // Members created by an object literal have their types set at // creation; other members (accessors) are the declared symbols. links := c.valueSymbolLinks.TryGet(prop) - if links == nil || links.target == nil { - b.writeByte(2) - b.writeSymbol(prop) + otherLinks := c.valueSymbolLinks.TryGet(other) + if links == nil || links.target == nil || otherLinks == nil || otherLinks.target == nil { + if prop != other { + return false + } continue } - if nameType := links.getNameType(); nameType != nil { - b.writeByte(1) - b.writeType(nameType) - } else { - b.writeByte(0) - } - b.writeType(links.resolvedType.peek()) - } - b.writeInt(len(indexInfos)) - for _, info := range indexInfos { - b.writeType(info.keyType) - b.writeType(info.valueType) - if info.isReadonly { - b.writeByte(1) - } else { - b.writeByte(0) - } - b.writeInt(len(info.components)) - for _, n := range info.components { - b.writeNode(n) + if links.getNameType() != otherLinks.getNameType() || links.resolvedType.peek() != otherLinks.resolvedType.peek() { + return false } } - return b.hash() + return true } func getTypeListKey(types []*Type) CacheHashKey { From 73a722da5c2f0ca16ef60b76a325f905bb5f435d Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sat, 31 Oct 2026 10:03:03 -0700 Subject: [PATCH 146/194] Share the resolution of a node checked directly within another Every checked node pushed a resolution so that results depending on errors located at it are discarded when it is left. Most nodes are checked directly within another, with nothing in between and no cycle in progress, and then the enclosing node's resolution can stand in: a cycle through the inner node can only start at that resolution while the inner node is current, and leaving the inner node ends it exactly where popping its own resolution would have. Results are unchanged; three quarters of the pushes go away. The hot callers test for that case inline and call into entering or leaving a node only otherwise, since Go will not inline a function that both tests and calls out. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 77 +++++++++++++++++++++++++++++---- 1 file changed, 69 insertions(+), 8 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 9615d8e5373ae..684bf84c842c4 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -2512,11 +2512,16 @@ func (c *Checker) checkSourceElements(nodes []*ast.Node) { func (c *Checker) checkSourceElement(node *ast.Node) bool { if node != nil { - saveCurrentNode := c.enterCurrentNode(node) + saveCurrentNode, shared := c.enterSharedCurrentNode(node) + if !shared { + saveCurrentNode = c.enterCurrentNode(node) + } saveWithinUnreachableCode := c.withinUnreachableCode c.instantiationCount = 0 c.checkSourceElementWorker(node) - c.exitCurrentNode(saveCurrentNode) + if !c.exitSharedCurrentNode(saveCurrentNode) { + c.exitCurrentNode(saveCurrentNode) + } c.withinUnreachableCode = saveWithinUnreachableCode } return false @@ -2754,7 +2759,10 @@ func (c *Checker) checkDeferredNode(node *ast.Node) { if tr := c.tracer; tr != nil { defer tr.Push(tracing.PhaseCheck, "checkDeferredNode", map[string]any{"kind": node.Kind, "pos": node.Pos(), "end": node.End(), "path": ast.GetSourceFileOfNode(node).FileName()}, false)() } - saveCurrentNode := c.enterCurrentNode(node) + saveCurrentNode, shared := c.enterSharedCurrentNode(node) + if !shared { + saveCurrentNode = c.enterCurrentNode(node) + } c.instantiationCount = 0 switch node.Kind { case ast.KindCallExpression, ast.KindNewExpression, ast.KindTaggedTemplateExpression, ast.KindDecorator, ast.KindJsxOpeningElement: @@ -2784,7 +2792,9 @@ func (c *Checker) checkDeferredNode(node *ast.Node) { case ast.KindObjectLiteralExpression, ast.KindJsxAttributes: c.checkContextualDeprecations(node) } - c.exitCurrentNode(saveCurrentNode) + if !c.exitSharedCurrentNode(saveCurrentNode) { + c.exitCurrentNode(saveCurrentNode) + } } func (c *Checker) checkJSDocComments(node *ast.Node) { @@ -7995,14 +8005,19 @@ func (c *Checker) checkExpressionEx(node *ast.Node, checkMode CheckMode) *Type { if tr := c.tracer; tr != nil { defer tr.Push(tracing.PhaseCheck, "checkExpression", map[string]any{"kind": node.Kind, "pos": node.Pos(), "end": node.End(), "path": ast.GetSourceFileOfNode(node).FileName()}, false)() } - saveCurrentNode := c.enterCurrentNode(node) + saveCurrentNode, shared := c.enterSharedCurrentNode(node) + if !shared { + saveCurrentNode = c.enterCurrentNode(node) + } c.instantiationCount = 0 uninstantiatedType := c.checkExpressionWorker(node, checkMode) t := c.instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, checkMode) if isConstEnumObjectType(t) { c.checkConstEnumAccess(node, t) } - c.exitCurrentNode(saveCurrentNode) + if !c.exitSharedCurrentNode(saveCurrentNode) { + c.exitCurrentNode(saveCurrentNode) + } return t } @@ -8895,7 +8910,10 @@ func (c *Checker) getResolvedSignature(node *ast.Node, candidatesOutArray *[]*Si // Resolution is located at the call however it was requested, such as // from contextually typing an argument, so that errors it reports at the // current node do not depend on which was checked first. - saveCurrentNode := c.enterCurrentNode(node) + saveCurrentNode, shared := c.enterSharedCurrentNode(node) + if !shared { + saveCurrentNode = c.enterCurrentNode(node) + } var result *Signature if c.memoActive() { c.signatureLinks.Get(node).resolvedSignature.begin(c) @@ -8904,7 +8922,9 @@ func (c *Checker) getResolvedSignature(node *ast.Node, candidatesOutArray *[]*Si } else { result = c.getResolvedSignatureUncached(node, candidatesOutArray, checkMode) } - c.exitCurrentNode(saveCurrentNode) + if !c.exitSharedCurrentNode(saveCurrentNode) { + c.exitCurrentNode(saveCurrentNode) + } return result } @@ -20484,6 +20504,29 @@ func (c *Checker) popCircularHead() TypeSystemEntity { return canonical } +// enterSharedCurrentNode is enterCurrentNode for a node that shares the +// resolution of the enclosing node, small enough to inline for the common +// case. It reports false, changing nothing, if the node needs its own. +func (c *Checker) enterSharedCurrentNode(node *ast.Node) (savedCurrentNode, bool) { + save := savedCurrentNode{node: c.currentNode, resolution: c.currentNodeResolution} + if c.currentNodeResolution == 0 || c.currentNodeResolution != len(c.resolutions) || c.circularityStart != 0 || len(c.innerCycles) != 0 { + return save, false + } + c.currentNode = node + return save, true +} + +// exitSharedCurrentNode is exitCurrentNode for a node entered without a +// resolution of its own, when that ends no cycle. It reports false, changing +// nothing, otherwise. +func (c *Checker) exitSharedCurrentNode(save savedCurrentNode) bool { + if c.currentNodeResolution != save.resolution || c.circularityStart >= save.resolution || len(c.innerCycles) != 0 { + return false + } + c.currentNode = save.node + return true +} + // enterCurrentNode makes node the node being checked, until the matching // exitCurrentNode. Its type resolution delimits the results that errors // located at node (see reportAtCurrentNode) depend on. @@ -20495,6 +20538,14 @@ func (c *Checker) enterCurrentNode(node *ast.Node) savedCurrentNode { c.endCircularity() } c.currentNode = node + if c.currentNodeResolution != 0 && c.currentNodeResolution == len(c.resolutions) && c.circularityStart == 0 && len(c.innerCycles) == 0 { + // Nothing separates the node from the one enclosing it, so the + // resolution of that one stands in for it: a cycle through the node + // starts at that resolution, and nothing else can until the node is + // left, where exitCurrentNode ends it as popping the node's own + // resolution would. + return save + } // beginTypeResolution, without the call, for a resolution that is not // searchable. f := c.pushResolution() @@ -20513,6 +20564,16 @@ func (c *Checker) enterCurrentNode(node *ast.Node) savedCurrentNode { } func (c *Checker) exitCurrentNode(save savedCurrentNode) { + if c.currentNodeResolution == save.resolution { + // The node had no resolution of its own; see enterCurrentNode. + if c.circularityStart >= save.resolution { + c.endCircularity() + } else if len(c.innerCycles) != 0 { + c.endInnerCycles(save.resolution - 1) + } + c.currentNode = save.node + return + } // popTypeResolution, without the call. n := len(c.resolutions) - 1 debug.Assert(c.currentNodeResolution == n+1 && c.typeResolutionTop == n+1, "resolutions left on the stack") From 0d1bc64be1fe4acf7afefc3a085dbfac18b2f930 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sat, 31 Oct 2026 13:51:25 -0700 Subject: [PATCH 147/194] Return keyword types without memoizing them Resolving a type node is memoized so that its effects are replayed wherever the result is reused. A keyword such as `string` resolves to the same intrinsic type with no effects at all, unless it sits where conditional flow typing may substitute it, so recording a computation for it only costs a resolution. Such nodes now return their type directly, as TypeScript does. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 71 ++++++++++++++++++++++----------- 1 file changed, 47 insertions(+), 24 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 684bf84c842c4..36915a293a324 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -25497,6 +25497,11 @@ func (c *Checker) tryGetTypeFromTypeNode(node *ast.Node) *Type { } func (c *Checker) getTypeFromTypeNode(node *ast.Node) *Type { + if t := c.getKeywordTypeOfTypeNode(node); t != nil && !isConditionalFlowTypeLocation(node) { + // A keyword type is the same everywhere getConditionalFlowTypeOfType + // leaves it unchanged, and computing it has no effects. + return t + } key := memoKeyOf(node, memoTypeNodeType) if t := c.peekTypeFromTypeNode(node); t != nil && c.readsWithoutMemo(key) { return t @@ -25528,42 +25533,34 @@ func (c *Checker) peekTypeFromTypeNode(node *ast.Node) *Type { ast.KindConditionalType, ast.KindIndexedAccessType, ast.KindArrayType, ast.KindTupleType, ast.KindThisType, ast.KindTypeOperator, ast.KindLiteralType: links := c.typeNodeLinks.TryGet(node) - if links == nil || links.resolvedType.peek() == nil { + if links == nil || links.resolvedType.peek() == nil || isConditionalFlowTypeLocation(node) { return nil } - for n := node; n != nil && !ast.IsStatement(n) && n.Kind != ast.KindJSDoc; n = n.Parent { - parent := n.Parent - if ast.IsConditionalTypeNode(parent) && n == parent.AsConditionalTypeNode().TrueType || - ast.IsMappedTypeNode(parent) && parent.AsMappedTypeNode().NameType == nil && n == parent.Type() { - return nil - } - } return links.resolvedType.peek() } return nil } -func (c *Checker) getTypeFromTypeNodeUncached(node *ast.Node) *Type { - return c.getConditionalFlowTypeOfType(c.getTypeFromTypeNodeWorker(node), node) +// isConditionalFlowTypeLocation reports whether getConditionalFlowTypeOfType +// may change the type of node: whether it is within the true branch of a +// conditional type, or the template of a mapped type without an as clause. +func isConditionalFlowTypeLocation(node *ast.Node) bool { + for n := node; n != nil && !ast.IsStatement(n) && n.Kind != ast.KindJSDoc; n = n.Parent { + parent := n.Parent + if ast.IsConditionalTypeNode(parent) && n == parent.AsConditionalTypeNode().TrueType || + ast.IsMappedTypeNode(parent) && parent.AsMappedTypeNode().NameType == nil && n == parent.Type() { + return true + } + } + return false } -func (c *Checker) getTypeFromTypeNodeWorker(node *ast.Node) *Type { +// getKeywordTypeOfTypeNode returns the type of a keyword type node, or nil if +// node is not one. +func (c *Checker) getKeywordTypeOfTypeNode(node *ast.Node) *Type { switch node.Kind { case ast.KindAnyKeyword, ast.KindJSDocAllType: return c.anyType - case ast.KindJSDocNonNullableType: - return c.getTypeFromTypeNode(node.Type()) - case ast.KindJSDocNullableType: - t := c.getTypeFromTypeNode(node.Type()) - if c.strictNullChecks { - return c.getNullableType(t, TypeFlagsNull) - } else { - return t - } - case ast.KindJSDocVariadicType: - return c.createArrayType(c.getTypeFromTypeNode(node.AsJSDocVariadicType().Type)) - case ast.KindJSDocOptionalType: - return c.addOptionality(c.getTypeFromTypeNode(node.Type())) case ast.KindUnknownKeyword: return c.unknownType case ast.KindStringKeyword: @@ -25588,6 +25585,32 @@ func (c *Checker) getTypeFromTypeNodeWorker(node *ast.Node) *Type { return c.nonPrimitiveType case ast.KindIntrinsicKeyword: return c.intrinsicMarkerType + } + return nil +} + +func (c *Checker) getTypeFromTypeNodeUncached(node *ast.Node) *Type { + return c.getConditionalFlowTypeOfType(c.getTypeFromTypeNodeWorker(node), node) +} + +func (c *Checker) getTypeFromTypeNodeWorker(node *ast.Node) *Type { + if t := c.getKeywordTypeOfTypeNode(node); t != nil { + return t + } + switch node.Kind { + case ast.KindJSDocNonNullableType: + return c.getTypeFromTypeNode(node.Type()) + case ast.KindJSDocNullableType: + t := c.getTypeFromTypeNode(node.Type()) + if c.strictNullChecks { + return c.getNullableType(t, TypeFlagsNull) + } else { + return t + } + case ast.KindJSDocVariadicType: + return c.createArrayType(c.getTypeFromTypeNode(node.AsJSDocVariadicType().Type)) + case ast.KindJSDocOptionalType: + return c.addOptionality(c.getTypeFromTypeNode(node.Type())) case ast.KindThisType, ast.KindThisKeyword: return c.getTypeFromThisTypeNode(node) case ast.KindLiteralType: From b8a1c1c85e30de11767701c58292b91be6e6b659 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sat, 31 Oct 2026 14:45:43 -0700 Subject: [PATCH 148/194] Keep interned results in maps without memo state Many caches hold results each constructed from the inputs in its key alone, such as literal, union, and tuple types. They were memoMaps but only ever interned, so they never had memo state, yet every lookup paid an out of line call to check for it. A separate internMap type makes that guarantee explicit and its lookups inline. PERF-PLACEHOLDER --- tsc/internal/checker/checker.go | 106 ++++++++++---------- tsc/internal/checker/checker_test.go | 6 +- tsc/internal/checker/flow.go | 2 +- tsc/internal/checker/inference.go | 2 +- tsc/internal/checker/memo.go | 33 ++++++ tsc/internal/checker/symbolaccessibility.go | 4 +- tsc/internal/checker/tracer.go | 2 +- tsc/internal/checker/utilities.go | 4 +- 8 files changed, 96 insertions(+), 63 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 36915a293a324..5411970ab8b27 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -832,19 +832,19 @@ type memoStore struct { canCollectSymbolAliasAccessibilityData bool arrayVariances []VarianceFlags globals ast.SymbolTable - globalTypes []memo[resolvedGlobal[*Type]] // Indexed by globalID + globalTypes []memo[resolvedGlobal[*Type]] // Indexed by globalID globalSymbols []memo[resolvedGlobal[*ast.Symbol]] // Indexed by globalID - stringLiteralTypes memoMap[string, *Type] - numberLiteralTypes memoMap[jsnum.Number, *Type] + stringLiteralTypes internMap[string, *Type] + numberLiteralTypes internMap[jsnum.Number, *Type] nanType *Type - bigintLiteralTypes memoMap[jsnum.PseudoBigInt, *Type] - enumLiteralTypes memoMap[EnumLiteralKey, *Type] - enumNaNLiteralTypes memoMap[*ast.Symbol, *Type] - indexedAccessTypes memoMap[CacheHashKey, *Type] - templateLiteralTypes memoMap[CacheHashKey, *Type] - stringMappingTypes memoMap[StringMappingKey, *Type] - uniqueESSymbolTypes memoMap[*ast.Symbol, *Type] - thisExpandos memoMap[*ast.Symbol, thisExpando] + bigintLiteralTypes internMap[jsnum.PseudoBigInt, *Type] + enumLiteralTypes internMap[EnumLiteralKey, *Type] + enumNaNLiteralTypes internMap[*ast.Symbol, *Type] + indexedAccessTypes internMap[CacheHashKey, *Type] + templateLiteralTypes internMap[CacheHashKey, *Type] + stringMappingTypes internMap[StringMappingKey, *Type] + uniqueESSymbolTypes internMap[*ast.Symbol, *Type] + thisExpandos internMap[*ast.Symbol, thisExpando] subtypeReductionCache memoMap[CacheHashKey, []*Type] cachedTypes memoMap[CachedTypeKey, *Type] cachedSignatures memoMap[CachedSignatureKey, *Signature] @@ -852,8 +852,8 @@ type memoStore struct { narrowedTypes memoMap[NarrowedTypeKey, *Type] assignmentReducedTypes memoMap[AssignmentReducedKey, *Type] discriminatedContextualTypes memoMap[DiscriminatedContextualTypeKey, *Type] - instantiationExpressionTypes memoMap[InstantiationExpressionKey, *instantiationExpressionEntry] - substitutionTypes memoMap[SubstitutionTypeKey, *Type] + instantiationExpressionTypes internMap[InstantiationExpressionKey, *instantiationExpressionEntry] + substitutionTypes internMap[SubstitutionTypeKey, *Type] reverseMappedCache memoMap[ReverseMappedTypeKey, *Type] reverseHomomorphicMappedCache memoMap[ReverseMappedTypeKey, *Type] iterationTypesCache memoMap[IterationTypesKey, IterationTypes] @@ -869,23 +869,23 @@ type memoStore struct { argumentsSymbol *ast.Symbol requireSymbol *ast.Symbol unknownSymbol *ast.Symbol - unresolvedSymbols memoMap[string, *ast.Symbol] - errorTypes memoMap[CacheHashKey, *Type] + unresolvedSymbols internMap[string, *ast.Symbol] + errorTypes internMap[CacheHashKey, *Type] globalThisSymbol *ast.Symbol - symbolTableAliasCache memoMap[symbolTableID, []*ast.Symbol] - classExpressionNameTables memoMap[ast.NodeId, ast.SymbolTable] - tupleTypes memoMap[CacheHashKey, *Type] - unionTypes memoMap[CacheHashKey, *Type] + symbolTableAliasCache internMap[symbolTableID, []*ast.Symbol] + classExpressionNameTables internMap[ast.NodeId, ast.SymbolTable] + tupleTypes internMap[CacheHashKey, *Type] + unionTypes internMap[CacheHashKey, *Type] unionOfUnionTypes memoMap[UnionOfUnionKey, *Type] intersectionTypes memoMap[CacheHashKey, *Type] - objectLiteralTypes memoMap[*ast.Node, []objectLiteralType] + objectLiteralTypes internMap[*ast.Node, []objectLiteralType] spreadTypes memoMap[CacheHashKey, *Type] - objectContentTypes memoMap[CacheHashKey, *Type] + objectContentTypes internMap[CacheHashKey, *Type] spreadSymbols memoMap[spreadSymbolKey, *ast.Symbol] - symbolsWithType memoMap[symbolWithTypeKey, *ast.Symbol] - paddedProperties memoMap[symbolWithTypeKey, *ast.Symbol] - bindingPatternTypes memoMap[CacheHashKey, *Type] - intersectionContentTypes memoMap[CacheHashKey, *Type] + symbolsWithType internMap[symbolWithTypeKey, *ast.Symbol] + paddedProperties internMap[symbolWithTypeKey, *ast.Symbol] + bindingPatternTypes internMap[CacheHashKey, *Type] + intersectionContentTypes internMap[CacheHashKey, *Type] propertiesTypes memoMap[PropertiesTypesKey, *Type] diagnostics ast.DiagnosticsCollection suggestionDiagnostics ast.DiagnosticsCollection @@ -927,7 +927,7 @@ type memoStore struct { accessibleChains memoMap[accessibleChainCacheKey, []*ast.Symbol] // Accessible symbol chains by location externalModuleContainers memo[*externalModuleContainerIndex] sourceFileLinks core.LinkStore[*ast.SourceFile, SourceFileLinks] - patternForType memoMap[*Type, *ast.Node] + patternForType internMap[*Type, *ast.Node] contextFreeTypes memoMap[*ast.Node, *Type] anyType *Type autoType *Type @@ -1014,7 +1014,7 @@ type memoStore struct { zeroBigIntType *Type typeofType *Type flowExpressionTypes memoMap[*ast.Node, *Type] - flowLoopCache memoMap[FlowLoopKey, *flowLoopCacheEntry] + flowLoopCache internMap[FlowLoopKey, *flowLoopCacheEntry] flowNodeReachable memoMap[*ast.FlowNode, bool] flowNodePostSuper memoMap[*ast.FlowNode, bool] subtypeRelation *Relation @@ -11322,7 +11322,7 @@ func (c *Checker) getInstantiationExpressionType(exprType *Type, node *ast.Node) return exprType } key := InstantiationExpressionKey{nodeId: ast.GetNodeId(node), typeId: exprType.id} - entry, _ := c.instantiationExpressionTypes.get(c, key) + entry, _ := c.instantiationExpressionTypes.get(key) if entry == nil { entry = &instantiationExpressionEntry{} c.instantiationExpressionTypes.intern(key, entry) @@ -13882,7 +13882,7 @@ func (c *Checker) checkObjectLiteral(node *ast.Node, checkMode CheckMode) *Type contextualType := c.getApparentTypeOfContextualType(node, ContextFlagsNone) var contextualTypeHasPattern bool if contextualType != nil { - if pattern, _ := c.patternForType.get(c, contextualType); pattern != nil && (ast.IsObjectBindingPattern(pattern) || ast.IsObjectLiteralExpression(pattern)) { + if pattern, _ := c.patternForType.get(contextualType); pattern != nil && (ast.IsObjectBindingPattern(pattern) || ast.IsObjectLiteralExpression(pattern)) { contextualTypeHasPattern = true } } @@ -13924,7 +13924,7 @@ func (c *Checker) checkObjectLiteral(node *ast.Node, checkMode CheckMode) *Type if patternWithComputedProperties { flags |= ObjectFlagsObjectLiteralPatternWithComputedProperties } - existingTypes, _ := c.objectLiteralTypes.peek(node) + existingTypes, _ := c.objectLiteralTypes.get(node) for _, existing := range existingTypes { if c.isSameObjectLiteralType(existing, flags, propertiesTable, indexInfos) { return existing.t @@ -14251,7 +14251,7 @@ func (c *Checker) getSpreadType(left *Type, right *Type, symbol *ast.Symbol, obj // Different inputs can produce the same members, e.g. when the right side // overrides every property of the left side. contentKey := c.getObjectTypeContentKey(symbol, flags, members, spreadIndexInfos) - if existing, _ := c.objectContentTypes.get(c, contentKey); existing != nil { + if existing, _ := c.objectContentTypes.get(contentKey); existing != nil { c.spreadTypes.set(c, key, existing) return existing } @@ -18162,7 +18162,7 @@ func (c *Checker) padObjectLiteralType(t *Type, pattern *ast.Node) *Type { name := c.getPropertyNameFromBindingElement(e) propType := c.getTypeFromBindingElement(e, false /*includePatternInType*/, true /*reportErrors*/) key := symbolWithTypeKey{name: name, t: propType} - symbol, _ := c.paddedProperties.get(c, key) + symbol, _ := c.paddedProperties.get(key) if symbol == nil { symbol = c.newSymbol(ast.SymbolFlagsProperty|ast.SymbolFlagsOptional, name) c.valueSymbolLinks.Get(symbol).resolvedType.setIdentity(c, propType) @@ -19395,7 +19395,7 @@ func (c *Checker) getTypeFromObjectBindingPattern(pattern *ast.Node, includePatt b.writeType(c.valueSymbolLinks.Get(member).resolvedType.peek()) } key := b.hash() - if existing, _ := c.bindingPatternTypes.get(c, key); existing != nil { + if existing, _ := c.bindingPatternTypes.get(key); existing != nil { return existing } result := c.newAnonymousType(nil, members, nil, nil, indexInfos) @@ -19452,7 +19452,7 @@ func (c *Checker) getTypeFromArrayBindingPattern(pattern *ast.Node, includePatte b.writeNode(pattern) b.writeType(result) key := b.hash() - if existing, _ := c.bindingPatternTypes.get(c, key); existing != nil { + if existing, _ := c.bindingPatternTypes.get(key); existing != nil { return existing } result = c.cloneTypeReference(result) @@ -19660,7 +19660,7 @@ func (c *Checker) isConstructorDeclaredThisProperty(symbol *ast.Symbol) (thisAss if symbol.ValueDeclaration() == nil || !ast.IsBinaryExpression(symbol.ValueDeclaration()) { return thisAssignmentDeclarationNone, nil } - if cached, ok := c.thisExpandos.get(c, symbol); ok { + if cached, ok := c.thisExpandos.get(symbol); ok { return cached.kind, cached.location } allThis := true @@ -24185,7 +24185,7 @@ type symbolWithTypeKey struct { // returning the same copy for the same property and type. func (c *Checker) getSymbolWithType(source *ast.Symbol, t *Type) *ast.Symbol { key := symbolWithTypeKey{source: source, t: t} - if existing, _ := c.symbolsWithType.get(c, key); existing != nil { + if existing, _ := c.symbolsWithType.get(key); existing != nil { return existing } result := c.createSymbolWithType(source, t) @@ -24197,7 +24197,7 @@ func (c *Checker) getSymbolWithType(source *ast.Symbol, t *Type) *ast.Symbol { // creates one with the given creation. func (c *Checker) internObjectType(symbol *ast.Symbol, flags ObjectFlags, members ast.SymbolTable, indexInfos []*IndexInfo, create func() *Type) *Type { key := c.getObjectTypeContentKey(symbol, flags&^(ObjectFlagsCouldContainTypeVariablesComputed|ObjectFlagsCouldContainTypeVariables|ObjectFlagsMembersResolved), members, indexInfos) - if existing, _ := c.objectContentTypes.get(c, key); existing != nil { + if existing, _ := c.objectContentTypes.get(key); existing != nil { return existing } result := create() @@ -25745,7 +25745,7 @@ func (c *Checker) getESSymbolLikeTypeForNode(node *ast.Node) *Type { if isValidESSymbolDeclaration(node) { symbol := c.getSymbolOfNode(node) if symbol != nil { - uniqueType, _ := c.uniqueESSymbolTypes.get(c, symbol) + uniqueType, _ := c.uniqueESSymbolTypes.get(symbol) if uniqueType == nil { var b strings.Builder b.WriteString(ast.InternalSymbolNamePrefix) @@ -25940,7 +25940,7 @@ func (c *Checker) getUnresolvedSymbolForEntityName(name *ast.Node) *ast.Symbol { } else { path = text } - result, _ := c.unresolvedSymbols.get(c, path) + result, _ := c.unresolvedSymbols.get(path) if result == nil { result = c.newSymbolEx(ast.SymbolFlagsTypeAlias, text, ast.CheckFlagsUnresolved) c.unresolvedSymbols.intern(path, result) @@ -26399,7 +26399,7 @@ func (c *Checker) getTypeFromTypeAliasReference(node *ast.Node, symbol *ast.Symb if symbol.CheckFlags()&ast.CheckFlagsUnresolved != 0 { alias := &TypeAlias{symbol: symbol, typeArguments: core.Map(typeArguments, c.getTypeFromTypeNode)} key := getAliasKey(alias) - errorType, _ := c.errorTypes.get(c, key) + errorType, _ := c.errorTypes.get(key) if errorType == nil { errorType = c.newIntrinsicType(TypeFlagsAny, "error") errorType.alias = alias @@ -27630,7 +27630,7 @@ func (c *Checker) getTupleTargetType(elementInfos []TupleElementInfo, readonly b return c.globalArrayType } key := getTupleKey(elementInfos, readonly) - t, _ := c.tupleTypes.get(c, key) + t, _ := c.tupleTypes.get(key) if t == nil { t = c.createTupleTargetType(elementInfos, readonly) c.tupleTypes.intern(key, t) @@ -28195,7 +28195,7 @@ func isFreshLiteralType(t *Type) bool { } func (c *Checker) getStringLiteralType(value string) *Type { - t, _ := c.stringLiteralTypes.get(c, value) + t, _ := c.stringLiteralTypes.get(value) if t == nil { t = c.newLiteralType(TypeFlagsStringLiteral, value, nil) c.stringLiteralTypes.intern(value, t) @@ -28212,7 +28212,7 @@ func (c *Checker) getNumberLiteralType(value jsnum.Number) *Type { } return c.nanType } - t, _ := c.numberLiteralTypes.get(c, value) + t, _ := c.numberLiteralTypes.get(value) if t == nil { t = c.newLiteralType(TypeFlagsNumberLiteral, value, nil) c.numberLiteralTypes.intern(value, t) @@ -28221,7 +28221,7 @@ func (c *Checker) getNumberLiteralType(value jsnum.Number) *Type { } func (c *Checker) getBigIntLiteralType(value jsnum.PseudoBigInt) *Type { - t, _ := c.bigintLiteralTypes.get(c, value) + t, _ := c.bigintLiteralTypes.get(value) if t == nil { t = c.newLiteralType(TypeFlagsBigIntLiteral, value, nil) c.bigintLiteralTypes.intern(value, t) @@ -28261,7 +28261,7 @@ func (c *Checker) getEnumLiteralType(value any, enumSymbol *ast.Symbol, symbol * // NaN cannot be used as a Go map key because NaN != NaN in IEEE 754, // so Go map lookups for NaN always miss. Cache NaN enum types separately by enum symbol. if v.IsNaN() { - t, _ := c.enumNaNLiteralTypes.get(c, enumSymbol) + t, _ := c.enumNaNLiteralTypes.get(enumSymbol) if t == nil { t = c.newLiteralType(flags, value, nil) t.symbol = symbol @@ -28273,7 +28273,7 @@ func (c *Checker) getEnumLiteralType(value any, enumSymbol *ast.Symbol, symbol * panic("Unhandled case in getEnumLiteralType") } key := EnumLiteralKey{enumSymbol: enumSymbol, value: value} - t, _ := c.enumLiteralTypes.get(c, key) + t, _ := c.enumLiteralTypes.get(key) if t == nil { t = c.newLiteralType(flags, value, nil) t.symbol = symbol @@ -28650,7 +28650,7 @@ func (c *Checker) getUnionTypeFromSortedList(types []*Type, precomputedObjectFla return types[0] } key := getUnionKey(types, origin, alias) - t, _ := c.unionTypes.get(c, key) + t, _ := c.unionTypes.get(key) if t == nil { t = c.newUnionType(precomputedObjectFlags|c.getPropagatingFlagsOfTypes(types, TypeFlagsNullable), types) t.AsUnionType().origin = origin @@ -29145,7 +29145,7 @@ func (c *Checker) getIntersectionTypeWithContent(objectFlags ObjectFlags, typeSe b.writeUint32(uint32(objectFlags)) b.writeAlias(alias) key := b.hash() - if existing, _ := c.intersectionContentTypes.get(c, key); existing != nil { + if existing, _ := c.intersectionContentTypes.get(key); existing != nil { return existing } result := c.newIntersectionType(objectFlags, typeSet) @@ -29915,7 +29915,7 @@ func (c *Checker) getIndexedAccessTypeOrUndefined(objectType *Type, indexType *T // Defer the operation by creating an indexed access type. persistentAccessFlags := accessFlags & AccessFlagsPersistent key := getIndexedAccessKey(objectType, indexType, persistentAccessFlags, alias) - t, _ := c.indexedAccessTypes.get(c, key) + t, _ := c.indexedAccessTypes.get(key) if t == nil { t = c.newIndexedAccessType(objectType, indexType, persistentAccessFlags) t.alias = alias @@ -30372,7 +30372,7 @@ func (c *Checker) getSubstitutionType(baseType *Type, constraint *Type) *Type { func (c *Checker) getOrCreateSubstitutionType(baseType *Type, constraint *Type) *Type { key := SubstitutionTypeKey{baseId: baseType.id, constraintId: constraint.id} - if cached, _ := c.substitutionTypes.get(c, key); cached != nil { + if cached, _ := c.substitutionTypes.get(key); cached != nil { return cached } result := c.newSubstitutionType(baseType, constraint) @@ -32311,7 +32311,7 @@ func (c *Checker) getTemplateLiteralType(texts []string, types []*Type) *Type { } } key := getTemplateTypeKey(newTexts, newTypes) - t, _ := c.templateLiteralTypes.get(c, key) + t, _ := c.templateLiteralTypes.get(key) if t == nil { t = c.newTemplateLiteralType(newTexts, newTypes) c.templateLiteralTypes.intern(key, t) @@ -32384,7 +32384,7 @@ func (c *Checker) applyTemplateStringMapping(symbol *ast.Symbol, texts []string, func (c *Checker) getStringMappingTypeForGenericType(symbol *ast.Symbol, t *Type) *Type { key := StringMappingKey{s: symbol, t: t} - result, _ := c.stringMappingTypes.get(c, key) + result, _ := c.stringMappingTypes.get(key) if result == nil { result = c.newStringMappingType(symbol, t) c.stringMappingTypes.intern(key, result) @@ -32937,7 +32937,7 @@ func (c *Checker) getContextualTypeForBinaryOperand(node *ast.Node, contextFlags // by the type of the left operand, except for the special case of Javascript declarations of the form // `namespace.prop = namespace.prop || {}`. t := c.getContextualType(binary.AsNode(), contextFlags) - if node == binary.Right && (t == nil || c.patternForType.has(c, t)) { + if node == binary.Right && (t == nil || c.patternForType.has(t)) { return c.getTypeOfExpression(binary.Left) } return t diff --git a/tsc/internal/checker/checker_test.go b/tsc/internal/checker/checker_test.go index a09946dd26c20..dd3700bec829f 100644 --- a/tsc/internal/checker/checker_test.go +++ b/tsc/internal/checker/checker_test.go @@ -236,8 +236,8 @@ func TestMemoValueOnlyAccessedThroughMethods(t *testing.T) { } // Mutable cached state must live in memos, which account for the effects of -// computing it. Fields that are not memos must be listed in -// unmemoizedCacheFields with the reason they need not be. +// computing it, or in internMaps, whose entries have none. Other fields must +// be listed in unmemoizedCacheFields with the reason they need not be. func TestCachedStateIsMemoized(t *testing.T) { t.Parallel() fset := token.NewFileSet() @@ -292,7 +292,7 @@ func isMemoType(expr goast.Expr) bool { expr = e.X } ident, ok := expr.(*goast.Ident) - return ok && strings.HasPrefix(ident.Name, "memo") + return ok && (strings.HasPrefix(ident.Name, "memo") || ident.Name == "internMap") } const ( diff --git a/tsc/internal/checker/flow.go b/tsc/internal/checker/flow.go index 59868f7feb10d..af9198a0cc2d5 100644 --- a/tsc/internal/checker/flow.go +++ b/tsc/internal/checker/flow.go @@ -1348,7 +1348,7 @@ func (c *Checker) getTypeAtFlowLoopLabel(f *FlowState, flow *ast.FlowNode) FlowT return FlowType{t: f.declaredType} } key := FlowLoopKey{flowNode: flow, refKey: f.refKey} - entry, _ := c.flowLoopCache.get(c, key) + entry, _ := c.flowLoopCache.get(key) if entry == nil { entry = &flowLoopCacheEntry{} c.flowLoopCache.intern(key, entry) diff --git a/tsc/internal/checker/inference.go b/tsc/internal/checker/inference.go index b9fd0939cd8fa..ed7b00504dd3f 100644 --- a/tsc/internal/checker/inference.go +++ b/tsc/internal/checker/inference.go @@ -984,7 +984,7 @@ func (c *Checker) inferToMappedType(n *InferenceState, source *Type, target *Typ if constraintType.flags&TypeFlagsTypeParameter != 0 { // We're inferring from some source type S to a mapped type { [P in K]: X }, where K is a type // parameter. First infer from 'keyof S' to K. - c.inferWithPriority(n, c.getIndexTypeEx(source, core.IfElse(c.patternForType.has(c, source), IndexFlagsNoIndexSignatures, IndexFlagsNone)), constraintType, InferencePriorityMappedTypeConstraint) + c.inferWithPriority(n, c.getIndexTypeEx(source, core.IfElse(c.patternForType.has(source), IndexFlagsNoIndexSignatures, IndexFlagsNone)), constraintType, InferencePriorityMappedTypeConstraint) // If K is constrained to a type C, also infer to C. Thus, for a mapped type { [P in K]: X }, // where K extends keyof T, we make the same inferences as for a homomorphic mapped type // { [P in keyof T]: X }. This enables us to make meaningful inferences when the target is a diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index fc6f679465e1e..d7fdaf4d71a6c 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -349,6 +349,39 @@ func (c *Checker) memoCompute[T comparable](m *memo[T], compute func() T) T { return v } +// internMap is a map of results each constructed from the inputs in its key +// alone, without consulting any cached result, so caching or reusing one has +// no effects to account for. +type internMap[K comparable, V any] struct { + _ memoNoCopy + entries map[K]V +} + +func (m *internMap[K, V]) get(k K) (V, bool) { + v, ok := m.entries[k] + return v, ok +} + +func (m *internMap[K, V]) has(k K) bool { + _, ok := m.entries[k] + return ok +} + +func (m *internMap[K, V]) intern(k K, v V) { + if m.entries == nil { + m.entries = make(map[K]V) + } + m.entries[k] = v +} + +func (m *internMap[K, V]) isEmpty() bool { + return len(m.entries) == 0 +} + +func (m *internMap[K, V]) values() iter.Seq[V] { + return maps.Values(m.entries) +} + // memoMap is a map of cached results, each accounted for like a memo. The // entries are only accessible through methods. Memo state is kept per entry // in a side map allocated on first use by a query. diff --git a/tsc/internal/checker/symbolaccessibility.go b/tsc/internal/checker/symbolaccessibility.go index c2333c8e1ee67..e05c9cdf1b8d1 100644 --- a/tsc/internal/checker/symbolaccessibility.go +++ b/tsc/internal/checker/symbolaccessibility.go @@ -581,7 +581,7 @@ func (c *Checker) getSymbolTableAliases(symbols ast.SymbolTable, tableId symbolT // Cache globals and exports tables (which are large and revisited often). // Locals tables are small and per-scope, so they are filtered but not cached. if kind == stKindGlobals || kind == stKindExports || kind == stKindResolvedExports { - if aliases, ok := c.symbolTableAliasCache.get(c, tableId); ok { + if aliases, ok := c.symbolTableAliasCache.get(tableId); ok { return aliases } } @@ -885,7 +885,7 @@ func (c *Checker) someSymbolTableInScope( // synthesized table lets someSymbolTableInScope expose them during accessibility checks. func (c *Checker) getClassExpressionNameTable(location *ast.Node) ast.SymbolTable { nodeId := ast.GetNodeId(location) - if table, ok := c.classExpressionNameTables.get(c, nodeId); ok { + if table, ok := c.classExpressionNameTables.get(nodeId); ok { return table } classSymbol := c.getSymbolOfDeclaration(location) diff --git a/tsc/internal/checker/tracer.go b/tsc/internal/checker/tracer.go index f6cf05ef5b91f..1b82937a26c55 100644 --- a/tsc/internal/checker/tracer.go +++ b/tsc/internal/checker/tracer.go @@ -319,7 +319,7 @@ func (a *tracedTypeAdapter) Pattern() *ast.Node { if a.checker == nil { return nil } - p, _ := a.checker.patternForType.get(a.checker, a.t) + p, _ := a.checker.patternForType.get(a.t) return p } diff --git a/tsc/internal/checker/utilities.go b/tsc/internal/checker/utilities.go index 51e3d2ee14357..ffa96b26140d4 100644 --- a/tsc/internal/checker/utilities.go +++ b/tsc/internal/checker/utilities.go @@ -666,8 +666,8 @@ func CompareTypes(t1, t2 *Type) int { } // Types implied by binding patterns are ordered by their patterns. if t1.flags&TypeFlagsObject != 0 { - p1, _ := t1.checker.patternForType.peek(t1) - p2, _ := t2.checker.patternForType.peek(t2) + p1, _ := t1.checker.patternForType.get(t1) + p2, _ := t2.checker.patternForType.get(t2) if c := t1.checker.compareNodes(p1, p2); c != 0 { return c } From 0007e4b9104b8aad58e29007e9558cf5d95ffe66 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sat, 31 Oct 2026 14:50:15 -0700 Subject: [PATCH 149/194] Use slices.Backward when replaying resumed effects The linter prefers slices.Backward over an index loop counting down. --- tsc/internal/checker/memo.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index d7fdaf4d71a6c..c1976733eff81 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -1448,8 +1448,8 @@ func (c *Checker) resumeChecking() { c.replayFlushed(states) clear(states) loc := c.currentNode - for k := len(chain) - 1; k >= 0; k-- { - r := &c.resolutions[chain[k]] + for _, i := range slices.Backward(chain) { + r := &c.resolutions[i] if f := r.effects; f != nil { r.effects = nil c.currentNode = loc From 5b81f2225431b098b47c267847cf72ae567069c9 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 2 Nov 2026 12:33:25 -0800 Subject: [PATCH 150/194] Observe resolutions when looking up members of a resolving type A named property lookup on a class or interface whose member layout is being built answers from its declared members and base types. That answer depends on the resolution in progress, but it did not observe that resolution, so results computed from it were kept even when the resolution was part of a cycle that discards them. Where the lookup happened first then decided what later queries saw. Observe the resolution as a cycle through it, as any other read of partial members does, so the results derived from it are discarded with the cycle. (seen in checkOrderRecursiveIndexedAccess) --- tsc/internal/checker/checker.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 5411970ab8b27..b1688d9e7850e 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -20972,9 +20972,15 @@ func (c *Checker) getPropertyOfTypeEx(t *Type, name string, skipObjectFunctionPr // means that base classes of a class or interface can access members declared in the class or interface // during its resolution without causing a circularity error. Members resolved by this function are // eventually propagated into the resolved members of the class or interface. +// +// The answer depends on the resolution in progress, so it is observed as a +// cycle through it. func (c *Checker) getDeclaredPropertyOfResolvingType(t *Type, name string) *ast.Symbol { for i := len(c.resolvingObjectTypeStack) - 1; i >= 0; i-- { if c.resolvingObjectTypeStack[i].t == t { + if !c.isResolutionInProgress(t, TypeSystemPropertyNameStructuredMembers) { + return nil + } resolved := c.resolvingObjectTypeStack[i].resolvedMembers.Get(name) if resolved == nil { if symbol := c.resolveDeclaredMembers(getTargetType(t)).declaredMembers.Get(name); symbol != nil && c.isNamedMember(symbol, name) { From 63cdff58fcdfead506f245805d61e09006478fba Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sat, 31 Oct 2026 16:39:15 -0700 Subject: [PATCH 151/194] Remove ObjectFlagsMembersResolving The flag marked members whose resolution was in progress, so that the fast path would not read members published before they were complete. That duplicates what the resolution stack already records: the resolution of the members is in Checker.resolving, or shadowed by a cycle yield. The flag also let a type carry a "resolved" bit for members that were not yet final, which is the install-then-replace pattern Anders Hejlsberg objected to in the review of "Allow accessing named declared members during a type's resolution". ObjectFlagsMembersResolved now means only that the outermost resolution of the members completed. Whether partial members are available to a computation re-entering the resolution is recorded on the resolution itself (membersPublished), and a re-entry finds it even when hidden by a cycle yield. Members are marked published before their properties are listed, since listing them may re-enter the resolution, which then sees the members as it did before. Types created with their members, rather than resolved, still set the flag directly through setStructuredTypeMembers; resolvers use setStructuredTypeData or publishStructuredTypeMembers. --- packages/typescript/enums/objectFlags.d.ts | 1 - packages/typescript/enums/objectFlags.js | 1 - tsc/internal/api/enum_values_generated.go | 1 - tsc/internal/checker/checker.go | 170 ++++++++++++--------- tsc/internal/checker/inference.go | 2 +- tsc/internal/checker/resolutions.go | 29 +++- tsc/internal/checker/types.go | 1 - 7 files changed, 127 insertions(+), 78 deletions(-) diff --git a/packages/typescript/enums/objectFlags.d.ts b/packages/typescript/enums/objectFlags.d.ts index 125a99aacae47..1b0a911b1a531 100644 --- a/packages/typescript/enums/objectFlags.d.ts +++ b/packages/typescript/enums/objectFlags.d.ts @@ -24,7 +24,6 @@ export declare enum ObjectFlags { CouldContainTypeVariablesComputed = 1 << 19, CouldContainTypeVariables = 1 << 20, MembersResolved = 1 << 21, - MembersResolving = 1 << 30, ClassOrInterface = Class | Interface, RequiresWidening = ContainsWideningType | ContainsObjectOrArrayLiteral, PropagatingFlags = ContainsWideningType | ContainsObjectOrArrayLiteral | NonInferrableType, diff --git a/packages/typescript/enums/objectFlags.js b/packages/typescript/enums/objectFlags.js index e21c9c650e291..d59fc5f642370 100644 --- a/packages/typescript/enums/objectFlags.js +++ b/packages/typescript/enums/objectFlags.js @@ -24,7 +24,6 @@ export var ObjectFlags; ObjectFlags[ObjectFlags["CouldContainTypeVariablesComputed"] = 524288] = "CouldContainTypeVariablesComputed"; ObjectFlags[ObjectFlags["CouldContainTypeVariables"] = 1048576] = "CouldContainTypeVariables"; ObjectFlags[ObjectFlags["MembersResolved"] = 2097152] = "MembersResolved"; - ObjectFlags[ObjectFlags["MembersResolving"] = 1073741824] = "MembersResolving"; ObjectFlags[ObjectFlags["ClassOrInterface"] = 3] = "ClassOrInterface"; ObjectFlags[ObjectFlags["RequiresWidening"] = 196608] = "RequiresWidening"; ObjectFlags[ObjectFlags["PropagatingFlags"] = 458752] = "PropagatingFlags"; diff --git a/tsc/internal/api/enum_values_generated.go b/tsc/internal/api/enum_values_generated.go index 6627b0d2f5f78..b223dab0403fb 100644 --- a/tsc/internal/api/enum_values_generated.go +++ b/tsc/internal/api/enum_values_generated.go @@ -232,7 +232,6 @@ func main() { "CouldContainTypeVariablesComputed": toInt32(checker.ObjectFlagsCouldContainTypeVariablesComputed), "CouldContainTypeVariables": toInt32(checker.ObjectFlagsCouldContainTypeVariables), "MembersResolved": toInt32(checker.ObjectFlagsMembersResolved), - "MembersResolving": toInt32(checker.ObjectFlagsMembersResolving), "ClassOrInterface": toInt32(checker.ObjectFlagsClassOrInterface), "RequiresWidening": toInt32(checker.ObjectFlagsRequiresWidening), "PropagatingFlags": toInt32(checker.ObjectFlagsPropagatingFlags), diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index b1688d9e7850e..3c67d50125412 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -20301,16 +20301,6 @@ func (c *Checker) yieldCycle(start int) bool { return true } -// observeHiddenMembers fails the cycle yield in progress if the members of t -// are being resolved below it. Members are made available while they are -// resolved, so the yield would see whatever part of them the hidden -// resolution has published, rather than compute them from scratch. -func (c *Checker) observeHiddenMembers(t *Type) { - if i, ok := c.resolving.get(memoKeyOf(t, memoStructuredMembers)); ok && int(i) < c.visibleStart { - c.markResolutionCycle(c.visibleStart) - } -} - // yieldCycleToMembers handles re-entering the type resolution in progress // at start, a cycle that would fail it, when the cycle passes through a // member table. Entering the cycle at the member table instead would not @@ -21122,7 +21112,7 @@ func (c *Checker) isApplicableIndexType(source *Type, target *Type) bool { } func (c *Checker) resolveStructuredTypeMembers(t *Type) *StructuredType { - if t.objectFlags&(ObjectFlagsMembersResolved|ObjectFlagsMembersResolving) == ObjectFlagsMembersResolved && !c.observingMemos { + if t.objectFlags&ObjectFlagsMembersResolved != 0 && !c.observingMemos { return t.asResolvedStructuredType() } return c.resolveStructuredTypeMembersSlow(t) @@ -21132,12 +21122,16 @@ func (c *Checker) resolveStructuredTypeMembers(t *Type) *StructuredType { // past reading resolved members, out of line so that the rest inlines. func (c *Checker) resolveStructuredTypeMembersSlow(t *Type) *StructuredType { key := memoKeyOf(t, memoStructuredMembers) - if t.objectFlags&(ObjectFlagsMembersResolved|ObjectFlagsMembersResolving) == ObjectFlagsMembersResolved { + if t.objectFlags&ObjectFlagsMembersResolved != 0 { // Resolved members are only read. c.observeMemo(key) return t.AsStructuredType() } - if t.objectFlags&ObjectFlagsMembersResolving != 0 { + published := false + enclosing, inProgress := c.resolvingAnyIndex(key) + if !inProgress { + enclosing = -1 + } else { // Resolving members may observe the type itself, whose members are // then incomplete. if c.isModuleTableType(t) { @@ -21150,59 +21144,88 @@ func (c *Checker) resolveStructuredTypeMembersSlow(t *Type) *StructuredType { } else { c.isResolutionInProgress(t, TypeSystemPropertyNameStructuredMembers) } - if len(c.cycleYields) != 0 { - c.observeHiddenMembers(t) + if j, ok := c.resolving.get(key); ok && int(j) < c.visibleStart { + // The members are being resolved below the cycle yield in + // progress, which then sees whatever part of them that + // resolution has published, rather than compute them from + // scratch, so the yield fails. + c.markResolutionCycle(c.visibleStart) } + published = c.resolutions[enclosing].membersPublished } c.beginMemo(key) - result := c.resolveStructuredTypeMembersUncached(t) + if !published { + c.resolveStructuredTypeMembersUncached(t, enclosing) + } c.endMemo() - return result + return t.AsStructuredType() } -func (c *Checker) resolveStructuredTypeMembersUncached(t *Type) *StructuredType { - if t.objectFlags&ObjectFlagsMembersResolved == 0 { - if t.objectFlags&ObjectFlagsMembersResolving == 0 && c.isModuleTableType(t) { - c.resolveModuleTableMembers(t) - return t.AsStructuredType() +// resolveStructuredTypeMembersUncached resolves the members of t in the memo +// just begun for them. Many kinds of types make members available before +// they are complete, through publishStructuredTypeMembers, so the resolution +// is on the stack, but never fails. The members are resolved only once the +// outermost resolution of them completes. A nested one, which re-entering +// the members before any are available starts, makes its result available +// to the rest of the enclosing resolution at index enclosing, which may be +// hidden by a cycle yield. +func (c *Checker) resolveStructuredTypeMembersUncached(t *Type, enclosing int) { + outermost := enclosing < 0 + if outermost && c.isModuleTableType(t) { + c.resolveModuleTableMembers(t) + return + } + c.beginTypeResolution(t, TypeSystemPropertyNameStructuredMembers) + defer func() { + c.popTypeResolution() + if outermost { + t.objectFlags |= ObjectFlagsMembersResolved + } else { + c.resolutions[enclosing].membersPublished = true } - // Many kinds of types make members available before they are - // complete, so the resolution is on the stack, but never fails. - outermost := t.objectFlags&ObjectFlagsMembersResolving == 0 - t.objectFlags |= ObjectFlagsMembersResolving - c.beginTypeResolution(t, TypeSystemPropertyNameStructuredMembers) - defer func() { - c.popTypeResolution() - if outermost { - t.objectFlags &^= ObjectFlagsMembersResolving - } - if c.logResults() { - c.logMembersDiscard(t) - } - }() + if c.logResults() { + c.logMembersDiscard(t) + } + }() + switch { + case t.flags&TypeFlagsObject != 0: switch { - case t.flags&TypeFlagsObject != 0: - switch { - case t.objectFlags&(ObjectFlagsClassOrInterface|ObjectFlagsReference) != 0: - c.resolveObjectTypeMembers(t) - case t.objectFlags&ObjectFlagsReverseMapped != 0: - c.resolveReverseMappedTypeMembers(t) - case t.objectFlags&ObjectFlagsAnonymous != 0: - c.resolveAnonymousTypeMembers(t) - case t.objectFlags&ObjectFlagsMapped != 0: - c.resolveMappedTypeMembers(t) - default: - panic("Unhandled case in resolveStructuredTypeMembers") - } - case t.flags&TypeFlagsUnion != 0: - c.resolveUnionTypeMembers(t) - case t.flags&TypeFlagsIntersection != 0: - c.resolveIntersectionTypeMembers(t) + case t.objectFlags&(ObjectFlagsClassOrInterface|ObjectFlagsReference) != 0: + c.resolveObjectTypeMembers(t) + case t.objectFlags&ObjectFlagsReverseMapped != 0: + c.resolveReverseMappedTypeMembers(t) + case t.objectFlags&ObjectFlagsAnonymous != 0: + c.resolveAnonymousTypeMembers(t) + case t.objectFlags&ObjectFlagsMapped != 0: + c.resolveMappedTypeMembers(t) default: panic("Unhandled case in resolveStructuredTypeMembers") } + case t.flags&TypeFlagsUnion != 0: + c.resolveUnionTypeMembers(t) + case t.flags&TypeFlagsIntersection != 0: + c.resolveIntersectionTypeMembers(t) + default: + panic("Unhandled case in resolveStructuredTypeMembers") } - return t.AsStructuredType() +} + +// markMembersPublished records that the members of t, whose resolution is +// in progress, are available to computations re-entering it. +func (c *Checker) markMembersPublished(t *Type) { + i, ok := c.resolvingAnyIndex(memoKeyOf(t, memoStructuredMembers)) + debug.Assert(ok, "members published outside their resolution") + c.resolutions[i].membersPublished = true +} + +// publishStructuredTypeMembers sets the members of t while they are being +// resolved, making them available to computations re-entering the resolution +// before it completes. +func (c *Checker) publishStructuredTypeMembers(t *Type, members ast.SymbolTable, callSignatures []*Signature, constructSignatures []*Signature, indexInfos []*IndexInfo) { + // Listing the properties may re-enter the resolution, which then sees + // the members. + c.markMembersPublished(t) + c.setStructuredTypeData(t, members, callSignatures, constructSignatures, indexInfos) } // isModuleTableType reports whether t is the type of a module object, whose @@ -21250,7 +21273,6 @@ func (c *Checker) resolveModuleTableMembers(t *Type) { mark := c.markDiscard() hidden := false for { - t.objectFlags |= ObjectFlagsMembersResolving c.beginTypeResolution(t, TypeSystemPropertyNameStructuredMembers) c.resolveAnonymousTypeMembers(t) r := c.topTypeResolution() @@ -21265,11 +21287,13 @@ func (c *Checker) resolveModuleTableMembers(t *Type) { c.discardSince(mark) } c.popTypeResolution() - t.objectFlags &^= ObjectFlagsMembersResolving if canonical == nil && !restart { break } c.clearStructuredMembers(t) + key := memoKeyOf(t, memoStructuredMembers) + i, _ := c.resolving.get(key) + c.resolutions[i].membersPublished = false if canonical != nil { c.resolveStructuredTypeMembers(canonical.(*Type)) continue @@ -21278,12 +21302,12 @@ func (c *Checker) resolveModuleTableMembers(t *Type) { // is resolved again as if it had been entered first: with the // computations in progress below it hidden. hidden = true - floor, _ := c.resolving.get(memoKeyOf(t, memoStructuredMembers)) - c.beginCycleYield(t, TypeSystemPropertyNameStructuredMembers, -1, int(floor)) + c.beginCycleYield(t, TypeSystemPropertyNameStructuredMembers, -1, int(i)) } if hidden { c.endCycleYield() } + t.objectFlags |= ObjectFlagsMembersResolved c.releaseDiscardMark(mark) if c.logResults() { c.logMembersDiscard(t) @@ -21309,7 +21333,7 @@ func (c *Checker) clearStructuredMembers(t *Type) { //go:noinline func (c *Checker) logMembersDiscard(t *Type) { c.discardLog = append(c.discardLog, discardEntry{nil, func() { - if t.objectFlags&ObjectFlagsMembersResolving != 0 { + if _, ok := c.resolvingAnyIndex(memoKeyOf(t, memoStructuredMembers)); ok { // An enclosing resolution of the same members sets them again. return } @@ -21395,7 +21419,7 @@ func (c *Checker) resolveObjectTypeMembers(t *Type) { return findIndexInfo(indexInfos, info.keyType) == nil })) } - c.setStructuredTypeMembers(t, nil, callSignatures, constructSignatures, indexInfos) + c.setStructuredTypeData(t, nil, callSignatures, constructSignatures, indexInfos) lazyState := c.lazyStateArena.New() lazyState.layout = layout lazyState.mapper = mapper @@ -23103,22 +23127,22 @@ func (c *Checker) instantiateIndexInfo(info *IndexInfo, m *TypeMapper) *IndexInf func (c *Checker) resolveAnonymousTypeMembers(t *Type) { d := t.AsObjectType() if d.target != nil { - c.setStructuredTypeMembers(t, nil, nil, nil, nil) + c.publishStructuredTypeMembers(t, nil, nil, nil, nil) members := c.createInstantiatedSymbolTable(c.getPropertiesOfObjectType(d.target), d.mapper) callSignatures := c.instantiateSignatures(c.getSignaturesOfType(d.target, SignatureKindCall), d.mapper) constructSignatures := c.instantiateSignatures(c.getSignaturesOfType(d.target, SignatureKindConstruct), d.mapper) indexInfos := c.instantiateIndexInfos(c.getIndexInfosOfType(d.target), d.mapper) - c.setStructuredTypeMembers(t, members, callSignatures, constructSignatures, indexInfos) + c.publishStructuredTypeMembers(t, members, callSignatures, constructSignatures, indexInfos) return } symbol := c.getMergedSymbol(t.symbol) if symbol.Flags()&ast.SymbolFlagsTypeLiteral != 0 { - c.setStructuredTypeMembers(t, nil, nil, nil, nil) + c.publishStructuredTypeMembers(t, nil, nil, nil, nil) members := c.getMembersOfSymbol(symbol) callSignatures := c.getSignaturesOfSymbol(members.Get(ast.InternalSymbolNameCall)) constructSignatures := c.getSignaturesOfSymbol(members.Get(ast.InternalSymbolNameNew)) indexInfos := c.getIndexInfosOfSymbol(symbol) - c.setStructuredTypeMembers(t, members, callSignatures, constructSignatures, indexInfos) + c.publishStructuredTypeMembers(t, members, callSignatures, constructSignatures, indexInfos) return } // Combinations of function, class, enum and module @@ -23134,14 +23158,14 @@ func (c *Checker) resolveAnonymousTypeMembers(t *Type) { members = varsOnly } var baseConstructorIndexInfo *IndexInfo - c.setStructuredTypeMembers(t, members, nil, nil, nil) + c.publishStructuredTypeMembers(t, members, nil, nil, nil) if symbol.Flags()&ast.SymbolFlagsClass != 0 { classType := c.getDeclaredTypeOfClassOrInterface(symbol) baseConstructorType := c.getBaseConstructorTypeOfClass(classType) if baseConstructorType.flags&(TypeFlagsObject|TypeFlagsIntersection|TypeFlagsTypeVariable) != 0 { members = members.Clone() c.addInheritedMembers(members, c.getPropertiesOfType(baseConstructorType)) - c.setStructuredTypeMembers(t, members, nil, nil, nil) + c.publishStructuredTypeMembers(t, members, nil, nil, nil) } else if baseConstructorType == c.anyType { baseConstructorIndexInfo = c.anyBaseTypeIndexInfo } @@ -23353,7 +23377,7 @@ func (c *Checker) resolveMappedTypeMembers(t *Type) { members := ast.NewSymbolTable() var indexInfos []*IndexInfo // Resolve upfront such that recursive references see an empty object type. - c.setStructuredTypeMembers(t, nil, nil, nil, nil) + c.publishStructuredTypeMembers(t, nil, nil, nil, nil) // In { [P in K]: T }, we refer to P as the type parameter type, K as the constraint type, // and T as the template type. typeParameter := c.getTypeParameterFromMappedType(t) @@ -23436,7 +23460,7 @@ func (c *Checker) resolveMappedTypeMembers(t *Type) { } else { forEachType(c.getLowerBoundOfKeyType(constraintType), addMemberForKeyType) } - c.setStructuredTypeMembers(t, members, nil, nil, indexInfos) + c.publishStructuredTypeMembers(t, members, nil, nil, indexInfos) } func (c *Checker) getTypeOfMappedSymbol(symbol *ast.Symbol) *Type { @@ -23523,7 +23547,7 @@ func (c *Checker) resolveUnionTypeMembers(t *Type) { return c.getSignaturesOfType(t, SignatureKindConstruct) })) indexInfos := c.getUnionIndexInfos(t.Types()) - c.setStructuredTypeMembers(t, nil, callSignatures, constructSignatures, indexInfos) + c.setStructuredTypeData(t, nil, callSignatures, constructSignatures, indexInfos) } func (c *Checker) getArrayMemberCallSignatures(t *Type) []*Signature { @@ -23787,7 +23811,7 @@ func (c *Checker) resolveIntersectionTypeMembers(t *Type) { indexInfos = c.appendIndexInfo(indexInfos, info, false /*union*/) } } - c.setStructuredTypeMembers(t, nil, callSignatures, constructSignatures, indexInfos) + c.setStructuredTypeData(t, nil, callSignatures, constructSignatures, indexInfos) } func (c *Checker) appendSignatures(signatures []*Signature, newSignatures []*Signature) []*Signature { @@ -28032,8 +28056,14 @@ func (c *Checker) cloneTypeReference(source *Type) *Type { return t } +// setStructuredTypeMembers sets the members of a type being created, which +// are then resolved. func (c *Checker) setStructuredTypeMembers(t *Type, members ast.SymbolTable, callSignatures []*Signature, constructSignatures []*Signature, indexInfos []*IndexInfo) { t.objectFlags |= ObjectFlagsMembersResolved + c.setStructuredTypeData(t, members, callSignatures, constructSignatures, indexInfos) +} + +func (c *Checker) setStructuredTypeData(t *Type, members ast.SymbolTable, callSignatures []*Signature, constructSignatures []*Signature, indexInfos []*IndexInfo) { data := t.AsStructuredType() data.members = members data.properties = c.getNamedMembers(members, t.symbol) diff --git a/tsc/internal/checker/inference.go b/tsc/internal/checker/inference.go index ed7b00504dd3f..27ddc6aed15e6 100644 --- a/tsc/internal/checker/inference.go +++ b/tsc/internal/checker/inference.go @@ -1166,7 +1166,7 @@ func (c *Checker) resolveReverseMappedTypeMembers(t *Type) { } members.Set(prop.Name(), inferredProp) } - c.setStructuredTypeMembers(t, members, nil, nil, indexInfos) + c.setStructuredTypeData(t, members, nil, nil, indexInfos) } func (c *Checker) getTypeOfReverseMappedSymbol(symbol *ast.Symbol) *Type { diff --git a/tsc/internal/checker/resolutions.go b/tsc/internal/checker/resolutions.go index 687f9de9dd4e5..227de5327a988 100644 --- a/tsc/internal/checker/resolutions.go +++ b/tsc/internal/checker/resolutions.go @@ -1,6 +1,8 @@ package checker import ( + "slices" + "github.com/microsoft/TypeScript/tsc/internal/ast" "github.com/microsoft/TypeScript/tsc/internal/debug" ) @@ -24,9 +26,12 @@ type resolution struct { // reuse of its result; see memo.go. memo bool isQuery bool - resolving bool // The resolution is the one in Checker.resolving for key - fromCheck bool // The query began in a check; see recordFromCheck - prevMemo int32 // Checker.memoTop on entry + resolving bool // The resolution is the one in Checker.resolving for key + fromCheck bool // The query began in a check; see recordFromCheck + // The structured members the outermost resolution of key computes are + // available before it completes; see resolveStructuredTypeMembersUncached. + membersPublished bool + prevMemo int32 // Checker.memoTop on entry // Index in Checker.deferredAttach of the first result cached by the // computation before it had effects; see attachState. attachStart int32 @@ -269,6 +274,24 @@ func (c *Checker) beginResolving(key memoKey) bool { return true } +// resolvingAnyIndex returns the index in resolutions of the computation of +// key in progress, if any, whether or not it is visible. A computation hidden +// by a cycle yield is shadowed in Checker.resolving by one re-entering it, +// until the yield ends, even once that one has ended. +func (c *Checker) resolvingAnyIndex(key memoKey) (int, bool) { + if i, ok := c.resolving.get(key); ok { + return int(i), true + } + for _, y := range slices.Backward(c.cycleYields) { + for _, sh := range y.shadowed { + if sh.key == key { + return int(sh.index), true + } + } + } + return 0, false +} + // endResolving records that the resolution no longer computes its key. A // resolution that shadows another during a cycle yield ends before the yield // restores the one it shadows, so it is still the one recorded. diff --git a/tsc/internal/checker/types.go b/tsc/internal/checker/types.go index 8476777341c1a..57cbc55faa3c0 100644 --- a/tsc/internal/checker/types.go +++ b/tsc/internal/checker/types.go @@ -695,7 +695,6 @@ const ( ObjectFlagsCouldContainTypeVariablesComputed ObjectFlags = 1 << 19 // CouldContainTypeVariables flag has been computed ObjectFlagsCouldContainTypeVariables ObjectFlags = 1 << 20 // Type could contain a type variable ObjectFlagsMembersResolved ObjectFlags = 1 << 21 // Members have been resolved - ObjectFlagsMembersResolving ObjectFlags = 1 << 30 // Members are being resolved ObjectFlagsClassOrInterface = ObjectFlagsClass | ObjectFlagsInterface ObjectFlagsRequiresWidening = ObjectFlagsContainsWideningType | ObjectFlagsContainsObjectOrArrayLiteral From 32bba6770bc2310459df92942a02f07165ad326f Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sat, 31 Oct 2026 21:04:57 -0700 Subject: [PATCH 152/194] Add test for variance consistency in recursive generics Reduced from the react-relay DefinitelyTyped tests. On main, the variances of these mutually recursive generics are measured while the cycle is still open and then frozen, so every parameter of EntryPointComponent ends up "independent". Main therefore accepts the assignment of `e` to `EntryPoint` while rejecting the assignment of `e.root` to that same type's `root` property. The checker now reports both assignments, which is the consistent answer. Recording the case keeps that behavior covered. --- .../varianceCircularConsistency.errors.txt | 66 ++++++++ .../varianceCircularConsistency.symbols | 146 ++++++++++++++++++ .../varianceCircularConsistency.types | 66 ++++++++ .../compiler/varianceCircularConsistency.ts | 29 ++++ 4 files changed, 307 insertions(+) create mode 100644 tsc/testdata/baselines/reference/compiler/varianceCircularConsistency.errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/varianceCircularConsistency.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/varianceCircularConsistency.types create mode 100644 tsc/testdata/tests/cases/compiler/varianceCircularConsistency.ts diff --git a/tsc/testdata/baselines/reference/compiler/varianceCircularConsistency.errors.txt b/tsc/testdata/baselines/reference/compiler/varianceCircularConsistency.errors.txt new file mode 100644 index 0000000000000..060c23148616c --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/varianceCircularConsistency.errors.txt @@ -0,0 +1,66 @@ +varianceCircularConsistency.ts(25,7): error TS2322: Type 'EntryPoint void; }, {}>, { slug: string; }>' is not assignable to type 'EntryPoint'. + Types of property 'root' are incompatible. + Type 'Ref>' is not assignable to type 'Ref, never, never, {}>>'. + Type 'EntryPointComponent<{ q: { readonly variables: { slug: string; }; }; }, never, never, {}>' is not assignable to type 'EntryPointComponent, never, never, {}>'. + Type '(props: Props<{ q: { readonly variables: { slug: string; }; }; }, never, never, {}>) => void' is not assignable to type 'EntryPointComponent, never, never, {}>'. + Type '(props: Props<{ q: { readonly variables: { slug: string; }; }; }, never, never, {}>) => void' is not assignable to type '(props: Props, never, never, {}>) => void'. + Types of parameters 'props' and 'props' are incompatible. + Type 'Props, never, never, {}>' is not assignable to type 'Props<{ q: { readonly variables: { slug: string; }; }; }, never, never, {}>'. + Property 'q' is missing in type 'Record' but required in type '{ q: { readonly variables: { slug: string; }; }; }'. +varianceCircularConsistency.ts(26,7): error TS2322: Type 'Ref>' is not assignable to type 'Ref, never, never, {}>>'. + Type 'EntryPointComponent<{ q: { readonly variables: { slug: string; }; }; }, never, never, {}>' is not assignable to type 'EntryPointComponent, never, never, {}>'. + Type '(props: Props<{ q: { readonly variables: { slug: string; }; }; }, never, never, {}>) => void' is not assignable to type 'EntryPointComponent, never, never, {}>'. + Type '(props: Props<{ q: { readonly variables: { slug: string; }; }; }, never, never, {}>) => void' is not assignable to type '(props: Props, never, never, {}>) => void'. + Types of parameters 'props' and 'props' are incompatible. + Type 'Props, never, never, {}>' is not assignable to type 'Props<{ q: { readonly variables: { slug: string; }; }; }, never, never, {}>'. + Property 'q' is missing in type 'Record' but required in type '{ q: { readonly variables: { slug: string; }; }; }'. + + +==== varianceCircularConsistency.ts (2 errors) ==== + // Variances of these mutually recursive generics must not depend on values + // measured mid-cycle. Assigning `e` to `EntryPoint` must agree with + // assigning `e.root` to `EntryPoint["root"]`. + + interface Query {} + type Component

= P | ((props: P) => void); + interface Ref { + value: T; + } + interface Rep, Nested, Runtime, Extra> extends Readonly<{ + root: Ref>; + }> {} + type Preloaded = T extends Record> ? { [K in keyof T]: Unwrap> } : never; + interface Props extends Readonly<{ + nested: Preloaded; + queries: Queries; + }> {} + type EntryPointComponent, Nested, Runtime, Extra = {}> = Component>; + type Unwrap = C extends EntryPointComponent ? Readonly<{}> : {}; + type EntryPoint = Rep ? Q : never, never, never, never>; + type GetComponent = T extends EntryPoint ? C : never; + + declare const c: EntryPointComponent<{ q: { readonly variables: { slug: string } } }, {}, { onClick: () => void }>; + declare const e: EntryPoint; + const whole: EntryPoint = e; + ~~~~~ +!!! error TS2322: Type 'EntryPoint void; }, {}>, { slug: string; }>' is not assignable to type 'EntryPoint'. +!!! error TS2322: Types of property 'root' are incompatible. +!!! error TS2322: Type 'Ref>' is not assignable to type 'Ref, never, never, {}>>'. +!!! error TS2322: Type 'EntryPointComponent<{ q: { readonly variables: { slug: string; }; }; }, never, never, {}>' is not assignable to type 'EntryPointComponent, never, never, {}>'. +!!! error TS2322: Type '(props: Props<{ q: { readonly variables: { slug: string; }; }; }, never, never, {}>) => void' is not assignable to type 'EntryPointComponent, never, never, {}>'. +!!! error TS2322: Type '(props: Props<{ q: { readonly variables: { slug: string; }; }; }, never, never, {}>) => void' is not assignable to type '(props: Props, never, never, {}>) => void'. +!!! error TS2322: Types of parameters 'props' and 'props' are incompatible. +!!! error TS2322: Type 'Props, never, never, {}>' is not assignable to type 'Props<{ q: { readonly variables: { slug: string; }; }; }, never, never, {}>'. +!!! error TS2322: Property 'q' is missing in type 'Record' but required in type '{ q: { readonly variables: { slug: string; }; }; }'. +!!! related TS2728 varianceCircularConsistency.ts:23:40: 'q' is declared here. + const root: EntryPoint["root"] = e.root; + ~~~~ +!!! error TS2322: Type 'Ref>' is not assignable to type 'Ref, never, never, {}>>'. +!!! error TS2322: Type 'EntryPointComponent<{ q: { readonly variables: { slug: string; }; }; }, never, never, {}>' is not assignable to type 'EntryPointComponent, never, never, {}>'. +!!! error TS2322: Type '(props: Props<{ q: { readonly variables: { slug: string; }; }; }, never, never, {}>) => void' is not assignable to type 'EntryPointComponent, never, never, {}>'. +!!! error TS2322: Type '(props: Props<{ q: { readonly variables: { slug: string; }; }; }, never, never, {}>) => void' is not assignable to type '(props: Props, never, never, {}>) => void'. +!!! error TS2322: Types of parameters 'props' and 'props' are incompatible. +!!! error TS2322: Type 'Props, never, never, {}>' is not assignable to type 'Props<{ q: { readonly variables: { slug: string; }; }; }, never, never, {}>'. +!!! error TS2322: Property 'q' is missing in type 'Record' but required in type '{ q: { readonly variables: { slug: string; }; }; }'. +!!! related TS2728 varianceCircularConsistency.ts:23:40: 'q' is declared here. + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/varianceCircularConsistency.symbols b/tsc/testdata/baselines/reference/compiler/varianceCircularConsistency.symbols new file mode 100644 index 0000000000000..648c66a010864 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/varianceCircularConsistency.symbols @@ -0,0 +1,146 @@ +//// [tests/cases/compiler/varianceCircularConsistency.ts] //// + +=== varianceCircularConsistency.ts === +// Variances of these mutually recursive generics must not depend on values +// measured mid-cycle. Assigning `e` to `EntryPoint` must agree with +// assigning `e.root` to `EntryPoint["root"]`. + +interface Query {} +>Query : Symbol(Query, Decl(varianceCircularConsistency.ts, 0, 0)) + +type Component

= P | ((props: P) => void); +>Component : Symbol(Component, Decl(varianceCircularConsistency.ts, 4, 18)) +>P : Symbol(P, Decl(varianceCircularConsistency.ts, 5, 15)) +>P : Symbol(P, Decl(varianceCircularConsistency.ts, 5, 15)) +>props : Symbol(props, Decl(varianceCircularConsistency.ts, 5, 26)) +>P : Symbol(P, Decl(varianceCircularConsistency.ts, 5, 15)) + +interface Ref { +>Ref : Symbol(Ref, Decl(varianceCircularConsistency.ts, 5, 45)) +>T : Symbol(T, Decl(varianceCircularConsistency.ts, 6, 14)) + + value: T; +>value : Symbol(Ref.value, Decl(varianceCircularConsistency.ts, 6, 18)) +>T : Symbol(T, Decl(varianceCircularConsistency.ts, 6, 14)) +} +interface Rep, Nested, Runtime, Extra> extends Readonly<{ +>Rep : Symbol(Rep, Decl(varianceCircularConsistency.ts, 8, 1)) +>Params : Symbol(Params, Decl(varianceCircularConsistency.ts, 9, 14)) +>Queries : Symbol(Queries, Decl(varianceCircularConsistency.ts, 9, 21)) +>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --)) +>Query : Symbol(Query, Decl(varianceCircularConsistency.ts, 0, 0)) +>Nested : Symbol(Nested, Decl(varianceCircularConsistency.ts, 9, 60)) +>Runtime : Symbol(Runtime, Decl(varianceCircularConsistency.ts, 9, 68)) +>Extra : Symbol(Extra, Decl(varianceCircularConsistency.ts, 9, 77)) +>Readonly : Symbol(Readonly, Decl(lib.es5.d.ts, --, --)) + + root: Ref>; +>root : Symbol(root, Decl(varianceCircularConsistency.ts, 9, 103)) +>Ref : Symbol(Ref, Decl(varianceCircularConsistency.ts, 5, 45)) +>EntryPointComponent : Symbol(EntryPointComponent, Decl(varianceCircularConsistency.ts, 16, 5)) +>Queries : Symbol(Queries, Decl(varianceCircularConsistency.ts, 9, 21)) +>Nested : Symbol(Nested, Decl(varianceCircularConsistency.ts, 9, 60)) +>Runtime : Symbol(Runtime, Decl(varianceCircularConsistency.ts, 9, 68)) + +}> {} +type Preloaded = T extends Record> ? { [K in keyof T]: Unwrap> } : never; +>Preloaded : Symbol(Preloaded, Decl(varianceCircularConsistency.ts, 11, 5)) +>T : Symbol(T, Decl(varianceCircularConsistency.ts, 12, 15)) +>T : Symbol(T, Decl(varianceCircularConsistency.ts, 12, 15)) +>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --)) +>Rep : Symbol(Rep, Decl(varianceCircularConsistency.ts, 8, 1)) +>K : Symbol(K, Decl(varianceCircularConsistency.ts, 12, 80)) +>T : Symbol(T, Decl(varianceCircularConsistency.ts, 12, 15)) +>Unwrap : Symbol(Unwrap, Decl(varianceCircularConsistency.ts, 17, 145)) +>GetComponent : Symbol(GetComponent, Decl(varianceCircularConsistency.ts, 19, 124)) +>T : Symbol(T, Decl(varianceCircularConsistency.ts, 12, 15)) + +interface Props extends Readonly<{ +>Props : Symbol(Props, Decl(varianceCircularConsistency.ts, 12, 129)) +>Queries : Symbol(Queries, Decl(varianceCircularConsistency.ts, 13, 16)) +>Nested : Symbol(Nested, Decl(varianceCircularConsistency.ts, 13, 24)) +>Runtime : Symbol(Runtime, Decl(varianceCircularConsistency.ts, 13, 32)) +>Extra : Symbol(Extra, Decl(varianceCircularConsistency.ts, 13, 41)) +>Readonly : Symbol(Readonly, Decl(lib.es5.d.ts, --, --)) + + nested: Preloaded; +>nested : Symbol(nested, Decl(varianceCircularConsistency.ts, 13, 67)) +>Preloaded : Symbol(Preloaded, Decl(varianceCircularConsistency.ts, 11, 5)) +>Nested : Symbol(Nested, Decl(varianceCircularConsistency.ts, 13, 24)) + + queries: Queries; +>queries : Symbol(queries, Decl(varianceCircularConsistency.ts, 14, 30)) +>Queries : Symbol(Queries, Decl(varianceCircularConsistency.ts, 13, 16)) + +}> {} +type EntryPointComponent, Nested, Runtime, Extra = {}> = Component>; +>EntryPointComponent : Symbol(EntryPointComponent, Decl(varianceCircularConsistency.ts, 16, 5)) +>Queries : Symbol(Queries, Decl(varianceCircularConsistency.ts, 17, 25)) +>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --)) +>Query : Symbol(Query, Decl(varianceCircularConsistency.ts, 0, 0)) +>Nested : Symbol(Nested, Decl(varianceCircularConsistency.ts, 17, 63)) +>Runtime : Symbol(Runtime, Decl(varianceCircularConsistency.ts, 17, 71)) +>Extra : Symbol(Extra, Decl(varianceCircularConsistency.ts, 17, 80)) +>Component : Symbol(Component, Decl(varianceCircularConsistency.ts, 4, 18)) +>Props : Symbol(Props, Decl(varianceCircularConsistency.ts, 12, 129)) +>Queries : Symbol(Queries, Decl(varianceCircularConsistency.ts, 17, 25)) +>Nested : Symbol(Nested, Decl(varianceCircularConsistency.ts, 17, 63)) +>Runtime : Symbol(Runtime, Decl(varianceCircularConsistency.ts, 17, 71)) +>Extra : Symbol(Extra, Decl(varianceCircularConsistency.ts, 17, 80)) + +type Unwrap = C extends EntryPointComponent ? Readonly<{}> : {}; +>Unwrap : Symbol(Unwrap, Decl(varianceCircularConsistency.ts, 17, 145)) +>C : Symbol(C, Decl(varianceCircularConsistency.ts, 18, 12)) +>C : Symbol(C, Decl(varianceCircularConsistency.ts, 18, 12)) +>EntryPointComponent : Symbol(EntryPointComponent, Decl(varianceCircularConsistency.ts, 16, 5)) +>Q : Symbol(Q, Decl(varianceCircularConsistency.ts, 18, 52)) +>N : Symbol(N, Decl(varianceCircularConsistency.ts, 18, 61)) +>R : Symbol(R, Decl(varianceCircularConsistency.ts, 18, 70)) +>Readonly : Symbol(Readonly, Decl(lib.es5.d.ts, --, --)) + +type EntryPoint = Rep ? Q : never, never, never, never>; +>EntryPoint : Symbol(EntryPoint, Decl(varianceCircularConsistency.ts, 18, 94)) +>C : Symbol(C, Decl(varianceCircularConsistency.ts, 19, 16)) +>Params : Symbol(Params, Decl(varianceCircularConsistency.ts, 19, 18)) +>Rep : Symbol(Rep, Decl(varianceCircularConsistency.ts, 8, 1)) +>Params : Symbol(Params, Decl(varianceCircularConsistency.ts, 19, 18)) +>C : Symbol(C, Decl(varianceCircularConsistency.ts, 19, 16)) +>EntryPointComponent : Symbol(EntryPointComponent, Decl(varianceCircularConsistency.ts, 16, 5)) +>Q : Symbol(Q, Decl(varianceCircularConsistency.ts, 19, 76)) +>Q : Symbol(Q, Decl(varianceCircularConsistency.ts, 19, 76)) + +type GetComponent = T extends EntryPoint ? C : never; +>GetComponent : Symbol(GetComponent, Decl(varianceCircularConsistency.ts, 19, 124)) +>T : Symbol(T, Decl(varianceCircularConsistency.ts, 20, 18)) +>T : Symbol(T, Decl(varianceCircularConsistency.ts, 20, 18)) +>EntryPoint : Symbol(EntryPoint, Decl(varianceCircularConsistency.ts, 18, 94)) +>C : Symbol(C, Decl(varianceCircularConsistency.ts, 20, 49)) +>P : Symbol(P, Decl(varianceCircularConsistency.ts, 20, 58)) +>C : Symbol(C, Decl(varianceCircularConsistency.ts, 20, 49)) + +declare const c: EntryPointComponent<{ q: { readonly variables: { slug: string } } }, {}, { onClick: () => void }>; +>c : Symbol(c, Decl(varianceCircularConsistency.ts, 22, 13)) +>EntryPointComponent : Symbol(EntryPointComponent, Decl(varianceCircularConsistency.ts, 16, 5)) +>q : Symbol(q, Decl(varianceCircularConsistency.ts, 22, 38)) +>variables : Symbol(variables, Decl(varianceCircularConsistency.ts, 22, 43)) +>slug : Symbol(slug, Decl(varianceCircularConsistency.ts, 22, 65)) +>onClick : Symbol(onClick, Decl(varianceCircularConsistency.ts, 22, 91)) + +declare const e: EntryPoint; +>e : Symbol(e, Decl(varianceCircularConsistency.ts, 23, 13)) +>EntryPoint : Symbol(EntryPoint, Decl(varianceCircularConsistency.ts, 18, 94)) +>c : Symbol(c, Decl(varianceCircularConsistency.ts, 22, 13)) +>slug : Symbol(slug, Decl(varianceCircularConsistency.ts, 23, 39)) + +const whole: EntryPoint = e; +>whole : Symbol(whole, Decl(varianceCircularConsistency.ts, 24, 5)) +>EntryPoint : Symbol(EntryPoint, Decl(varianceCircularConsistency.ts, 18, 94)) +>e : Symbol(e, Decl(varianceCircularConsistency.ts, 23, 13)) + +const root: EntryPoint["root"] = e.root; +>root : Symbol(root, Decl(varianceCircularConsistency.ts, 25, 5)) +>EntryPoint : Symbol(EntryPoint, Decl(varianceCircularConsistency.ts, 18, 94)) +>e.root : Symbol(root, Decl(varianceCircularConsistency.ts, 9, 103)) +>e : Symbol(e, Decl(varianceCircularConsistency.ts, 23, 13)) +>root : Symbol(root, Decl(varianceCircularConsistency.ts, 9, 103)) + diff --git a/tsc/testdata/baselines/reference/compiler/varianceCircularConsistency.types b/tsc/testdata/baselines/reference/compiler/varianceCircularConsistency.types new file mode 100644 index 0000000000000..28c105bfea8f1 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/varianceCircularConsistency.types @@ -0,0 +1,66 @@ +//// [tests/cases/compiler/varianceCircularConsistency.ts] //// + +=== varianceCircularConsistency.ts === +// Variances of these mutually recursive generics must not depend on values +// measured mid-cycle. Assigning `e` to `EntryPoint` must agree with +// assigning `e.root` to `EntryPoint["root"]`. + +interface Query {} +type Component

= P | ((props: P) => void); +>Component : Component

+>props : P + +interface Ref { + value: T; +>value : T +} +interface Rep, Nested, Runtime, Extra> extends Readonly<{ + root: Ref>; +>root : Ref> + +}> {} +type Preloaded = T extends Record> ? { [K in keyof T]: Unwrap> } : never; +>Preloaded : Preloaded + +interface Props extends Readonly<{ + nested: Preloaded; +>nested : Preloaded + + queries: Queries; +>queries : Queries + +}> {} +type EntryPointComponent, Nested, Runtime, Extra = {}> = Component>; +>EntryPointComponent : EntryPointComponent + +type Unwrap = C extends EntryPointComponent ? Readonly<{}> : {}; +>Unwrap : Unwrap + +type EntryPoint = Rep ? Q : never, never, never, never>; +>EntryPoint : EntryPoint + +type GetComponent = T extends EntryPoint ? C : never; +>GetComponent : GetComponent + +declare const c: EntryPointComponent<{ q: { readonly variables: { slug: string } } }, {}, { onClick: () => void }>; +>c : EntryPointComponent<{ q: { readonly variables: { slug: string; }; }; }, {}, { onClick: () => void; }, {}> +>q : { readonly variables: { slug: string; }; } +>variables : { slug: string; } +>slug : string +>onClick : () => void + +declare const e: EntryPoint; +>e : EntryPoint void; }, {}>, { slug: string; }> +>c : EntryPointComponent<{ q: { readonly variables: { slug: string; }; }; }, {}, { onClick: () => void; }, {}> +>slug : string + +const whole: EntryPoint = e; +>whole : EntryPoint +>e : EntryPoint void; }, {}>, { slug: string; }> + +const root: EntryPoint["root"] = e.root; +>root : Ref, never, never, {}>> +>e.root : Ref> +>e : EntryPoint void; }, {}>, { slug: string; }> +>root : Ref> + diff --git a/tsc/testdata/tests/cases/compiler/varianceCircularConsistency.ts b/tsc/testdata/tests/cases/compiler/varianceCircularConsistency.ts new file mode 100644 index 0000000000000..c6c3ccb148802 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/varianceCircularConsistency.ts @@ -0,0 +1,29 @@ +// @strict: true +// @noEmit: true + +// Variances of these mutually recursive generics must not depend on values +// measured mid-cycle. Assigning `e` to `EntryPoint` must agree with +// assigning `e.root` to `EntryPoint["root"]`. + +interface Query {} +type Component

= P | ((props: P) => void); +interface Ref { + value: T; +} +interface Rep, Nested, Runtime, Extra> extends Readonly<{ + root: Ref>; +}> {} +type Preloaded = T extends Record> ? { [K in keyof T]: Unwrap> } : never; +interface Props extends Readonly<{ + nested: Preloaded; + queries: Queries; +}> {} +type EntryPointComponent, Nested, Runtime, Extra = {}> = Component>; +type Unwrap = C extends EntryPointComponent ? Readonly<{}> : {}; +type EntryPoint = Rep ? Q : never, never, never, never>; +type GetComponent = T extends EntryPoint ? C : never; + +declare const c: EntryPointComponent<{ q: { readonly variables: { slug: string } } }, {}, { onClick: () => void }>; +declare const e: EntryPoint; +const whole: EntryPoint = e; +const root: EntryPoint["root"] = e.root; From fbc6abbb248454ae1ab51b37e476f27d469227ce Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sat, 31 Oct 2026 21:30:58 -0700 Subject: [PATCH 153/194] Add test for circular return types through callback arguments A function with an inferred return type that calls itself inside a callback passed to a non-generic function forms a return type cycle through the callback. TypeScript reports TS7023 on the function and TS7024 on the callback, and without noImplicitAny the cycle resolves both to any. The baselines record this branch's current output, which misses the cycle: there are no errors under strict, and the non-strict case reports a spurious TS2322 (seen in OmniRoute). --- ...hCallbackArgument(strict=false).errors.txt | 38 ++++++++ ...oughCallbackArgument(strict=false).symbols | 77 +++++++++++++++++ ...hroughCallbackArgument(strict=false).types | 86 +++++++++++++++++++ ...ghCallbackArgument(strict=true).errors.txt | 38 ++++++++ ...roughCallbackArgument(strict=true).symbols | 77 +++++++++++++++++ ...ThroughCallbackArgument(strict=true).types | 86 +++++++++++++++++++ ...rcularReturnTypeThroughCallbackArgument.ts | 27 ++++++ 7 files changed, 429 insertions(+) create mode 100644 tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=false).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=false).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=false).types create mode 100644 tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=true).errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=true).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=true).types create mode 100644 tsc/testdata/tests/cases/compiler/circularReturnTypeThroughCallbackArgument.ts diff --git a/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=false).errors.txt b/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=false).errors.txt new file mode 100644 index 0000000000000..3c7a84d051ca9 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=false).errors.txt @@ -0,0 +1,38 @@ +circularReturnTypeThroughCallbackArgument.ts(23,25): error TS2322: Type 'Promise' is not assignable to type 'Promise'. + Type 'Other | Result' is not assignable to type 'Result'. + Type 'Other' is not assignable to type 'Result'. + Index signature for type 'string' is missing in type 'Other'. + + +==== circularReturnTypeThroughCallbackArgument.ts (1 errors) ==== + declare function fan(g: () => number): number; + + export function a(n: number) { + return fan(() => a(n)); + } + + declare function fanAll(g: () => Promise<{ ok: boolean }>): Promise<{ ok: boolean }>; + + export async function b(n: number) { + if (n > 0) { + return fanAll(() => b(n - 1)); + } + return { ok: true }; + } + + type Result = { success: boolean; [key: string]: unknown }; + interface Other { success: boolean; url: string } + declare function fanOut(generateOne: () => Promise): Promise; + declare const other: Other; + + export async function c(n: number) { + if (n) return other; + return fanOut(() => c(n - 1)); + ~~~~~~~~ +!!! error TS2322: Type 'Promise' is not assignable to type 'Promise'. +!!! error TS2322: Type 'Other | Result' is not assignable to type 'Result'. +!!! error TS2322: Type 'Other' is not assignable to type 'Result'. +!!! error TS2322: Index signature for type 'string' is missing in type 'Other'. +!!! related TS6502 circularReturnTypeThroughCallbackArgument.ts:18:38: The expected type comes from the return type of this signature. + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=false).symbols b/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=false).symbols new file mode 100644 index 0000000000000..6db3b443be191 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=false).symbols @@ -0,0 +1,77 @@ +//// [tests/cases/compiler/circularReturnTypeThroughCallbackArgument.ts] //// + +=== circularReturnTypeThroughCallbackArgument.ts === +declare function fan(g: () => number): number; +>fan : Symbol(fan, Decl(circularReturnTypeThroughCallbackArgument.ts, 0, 0)) +>g : Symbol(g, Decl(circularReturnTypeThroughCallbackArgument.ts, 0, 21)) + +export function a(n: number) { +>a : Symbol(a, Decl(circularReturnTypeThroughCallbackArgument.ts, 0, 46)) +>n : Symbol(n, Decl(circularReturnTypeThroughCallbackArgument.ts, 2, 18)) + + return fan(() => a(n)); +>fan : Symbol(fan, Decl(circularReturnTypeThroughCallbackArgument.ts, 0, 0)) +>a : Symbol(a, Decl(circularReturnTypeThroughCallbackArgument.ts, 0, 46)) +>n : Symbol(n, Decl(circularReturnTypeThroughCallbackArgument.ts, 2, 18)) +} + +declare function fanAll(g: () => Promise<{ ok: boolean }>): Promise<{ ok: boolean }>; +>fanAll : Symbol(fanAll, Decl(circularReturnTypeThroughCallbackArgument.ts, 4, 1)) +>g : Symbol(g, Decl(circularReturnTypeThroughCallbackArgument.ts, 6, 24)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +>ok : Symbol(ok, Decl(circularReturnTypeThroughCallbackArgument.ts, 6, 42)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +>ok : Symbol(ok, Decl(circularReturnTypeThroughCallbackArgument.ts, 6, 69)) + +export async function b(n: number) { +>b : Symbol(b, Decl(circularReturnTypeThroughCallbackArgument.ts, 6, 85)) +>n : Symbol(n, Decl(circularReturnTypeThroughCallbackArgument.ts, 8, 24)) + + if (n > 0) { +>n : Symbol(n, Decl(circularReturnTypeThroughCallbackArgument.ts, 8, 24)) + + return fanAll(() => b(n - 1)); +>fanAll : Symbol(fanAll, Decl(circularReturnTypeThroughCallbackArgument.ts, 4, 1)) +>b : Symbol(b, Decl(circularReturnTypeThroughCallbackArgument.ts, 6, 85)) +>n : Symbol(n, Decl(circularReturnTypeThroughCallbackArgument.ts, 8, 24)) + } + return { ok: true }; +>ok : Symbol(ok, Decl(circularReturnTypeThroughCallbackArgument.ts, 12, 12)) +} + +type Result = { success: boolean; [key: string]: unknown }; +>Result : Symbol(Result, Decl(circularReturnTypeThroughCallbackArgument.ts, 13, 1)) +>success : Symbol(success, Decl(circularReturnTypeThroughCallbackArgument.ts, 15, 15)) +>key : Symbol(key, Decl(circularReturnTypeThroughCallbackArgument.ts, 15, 35)) + +interface Other { success: boolean; url: string } +>Other : Symbol(Other, Decl(circularReturnTypeThroughCallbackArgument.ts, 15, 59)) +>success : Symbol(Other.success, Decl(circularReturnTypeThroughCallbackArgument.ts, 16, 17)) +>url : Symbol(Other.url, Decl(circularReturnTypeThroughCallbackArgument.ts, 16, 35)) + +declare function fanOut(generateOne: () => Promise): Promise; +>fanOut : Symbol(fanOut, Decl(circularReturnTypeThroughCallbackArgument.ts, 16, 49)) +>generateOne : Symbol(generateOne, Decl(circularReturnTypeThroughCallbackArgument.ts, 17, 24)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +>Result : Symbol(Result, Decl(circularReturnTypeThroughCallbackArgument.ts, 13, 1)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +>Result : Symbol(Result, Decl(circularReturnTypeThroughCallbackArgument.ts, 13, 1)) + +declare const other: Other; +>other : Symbol(other, Decl(circularReturnTypeThroughCallbackArgument.ts, 18, 13)) +>Other : Symbol(Other, Decl(circularReturnTypeThroughCallbackArgument.ts, 15, 59)) + +export async function c(n: number) { +>c : Symbol(c, Decl(circularReturnTypeThroughCallbackArgument.ts, 18, 27)) +>n : Symbol(n, Decl(circularReturnTypeThroughCallbackArgument.ts, 20, 24)) + + if (n) return other; +>n : Symbol(n, Decl(circularReturnTypeThroughCallbackArgument.ts, 20, 24)) +>other : Symbol(other, Decl(circularReturnTypeThroughCallbackArgument.ts, 18, 13)) + + return fanOut(() => c(n - 1)); +>fanOut : Symbol(fanOut, Decl(circularReturnTypeThroughCallbackArgument.ts, 16, 49)) +>c : Symbol(c, Decl(circularReturnTypeThroughCallbackArgument.ts, 18, 27)) +>n : Symbol(n, Decl(circularReturnTypeThroughCallbackArgument.ts, 20, 24)) +} + diff --git a/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=false).types b/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=false).types new file mode 100644 index 0000000000000..c3e8f0316281f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=false).types @@ -0,0 +1,86 @@ +//// [tests/cases/compiler/circularReturnTypeThroughCallbackArgument.ts] //// + +=== circularReturnTypeThroughCallbackArgument.ts === +declare function fan(g: () => number): number; +>fan : (g: () => number) => number +>g : () => number + +export function a(n: number) { +>a : (n: number) => number +>n : number + + return fan(() => a(n)); +>fan(() => a(n)) : number +>fan : (g: () => number) => number +>() => a(n) : () => number +>a(n) : number +>a : (n: number) => number +>n : number +} + +declare function fanAll(g: () => Promise<{ ok: boolean }>): Promise<{ ok: boolean }>; +>fanAll : (g: () => Promise<{ ok: boolean; }>) => Promise<{ ok: boolean; }> +>g : () => Promise<{ ok: boolean; }> +>ok : boolean +>ok : boolean + +export async function b(n: number) { +>b : (n: number) => Promise<{ ok: boolean; }> +>n : number + + if (n > 0) { +>n > 0 : boolean +>n : number +>0 : 0 + + return fanAll(() => b(n - 1)); +>fanAll(() => b(n - 1)) : Promise<{ ok: boolean; }> +>fanAll : (g: () => Promise<{ ok: boolean; }>) => Promise<{ ok: boolean; }> +>() => b(n - 1) : () => Promise<{ ok: boolean; }> +>b(n - 1) : Promise<{ ok: boolean; }> +>b : (n: number) => Promise<{ ok: boolean; }> +>n - 1 : number +>n : number +>1 : 1 + } + return { ok: true }; +>{ ok: true } : { ok: boolean; } +>ok : boolean +>true : true +} + +type Result = { success: boolean; [key: string]: unknown }; +>Result : Result +>success : boolean +>key : string + +interface Other { success: boolean; url: string } +>success : boolean +>url : string + +declare function fanOut(generateOne: () => Promise): Promise; +>fanOut : (generateOne: () => Promise) => Promise +>generateOne : () => Promise + +declare const other: Other; +>other : Other + +export async function c(n: number) { +>c : (n: number) => Promise +>n : number + + if (n) return other; +>n : number +>other : Other + + return fanOut(() => c(n - 1)); +>fanOut(() => c(n - 1)) : Promise +>fanOut : (generateOne: () => Promise) => Promise +>() => c(n - 1) : () => Promise +>c(n - 1) : Promise +>c : (n: number) => Promise +>n - 1 : number +>n : number +>1 : 1 +} + diff --git a/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=true).errors.txt b/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=true).errors.txt new file mode 100644 index 0000000000000..3c7a84d051ca9 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=true).errors.txt @@ -0,0 +1,38 @@ +circularReturnTypeThroughCallbackArgument.ts(23,25): error TS2322: Type 'Promise' is not assignable to type 'Promise'. + Type 'Other | Result' is not assignable to type 'Result'. + Type 'Other' is not assignable to type 'Result'. + Index signature for type 'string' is missing in type 'Other'. + + +==== circularReturnTypeThroughCallbackArgument.ts (1 errors) ==== + declare function fan(g: () => number): number; + + export function a(n: number) { + return fan(() => a(n)); + } + + declare function fanAll(g: () => Promise<{ ok: boolean }>): Promise<{ ok: boolean }>; + + export async function b(n: number) { + if (n > 0) { + return fanAll(() => b(n - 1)); + } + return { ok: true }; + } + + type Result = { success: boolean; [key: string]: unknown }; + interface Other { success: boolean; url: string } + declare function fanOut(generateOne: () => Promise): Promise; + declare const other: Other; + + export async function c(n: number) { + if (n) return other; + return fanOut(() => c(n - 1)); + ~~~~~~~~ +!!! error TS2322: Type 'Promise' is not assignable to type 'Promise'. +!!! error TS2322: Type 'Other | Result' is not assignable to type 'Result'. +!!! error TS2322: Type 'Other' is not assignable to type 'Result'. +!!! error TS2322: Index signature for type 'string' is missing in type 'Other'. +!!! related TS6502 circularReturnTypeThroughCallbackArgument.ts:18:38: The expected type comes from the return type of this signature. + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=true).symbols b/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=true).symbols new file mode 100644 index 0000000000000..6db3b443be191 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=true).symbols @@ -0,0 +1,77 @@ +//// [tests/cases/compiler/circularReturnTypeThroughCallbackArgument.ts] //// + +=== circularReturnTypeThroughCallbackArgument.ts === +declare function fan(g: () => number): number; +>fan : Symbol(fan, Decl(circularReturnTypeThroughCallbackArgument.ts, 0, 0)) +>g : Symbol(g, Decl(circularReturnTypeThroughCallbackArgument.ts, 0, 21)) + +export function a(n: number) { +>a : Symbol(a, Decl(circularReturnTypeThroughCallbackArgument.ts, 0, 46)) +>n : Symbol(n, Decl(circularReturnTypeThroughCallbackArgument.ts, 2, 18)) + + return fan(() => a(n)); +>fan : Symbol(fan, Decl(circularReturnTypeThroughCallbackArgument.ts, 0, 0)) +>a : Symbol(a, Decl(circularReturnTypeThroughCallbackArgument.ts, 0, 46)) +>n : Symbol(n, Decl(circularReturnTypeThroughCallbackArgument.ts, 2, 18)) +} + +declare function fanAll(g: () => Promise<{ ok: boolean }>): Promise<{ ok: boolean }>; +>fanAll : Symbol(fanAll, Decl(circularReturnTypeThroughCallbackArgument.ts, 4, 1)) +>g : Symbol(g, Decl(circularReturnTypeThroughCallbackArgument.ts, 6, 24)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +>ok : Symbol(ok, Decl(circularReturnTypeThroughCallbackArgument.ts, 6, 42)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +>ok : Symbol(ok, Decl(circularReturnTypeThroughCallbackArgument.ts, 6, 69)) + +export async function b(n: number) { +>b : Symbol(b, Decl(circularReturnTypeThroughCallbackArgument.ts, 6, 85)) +>n : Symbol(n, Decl(circularReturnTypeThroughCallbackArgument.ts, 8, 24)) + + if (n > 0) { +>n : Symbol(n, Decl(circularReturnTypeThroughCallbackArgument.ts, 8, 24)) + + return fanAll(() => b(n - 1)); +>fanAll : Symbol(fanAll, Decl(circularReturnTypeThroughCallbackArgument.ts, 4, 1)) +>b : Symbol(b, Decl(circularReturnTypeThroughCallbackArgument.ts, 6, 85)) +>n : Symbol(n, Decl(circularReturnTypeThroughCallbackArgument.ts, 8, 24)) + } + return { ok: true }; +>ok : Symbol(ok, Decl(circularReturnTypeThroughCallbackArgument.ts, 12, 12)) +} + +type Result = { success: boolean; [key: string]: unknown }; +>Result : Symbol(Result, Decl(circularReturnTypeThroughCallbackArgument.ts, 13, 1)) +>success : Symbol(success, Decl(circularReturnTypeThroughCallbackArgument.ts, 15, 15)) +>key : Symbol(key, Decl(circularReturnTypeThroughCallbackArgument.ts, 15, 35)) + +interface Other { success: boolean; url: string } +>Other : Symbol(Other, Decl(circularReturnTypeThroughCallbackArgument.ts, 15, 59)) +>success : Symbol(Other.success, Decl(circularReturnTypeThroughCallbackArgument.ts, 16, 17)) +>url : Symbol(Other.url, Decl(circularReturnTypeThroughCallbackArgument.ts, 16, 35)) + +declare function fanOut(generateOne: () => Promise): Promise; +>fanOut : Symbol(fanOut, Decl(circularReturnTypeThroughCallbackArgument.ts, 16, 49)) +>generateOne : Symbol(generateOne, Decl(circularReturnTypeThroughCallbackArgument.ts, 17, 24)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +>Result : Symbol(Result, Decl(circularReturnTypeThroughCallbackArgument.ts, 13, 1)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +>Result : Symbol(Result, Decl(circularReturnTypeThroughCallbackArgument.ts, 13, 1)) + +declare const other: Other; +>other : Symbol(other, Decl(circularReturnTypeThroughCallbackArgument.ts, 18, 13)) +>Other : Symbol(Other, Decl(circularReturnTypeThroughCallbackArgument.ts, 15, 59)) + +export async function c(n: number) { +>c : Symbol(c, Decl(circularReturnTypeThroughCallbackArgument.ts, 18, 27)) +>n : Symbol(n, Decl(circularReturnTypeThroughCallbackArgument.ts, 20, 24)) + + if (n) return other; +>n : Symbol(n, Decl(circularReturnTypeThroughCallbackArgument.ts, 20, 24)) +>other : Symbol(other, Decl(circularReturnTypeThroughCallbackArgument.ts, 18, 13)) + + return fanOut(() => c(n - 1)); +>fanOut : Symbol(fanOut, Decl(circularReturnTypeThroughCallbackArgument.ts, 16, 49)) +>c : Symbol(c, Decl(circularReturnTypeThroughCallbackArgument.ts, 18, 27)) +>n : Symbol(n, Decl(circularReturnTypeThroughCallbackArgument.ts, 20, 24)) +} + diff --git a/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=true).types b/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=true).types new file mode 100644 index 0000000000000..c3e8f0316281f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=true).types @@ -0,0 +1,86 @@ +//// [tests/cases/compiler/circularReturnTypeThroughCallbackArgument.ts] //// + +=== circularReturnTypeThroughCallbackArgument.ts === +declare function fan(g: () => number): number; +>fan : (g: () => number) => number +>g : () => number + +export function a(n: number) { +>a : (n: number) => number +>n : number + + return fan(() => a(n)); +>fan(() => a(n)) : number +>fan : (g: () => number) => number +>() => a(n) : () => number +>a(n) : number +>a : (n: number) => number +>n : number +} + +declare function fanAll(g: () => Promise<{ ok: boolean }>): Promise<{ ok: boolean }>; +>fanAll : (g: () => Promise<{ ok: boolean; }>) => Promise<{ ok: boolean; }> +>g : () => Promise<{ ok: boolean; }> +>ok : boolean +>ok : boolean + +export async function b(n: number) { +>b : (n: number) => Promise<{ ok: boolean; }> +>n : number + + if (n > 0) { +>n > 0 : boolean +>n : number +>0 : 0 + + return fanAll(() => b(n - 1)); +>fanAll(() => b(n - 1)) : Promise<{ ok: boolean; }> +>fanAll : (g: () => Promise<{ ok: boolean; }>) => Promise<{ ok: boolean; }> +>() => b(n - 1) : () => Promise<{ ok: boolean; }> +>b(n - 1) : Promise<{ ok: boolean; }> +>b : (n: number) => Promise<{ ok: boolean; }> +>n - 1 : number +>n : number +>1 : 1 + } + return { ok: true }; +>{ ok: true } : { ok: boolean; } +>ok : boolean +>true : true +} + +type Result = { success: boolean; [key: string]: unknown }; +>Result : Result +>success : boolean +>key : string + +interface Other { success: boolean; url: string } +>success : boolean +>url : string + +declare function fanOut(generateOne: () => Promise): Promise; +>fanOut : (generateOne: () => Promise) => Promise +>generateOne : () => Promise + +declare const other: Other; +>other : Other + +export async function c(n: number) { +>c : (n: number) => Promise +>n : number + + if (n) return other; +>n : number +>other : Other + + return fanOut(() => c(n - 1)); +>fanOut(() => c(n - 1)) : Promise +>fanOut : (generateOne: () => Promise) => Promise +>() => c(n - 1) : () => Promise +>c(n - 1) : Promise +>c : (n: number) => Promise +>n - 1 : number +>n : number +>1 : 1 +} + diff --git a/tsc/testdata/tests/cases/compiler/circularReturnTypeThroughCallbackArgument.ts b/tsc/testdata/tests/cases/compiler/circularReturnTypeThroughCallbackArgument.ts new file mode 100644 index 0000000000000..209bc9616d71d --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/circularReturnTypeThroughCallbackArgument.ts @@ -0,0 +1,27 @@ +// @strict: true,false +// @noEmit: true + +declare function fan(g: () => number): number; + +export function a(n: number) { + return fan(() => a(n)); +} + +declare function fanAll(g: () => Promise<{ ok: boolean }>): Promise<{ ok: boolean }>; + +export async function b(n: number) { + if (n > 0) { + return fanAll(() => b(n - 1)); + } + return { ok: true }; +} + +type Result = { success: boolean; [key: string]: unknown }; +interface Other { success: boolean; url: string } +declare function fanOut(generateOne: () => Promise): Promise; +declare const other: Other; + +export async function c(n: number) { + if (n) return other; + return fanOut(() => c(n - 1)); +} From b798d522c9609fd72b37d7563161576547f5b784 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sat, 31 Oct 2026 21:32:24 -0700 Subject: [PATCH 154/194] Infer contextual return types without marking them in progress Contextually checking a function expression infers its return type from its body. Since "Discard results derived from computations in progress", that inference was pushed as a return type resolution of the function's signature. When the body calls a function whose return type depends on the call enclosing the function expression, resolving that call relates the function expression's signature, which requests its return type. Seeing it in progress, that request returned any without detecting a cycle, so the enclosing function's return type was inferred from a provisional any instead of reporting the circularity. The inference now runs without marking the signature in progress, as in TypeScript. The nested request computes the return type itself, reaches the enclosing function, and the cycle is reported on both as before. The result is cached only if no request has already cached one, so whichever request finishes first decides it, the same as when the return type is requested directly. --- tsc/internal/checker/checker.go | 7 +--- ...hCallbackArgument(strict=false).errors.txt | 38 ------------------- ...hroughCallbackArgument(strict=false).types | 24 ++++++------ ...ghCallbackArgument(strict=true).errors.txt | 30 +++++++++------ ...ThroughCallbackArgument(strict=true).types | 24 ++++++------ 5 files changed, 44 insertions(+), 79 deletions(-) delete mode 100644 tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=false).errors.txt diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 3c67d50125412..08c9ee8e02cb9 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -10782,15 +10782,10 @@ func (c *Checker) contextuallyCheckFunctionExpressionOrObjectLiteralMethodUncach // The return type is inferred now, while the contextual types of the // function's enclosing expressions are in place; a later request may // come from where they are not. - if contextualSignature != nil && checkMode&^CheckModeTypeOnly == CheckModeNormal && c.getReturnTypeFromAnnotation(node) == nil && !c.isResolvingReturnTypeOfSignature(signature) { - c.getReturnTypeOfSignature(signature) - } else if contextualSignature != nil && c.getReturnTypeFromAnnotation(node) == nil && signature.resolvedReturnType.get(c) == nil && !c.isResolvingReturnTypeOfSignature(signature) && c.pushTypeResolution(signature, TypeSystemPropertyNameResolvedReturnType) { + if contextualSignature != nil && c.getReturnTypeFromAnnotation(node) == nil && signature.resolvedReturnType.get(c) == nil && !c.isResolvingReturnTypeOfSignature(signature) { // resolvedReturnType is cached indefinitely, so the return type here has to be computed without CheckModeSkipContextSensitive; // otherwise anyFunctionType could leak as part of the computed (and cached) return type. returnType := c.getReturnTypeFromBody(node, checkMode&^CheckModeSkipContextSensitive) - if !c.popTypeResolution() { - returnType = c.circularReturnType(signature) - } if signature.resolvedReturnType.get(c) == nil { signature.resolvedReturnType.set(c, returnType) } diff --git a/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=false).errors.txt b/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=false).errors.txt deleted file mode 100644 index 3c7a84d051ca9..0000000000000 --- a/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=false).errors.txt +++ /dev/null @@ -1,38 +0,0 @@ -circularReturnTypeThroughCallbackArgument.ts(23,25): error TS2322: Type 'Promise' is not assignable to type 'Promise'. - Type 'Other | Result' is not assignable to type 'Result'. - Type 'Other' is not assignable to type 'Result'. - Index signature for type 'string' is missing in type 'Other'. - - -==== circularReturnTypeThroughCallbackArgument.ts (1 errors) ==== - declare function fan(g: () => number): number; - - export function a(n: number) { - return fan(() => a(n)); - } - - declare function fanAll(g: () => Promise<{ ok: boolean }>): Promise<{ ok: boolean }>; - - export async function b(n: number) { - if (n > 0) { - return fanAll(() => b(n - 1)); - } - return { ok: true }; - } - - type Result = { success: boolean; [key: string]: unknown }; - interface Other { success: boolean; url: string } - declare function fanOut(generateOne: () => Promise): Promise; - declare const other: Other; - - export async function c(n: number) { - if (n) return other; - return fanOut(() => c(n - 1)); - ~~~~~~~~ -!!! error TS2322: Type 'Promise' is not assignable to type 'Promise'. -!!! error TS2322: Type 'Other | Result' is not assignable to type 'Result'. -!!! error TS2322: Type 'Other' is not assignable to type 'Result'. -!!! error TS2322: Index signature for type 'string' is missing in type 'Other'. -!!! related TS6502 circularReturnTypeThroughCallbackArgument.ts:18:38: The expected type comes from the return type of this signature. - } - \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=false).types b/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=false).types index c3e8f0316281f..fb9e85bf2b1d7 100644 --- a/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=false).types +++ b/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=false).types @@ -6,15 +6,15 @@ declare function fan(g: () => number): number; >g : () => number export function a(n: number) { ->a : (n: number) => number +>a : (n: number) => any >n : number return fan(() => a(n)); >fan(() => a(n)) : number >fan : (g: () => number) => number ->() => a(n) : () => number ->a(n) : number ->a : (n: number) => number +>() => a(n) : () => any +>a(n) : any +>a : (n: number) => any >n : number } @@ -25,7 +25,7 @@ declare function fanAll(g: () => Promise<{ ok: boolean }>): Promise<{ ok: boolea >ok : boolean export async function b(n: number) { ->b : (n: number) => Promise<{ ok: boolean; }> +>b : (n: number) => any >n : number if (n > 0) { @@ -36,9 +36,9 @@ export async function b(n: number) { return fanAll(() => b(n - 1)); >fanAll(() => b(n - 1)) : Promise<{ ok: boolean; }> >fanAll : (g: () => Promise<{ ok: boolean; }>) => Promise<{ ok: boolean; }> ->() => b(n - 1) : () => Promise<{ ok: boolean; }> ->b(n - 1) : Promise<{ ok: boolean; }> ->b : (n: number) => Promise<{ ok: boolean; }> +>() => b(n - 1) : () => any +>b(n - 1) : any +>b : (n: number) => any >n - 1 : number >n : number >1 : 1 @@ -66,7 +66,7 @@ declare const other: Other; >other : Other export async function c(n: number) { ->c : (n: number) => Promise +>c : (n: number) => any >n : number if (n) return other; @@ -76,9 +76,9 @@ export async function c(n: number) { return fanOut(() => c(n - 1)); >fanOut(() => c(n - 1)) : Promise >fanOut : (generateOne: () => Promise) => Promise ->() => c(n - 1) : () => Promise ->c(n - 1) : Promise ->c : (n: number) => Promise +>() => c(n - 1) : () => any +>c(n - 1) : any +>c : (n: number) => any >n - 1 : number >n : number >1 : 1 diff --git a/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=true).errors.txt b/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=true).errors.txt index 3c7a84d051ca9..a10fc6bcbe59c 100644 --- a/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=true).errors.txt +++ b/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=true).errors.txt @@ -1,21 +1,31 @@ -circularReturnTypeThroughCallbackArgument.ts(23,25): error TS2322: Type 'Promise' is not assignable to type 'Promise'. - Type 'Other | Result' is not assignable to type 'Result'. - Type 'Other' is not assignable to type 'Result'. - Index signature for type 'string' is missing in type 'Other'. +circularReturnTypeThroughCallbackArgument.ts(3,17): error TS7023: 'a' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. +circularReturnTypeThroughCallbackArgument.ts(4,16): error TS7024: Function implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. +circularReturnTypeThroughCallbackArgument.ts(9,23): error TS7023: 'b' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. +circularReturnTypeThroughCallbackArgument.ts(11,23): error TS7024: Function implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. +circularReturnTypeThroughCallbackArgument.ts(21,23): error TS7023: 'c' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. +circularReturnTypeThroughCallbackArgument.ts(23,19): error TS7024: Function implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. -==== circularReturnTypeThroughCallbackArgument.ts (1 errors) ==== +==== circularReturnTypeThroughCallbackArgument.ts (6 errors) ==== declare function fan(g: () => number): number; export function a(n: number) { + ~ +!!! error TS7023: 'a' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. return fan(() => a(n)); + ~~~~~~~~~~ +!!! error TS7024: Function implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. } declare function fanAll(g: () => Promise<{ ok: boolean }>): Promise<{ ok: boolean }>; export async function b(n: number) { + ~ +!!! error TS7023: 'b' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. if (n > 0) { return fanAll(() => b(n - 1)); + ~~~~~~~~~~~~~~ +!!! error TS7024: Function implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. } return { ok: true }; } @@ -26,13 +36,11 @@ circularReturnTypeThroughCallbackArgument.ts(23,25): error TS2322: Type 'Promise declare const other: Other; export async function c(n: number) { + ~ +!!! error TS7023: 'c' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. if (n) return other; return fanOut(() => c(n - 1)); - ~~~~~~~~ -!!! error TS2322: Type 'Promise' is not assignable to type 'Promise'. -!!! error TS2322: Type 'Other | Result' is not assignable to type 'Result'. -!!! error TS2322: Type 'Other' is not assignable to type 'Result'. -!!! error TS2322: Index signature for type 'string' is missing in type 'Other'. -!!! related TS6502 circularReturnTypeThroughCallbackArgument.ts:18:38: The expected type comes from the return type of this signature. + ~~~~~~~~~~~~~~ +!!! error TS7024: Function implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. } \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=true).types b/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=true).types index c3e8f0316281f..fb9e85bf2b1d7 100644 --- a/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=true).types +++ b/tsc/testdata/baselines/reference/compiler/circularReturnTypeThroughCallbackArgument(strict=true).types @@ -6,15 +6,15 @@ declare function fan(g: () => number): number; >g : () => number export function a(n: number) { ->a : (n: number) => number +>a : (n: number) => any >n : number return fan(() => a(n)); >fan(() => a(n)) : number >fan : (g: () => number) => number ->() => a(n) : () => number ->a(n) : number ->a : (n: number) => number +>() => a(n) : () => any +>a(n) : any +>a : (n: number) => any >n : number } @@ -25,7 +25,7 @@ declare function fanAll(g: () => Promise<{ ok: boolean }>): Promise<{ ok: boolea >ok : boolean export async function b(n: number) { ->b : (n: number) => Promise<{ ok: boolean; }> +>b : (n: number) => any >n : number if (n > 0) { @@ -36,9 +36,9 @@ export async function b(n: number) { return fanAll(() => b(n - 1)); >fanAll(() => b(n - 1)) : Promise<{ ok: boolean; }> >fanAll : (g: () => Promise<{ ok: boolean; }>) => Promise<{ ok: boolean; }> ->() => b(n - 1) : () => Promise<{ ok: boolean; }> ->b(n - 1) : Promise<{ ok: boolean; }> ->b : (n: number) => Promise<{ ok: boolean; }> +>() => b(n - 1) : () => any +>b(n - 1) : any +>b : (n: number) => any >n - 1 : number >n : number >1 : 1 @@ -66,7 +66,7 @@ declare const other: Other; >other : Other export async function c(n: number) { ->c : (n: number) => Promise +>c : (n: number) => any >n : number if (n) return other; @@ -76,9 +76,9 @@ export async function c(n: number) { return fanOut(() => c(n - 1)); >fanOut(() => c(n - 1)) : Promise >fanOut : (generateOne: () => Promise) => Promise ->() => c(n - 1) : () => Promise ->c(n - 1) : Promise ->c : (n: number) => Promise +>() => c(n - 1) : () => any +>c(n - 1) : any +>c : (n: number) => any >n - 1 : number >n : number >1 : 1 From 8ac3c5a1e48c2b5346d5b2e98ea4a53780a52ef4 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sat, 31 Oct 2026 22:00:16 -0700 Subject: [PATCH 155/194] Add test for return type cycles through subtype reduction Inferring a method's return type as a union of the class's this type and an interface relates the class to the interface, which needs the return types of the other methods. When one of those calls back into the first method, the return types form a cycle, and which members report it depends on which return type is requested first. TypeScript reports the cycle on both methods when the class declaration is checked before its use. When the class is first related to the interface, the method calling back is computed first, sees the other in progress, and both are inferred without error. This branch discards results that observed a computation in progress, so the latter recomputes from the other entry and reports the cycle (seen in effect's SchemaAST). --- ...ReturnTypeSubtypeReductionOrder.errors.txt | 55 ++++++++++++ ...larReturnTypeSubtypeReductionOrder.symbols | 89 +++++++++++++++++++ ...cularReturnTypeSubtypeReductionOrder.types | 87 ++++++++++++++++++ ...circularReturnTypeSubtypeReductionOrder.ts | 41 +++++++++ 4 files changed, 272 insertions(+) create mode 100644 tsc/testdata/baselines/reference/compiler/circularReturnTypeSubtypeReductionOrder.errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/circularReturnTypeSubtypeReductionOrder.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/circularReturnTypeSubtypeReductionOrder.types create mode 100644 tsc/testdata/tests/cases/compiler/circularReturnTypeSubtypeReductionOrder.ts diff --git a/tsc/testdata/baselines/reference/compiler/circularReturnTypeSubtypeReductionOrder.errors.txt b/tsc/testdata/baselines/reference/compiler/circularReturnTypeSubtypeReductionOrder.errors.txt new file mode 100644 index 0000000000000..f29d937312390 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularReturnTypeSubtypeReductionOrder.errors.txt @@ -0,0 +1,55 @@ +expression.ts(9,7): error TS2322: Type 'typeof A' is not assignable to type 'new () => A'. + Type 'A' is not assignable to type 'A'. Two different types with this name exist, but they are unrelated. + Types of property 'c' are incompatible. + Type '() => () => any' is not assignable to type 'A'. +expression.ts(10,5): error TS7023: 'rebuild' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. +expression.ts(13,5): error TS7023: 'b' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. + + +==== expression.ts (3 errors) ==== + // Subtype reduction of rebuild's return type relates the class to A, + // which needs b's return type, which needs rebuild's: a cycle. Which + // members report it depends on which return type is requested first. + interface A { + b(): A; + c: A; + } + declare const flag: boolean; + const A: new () => A = class { + ~ +!!! error TS2322: Type 'typeof A' is not assignable to type 'new () => A'. +!!! error TS2322: Type 'A' is not assignable to type 'A'. Two different types with this name exist, but they are unrelated. +!!! error TS2322: Types of property 'c' are incompatible. +!!! error TS2322: Type '() => () => any' is not assignable to type 'A'. + rebuild() { + ~~~~~~~ +!!! error TS7023: 'rebuild' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. + return flag ? this : new A(); + } + b() { + ~ +!!! error TS7023: 'b' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. + return this.rebuild(); + } + c() { + return this.rebuild; + } + }; + export {}; + +==== declaration.ts (0 errors) ==== + interface B { + b(): B; + } + declare const flag: boolean; + class K { + rebuild() { + return flag ? this : new B(); + } + b() { + return this.rebuild(); + } + } + const B: new () => B = K; + export {}; + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/circularReturnTypeSubtypeReductionOrder.symbols b/tsc/testdata/baselines/reference/compiler/circularReturnTypeSubtypeReductionOrder.symbols new file mode 100644 index 0000000000000..4a139c664483d --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularReturnTypeSubtypeReductionOrder.symbols @@ -0,0 +1,89 @@ +//// [tests/cases/compiler/circularReturnTypeSubtypeReductionOrder.ts] //// + +=== expression.ts === +// Subtype reduction of rebuild's return type relates the class to A, +// which needs b's return type, which needs rebuild's: a cycle. Which +// members report it depends on which return type is requested first. +interface A { +>A : Symbol(A, Decl(expression.ts, 0, 0), Decl(expression.ts, 8, 5)) + + b(): A; +>b : Symbol(A.b, Decl(expression.ts, 3, 13)) +>A : Symbol(A, Decl(expression.ts, 0, 0), Decl(expression.ts, 8, 5)) + + c: A; +>c : Symbol(A.c, Decl(expression.ts, 4, 11)) +>A : Symbol(A, Decl(expression.ts, 0, 0), Decl(expression.ts, 8, 5)) +} +declare const flag: boolean; +>flag : Symbol(flag, Decl(expression.ts, 7, 13)) + +const A: new () => A = class { +>A : Symbol(A, Decl(expression.ts, 0, 0), Decl(expression.ts, 8, 5)) +>A : Symbol(A, Decl(expression.ts, 0, 0), Decl(expression.ts, 8, 5)) + + rebuild() { +>rebuild : Symbol(A.rebuild, Decl(expression.ts, 8, 30)) + + return flag ? this : new A(); +>flag : Symbol(flag, Decl(expression.ts, 7, 13)) +>this : Symbol(A, Decl(expression.ts, 8, 22)) +>A : Symbol(A, Decl(expression.ts, 0, 0), Decl(expression.ts, 8, 5)) + } + b() { +>b : Symbol(A.b, Decl(expression.ts, 11, 5)) + + return this.rebuild(); +>this.rebuild : Symbol(A.rebuild, Decl(expression.ts, 8, 30)) +>this : Symbol(A, Decl(expression.ts, 8, 22)) +>rebuild : Symbol(A.rebuild, Decl(expression.ts, 8, 30)) + } + c() { +>c : Symbol(A.c, Decl(expression.ts, 14, 5)) + + return this.rebuild; +>this.rebuild : Symbol(A.rebuild, Decl(expression.ts, 8, 30)) +>this : Symbol(A, Decl(expression.ts, 8, 22)) +>rebuild : Symbol(A.rebuild, Decl(expression.ts, 8, 30)) + } +}; +export {}; + +=== declaration.ts === +interface B { +>B : Symbol(B, Decl(declaration.ts, 0, 0), Decl(declaration.ts, 12, 5)) + + b(): B; +>b : Symbol(B.b, Decl(declaration.ts, 0, 13)) +>B : Symbol(B, Decl(declaration.ts, 0, 0), Decl(declaration.ts, 12, 5)) +} +declare const flag: boolean; +>flag : Symbol(flag, Decl(declaration.ts, 3, 13)) + +class K { +>K : Symbol(K, Decl(declaration.ts, 3, 28)) + + rebuild() { +>rebuild : Symbol(K.rebuild, Decl(declaration.ts, 4, 9)) + + return flag ? this : new B(); +>flag : Symbol(flag, Decl(declaration.ts, 3, 13)) +>this : Symbol(K, Decl(declaration.ts, 3, 28)) +>B : Symbol(B, Decl(declaration.ts, 0, 0), Decl(declaration.ts, 12, 5)) + } + b() { +>b : Symbol(K.b, Decl(declaration.ts, 7, 5)) + + return this.rebuild(); +>this.rebuild : Symbol(K.rebuild, Decl(declaration.ts, 4, 9)) +>this : Symbol(K, Decl(declaration.ts, 3, 28)) +>rebuild : Symbol(K.rebuild, Decl(declaration.ts, 4, 9)) + } +} +const B: new () => B = K; +>B : Symbol(B, Decl(declaration.ts, 0, 0), Decl(declaration.ts, 12, 5)) +>B : Symbol(B, Decl(declaration.ts, 0, 0), Decl(declaration.ts, 12, 5)) +>K : Symbol(K, Decl(declaration.ts, 3, 28)) + +export {}; + diff --git a/tsc/testdata/baselines/reference/compiler/circularReturnTypeSubtypeReductionOrder.types b/tsc/testdata/baselines/reference/compiler/circularReturnTypeSubtypeReductionOrder.types new file mode 100644 index 0000000000000..422aad25870de --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularReturnTypeSubtypeReductionOrder.types @@ -0,0 +1,87 @@ +//// [tests/cases/compiler/circularReturnTypeSubtypeReductionOrder.ts] //// + +=== expression.ts === +// Subtype reduction of rebuild's return type relates the class to A, +// which needs b's return type, which needs rebuild's: a cycle. Which +// members report it depends on which return type is requested first. +interface A { + b(): A; +>b : () => A + + c: A; +>c : A +} +declare const flag: boolean; +>flag : boolean + +const A: new () => A = class { +>A : new () => A +>class { rebuild() { return flag ? this : new A(); } b() { return this.rebuild(); } c() { return this.rebuild; }} : typeof A + + rebuild() { +>rebuild : () => any + + return flag ? this : new A(); +>flag ? this : new A() : this | A +>flag : boolean +>this : this +>new A() : A +>A : new () => A + } + b() { +>b : () => any + + return this.rebuild(); +>this.rebuild() : any +>this.rebuild : () => any +>this : this +>rebuild : () => any + } + c() { +>c : () => () => any + + return this.rebuild; +>this.rebuild : () => any +>this : this +>rebuild : () => any + } +}; +export {}; + +=== declaration.ts === +interface B { + b(): B; +>b : () => B +} +declare const flag: boolean; +>flag : boolean + +class K { +>K : K + + rebuild() { +>rebuild : () => B + + return flag ? this : new B(); +>flag ? this : new B() : B +>flag : boolean +>this : this +>new B() : B +>B : new () => B + } + b() { +>b : () => B + + return this.rebuild(); +>this.rebuild() : B +>this.rebuild : () => B +>this : this +>rebuild : () => B + } +} +const B: new () => B = K; +>B : new () => B +>K : typeof K + +export {}; + diff --git a/tsc/testdata/tests/cases/compiler/circularReturnTypeSubtypeReductionOrder.ts b/tsc/testdata/tests/cases/compiler/circularReturnTypeSubtypeReductionOrder.ts new file mode 100644 index 0000000000000..760fb775fc68e --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/circularReturnTypeSubtypeReductionOrder.ts @@ -0,0 +1,41 @@ +// @strict: true +// @target: esnext +// @noEmit: true + +// @filename: expression.ts +// Subtype reduction of rebuild's return type relates the class to A, +// which needs b's return type, which needs rebuild's: a cycle. Which +// members report it depends on which return type is requested first. +interface A { + b(): A; + c: A; +} +declare const flag: boolean; +const A: new () => A = class { + rebuild() { + return flag ? this : new A(); + } + b() { + return this.rebuild(); + } + c() { + return this.rebuild; + } +}; +export {}; + +// @filename: declaration.ts +interface B { + b(): B; +} +declare const flag: boolean; +class K { + rebuild() { + return flag ? this : new B(); + } + b() { + return this.rebuild(); + } +} +const B: new () => B = K; +export {}; From 0986b8266fafa4be28c120dd4fb1759d0939987d Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sat, 31 Oct 2026 23:45:40 -0700 Subject: [PATCH 156/194] Add test for JSDoc type tags on contextually typed functions In JavaScript, a @type tag on a function expression gives the types of its parameters, even where the function also has a contextual type. The baselines record this branch's current output, which types the parameters from the contextual type instead (seen in webpack). --- ...eTagOnContextuallyTypedFunction.errors.txt | 43 ++++++++++++++++++ ...TypeTagOnContextuallyTypedFunction.symbols | 32 +++++++++++++ ...ocTypeTagOnContextuallyTypedFunction.types | 45 +++++++++++++++++++ ...jsdocTypeTagOnContextuallyTypedFunction.ts | 17 +++++++ 4 files changed, 137 insertions(+) create mode 100644 tsc/testdata/baselines/reference/compiler/jsdocTypeTagOnContextuallyTypedFunction.errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/jsdocTypeTagOnContextuallyTypedFunction.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/jsdocTypeTagOnContextuallyTypedFunction.types create mode 100644 tsc/testdata/tests/cases/compiler/jsdocTypeTagOnContextuallyTypedFunction.ts diff --git a/tsc/testdata/baselines/reference/compiler/jsdocTypeTagOnContextuallyTypedFunction.errors.txt b/tsc/testdata/baselines/reference/compiler/jsdocTypeTagOnContextuallyTypedFunction.errors.txt new file mode 100644 index 0000000000000..f19e5b3afede1 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/jsdocTypeTagOnContextuallyTypedFunction.errors.txt @@ -0,0 +1,43 @@ +a.js(4,1): error TS2322: Type '(content: string, rest_0?: boolean | undefined) => string' is not assignable to type '(a: string | number, ...rest: unknown[]) => string'. + Types of parameters 'content' and 'a' are incompatible. + Type 'string | number' is not assignable to type 'string'. + Type 'number' is not assignable to type 'string'. +a.js(6,35): error TS2339: Property 'toUpperCase' does not exist on type 'string | number'. + Property 'toUpperCase' does not exist on type 'number'. +a.js(9,7): error TS2322: Type '(content: string) => string' is not assignable to type '(content: string | number) => string'. + Types of parameters 'content' and 'content' are incompatible. + Type 'string | number' is not assignable to type 'string'. + Type 'number' is not assignable to type 'string'. +a.js(11,26): error TS2339: Property 'toUpperCase' does not exist on type 'string | number'. + Property 'toUpperCase' does not exist on type 'number'. + + +==== a.js (4 errors) ==== + /** @type {{ f: (a: string | number, ...rest: unknown[]) => string }} */ + const context = { f: (a) => "" }; + + context.f = + ~~~~~~~~~ +!!! error TS2322: Type '(content: string, rest_0?: boolean | undefined) => string' is not assignable to type '(a: string | number, ...rest: unknown[]) => string'. +!!! error TS2322: Types of parameters 'content' and 'a' are incompatible. +!!! error TS2322: Type 'string | number' is not assignable to type 'string'. +!!! error TS2322: Type 'number' is not assignable to type 'string'. + /** @type {(content: string, ...rest: [boolean?]) => string} */ + (content, ...rest) => content.toUpperCase() + rest.length; + ~~~~~~~~~~~ +!!! error TS2339: Property 'toUpperCase' does not exist on type 'string | number'. +!!! error TS2339: Property 'toUpperCase' does not exist on type 'number'. + + /** @type {(content: string | number) => string} */ + const g = + ~ +!!! error TS2322: Type '(content: string) => string' is not assignable to type '(content: string | number) => string'. +!!! error TS2322: Types of parameters 'content' and 'content' are incompatible. +!!! error TS2322: Type 'string | number' is not assignable to type 'string'. +!!! error TS2322: Type 'number' is not assignable to type 'string'. + /** @type {(content: string) => string} */ + (content) => content.toUpperCase(); + ~~~~~~~~~~~ +!!! error TS2339: Property 'toUpperCase' does not exist on type 'string | number'. +!!! error TS2339: Property 'toUpperCase' does not exist on type 'number'. + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/jsdocTypeTagOnContextuallyTypedFunction.symbols b/tsc/testdata/baselines/reference/compiler/jsdocTypeTagOnContextuallyTypedFunction.symbols new file mode 100644 index 0000000000000..17ba749362f25 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/jsdocTypeTagOnContextuallyTypedFunction.symbols @@ -0,0 +1,32 @@ +//// [tests/cases/compiler/jsdocTypeTagOnContextuallyTypedFunction.ts] //// + +=== a.js === +/** @type {{ f: (a: string | number, ...rest: unknown[]) => string }} */ +const context = { f: (a) => "" }; +>context : Symbol(context, Decl(a.js, 1, 5)) +>f : Symbol(f, Decl(a.js, 1, 17)) +>a : Symbol(a, Decl(a.js, 1, 22)) + +context.f = +>context.f : Symbol(f, Decl(a.js, 0, 12)) +>context : Symbol(context, Decl(a.js, 1, 5)) +>f : Symbol(f, Decl(a.js, 0, 12)) + + /** @type {(content: string, ...rest: [boolean?]) => string} */ + (content, ...rest) => content.toUpperCase() + rest.length; +>content : Symbol(content, Decl(a.js, 5, 5)) +>rest : Symbol(rest, Decl(a.js, 5, 13)) +>content : Symbol(content, Decl(a.js, 5, 5)) +>rest.length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --)) +>rest : Symbol(rest, Decl(a.js, 5, 13)) +>length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --)) + +/** @type {(content: string | number) => string} */ +const g = +>g : Symbol(g, Decl(a.js, 8, 5)) + + /** @type {(content: string) => string} */ + (content) => content.toUpperCase(); +>content : Symbol(content, Decl(a.js, 10, 5)) +>content : Symbol(content, Decl(a.js, 10, 5)) + diff --git a/tsc/testdata/baselines/reference/compiler/jsdocTypeTagOnContextuallyTypedFunction.types b/tsc/testdata/baselines/reference/compiler/jsdocTypeTagOnContextuallyTypedFunction.types new file mode 100644 index 0000000000000..7511697864aa1 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/jsdocTypeTagOnContextuallyTypedFunction.types @@ -0,0 +1,45 @@ +//// [tests/cases/compiler/jsdocTypeTagOnContextuallyTypedFunction.ts] //// + +=== a.js === +/** @type {{ f: (a: string | number, ...rest: unknown[]) => string }} */ +const context = { f: (a) => "" }; +>context : { f: (a: string | number, ...rest: unknown[]) => string; } +>{ f: (a) => "" } : { f: (a: string | number) => string; } +>f : (a: string | number) => string +>(a) => "" : (a: string | number) => string +>a : string | number +>"" : "" + +context.f = +>context.f = /** @type {(content: string, ...rest: [boolean?]) => string} */ (content, ...rest) => content.toUpperCase() + rest.length : (content: string, rest_0?: boolean | undefined) => string +>context.f : (a: string | number, ...rest: unknown[]) => string +>context : { f: (a: string | number, ...rest: unknown[]) => string; } +>f : (a: string | number, ...rest: unknown[]) => string + + /** @type {(content: string, ...rest: [boolean?]) => string} */ + (content, ...rest) => content.toUpperCase() + rest.length; +>(content, ...rest) => content.toUpperCase() + rest.length : (content: string, rest_0?: boolean | undefined) => string +>content : string | number +>rest : unknown[] +>content.toUpperCase() + rest.length : any +>content.toUpperCase() : any +>content.toUpperCase : any +>content : string | number +>toUpperCase : any +>rest.length : number +>rest : unknown[] +>length : number + +/** @type {(content: string | number) => string} */ +const g = +>g : (content: string | number) => string + + /** @type {(content: string) => string} */ + (content) => content.toUpperCase(); +>(content) => content.toUpperCase() : (content: string) => string +>content : string | number +>content.toUpperCase() : any +>content.toUpperCase : any +>content : string | number +>toUpperCase : any + diff --git a/tsc/testdata/tests/cases/compiler/jsdocTypeTagOnContextuallyTypedFunction.ts b/tsc/testdata/tests/cases/compiler/jsdocTypeTagOnContextuallyTypedFunction.ts new file mode 100644 index 0000000000000..fdf0661ace752 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/jsdocTypeTagOnContextuallyTypedFunction.ts @@ -0,0 +1,17 @@ +// @allowJs: true +// @checkJs: true +// @noEmit: true +// @strict: true + +// @filename: a.js +/** @type {{ f: (a: string | number, ...rest: unknown[]) => string }} */ +const context = { f: (a) => "" }; + +context.f = + /** @type {(content: string, ...rest: [boolean?]) => string} */ + (content, ...rest) => content.toUpperCase() + rest.length; + +/** @type {(content: string | number) => string} */ +const g = + /** @type {(content: string) => string} */ + (content) => content.toUpperCase(); From 63c32ab77f08576393209ffddb9f2bae6cad4aac Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sat, 31 Oct 2026 23:48:50 -0700 Subject: [PATCH 157/194] Use JSDoc type tags when assigning contextual parameter types Completing contextual signatures eagerly switched parameter assignment from the signature of the function's symbol to the signature built from its declaration. In JavaScript the symbol's signature comes from a @type tag when one is present, and the function's parameters take their types from that tag. Using the declaration's signature wrote the outer contextual types onto those parameters instead, producing errors inside the function body that the tag rules out. Prefer the tag's signature, as before, and fall back to the declaration's signature otherwise. --- tsc/internal/checker/checker.go | 7 ++++- ...eTagOnContextuallyTypedFunction.errors.txt | 12 +------- ...TypeTagOnContextuallyTypedFunction.symbols | 8 +++-- ...ocTypeTagOnContextuallyTypedFunction.types | 30 +++++++++---------- 4 files changed, 28 insertions(+), 29 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 08c9ee8e02cb9..8a0cf256f3467 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -10813,7 +10813,12 @@ func (c *Checker) assignContextualParameterTypesOfFunctionUncached(node *ast.Nod // already assigned contextual types. if links.flags&NodeCheckFlagsContextChecked == 0 { setFlagMemoBits(c, memoKeyOf(node, memoContextualParameters), &links.flags, NodeCheckFlagsContextChecked, NodeCheckFlagsContextChecked) - signature := c.getSignatureFromDeclarationUncontextual(node) + // A JSDoc @type tag on the function supplies the signature of its + // symbol, and the types of its parameters. + signature := c.getSignatureOfFullSignatureType(node) + if signature == nil { + signature = c.getSignatureFromDeclarationUncontextual(node) + } c.pushTypeResolution(node, TypeSystemPropertyNameContextChecked) if c.isContextSensitive(node) { if contextualSignature != nil { diff --git a/tsc/testdata/baselines/reference/compiler/jsdocTypeTagOnContextuallyTypedFunction.errors.txt b/tsc/testdata/baselines/reference/compiler/jsdocTypeTagOnContextuallyTypedFunction.errors.txt index f19e5b3afede1..f9f9a2d8d5885 100644 --- a/tsc/testdata/baselines/reference/compiler/jsdocTypeTagOnContextuallyTypedFunction.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/jsdocTypeTagOnContextuallyTypedFunction.errors.txt @@ -2,17 +2,13 @@ a.js(4,1): error TS2322: Type '(content: string, rest_0?: boolean | undefined) = Types of parameters 'content' and 'a' are incompatible. Type 'string | number' is not assignable to type 'string'. Type 'number' is not assignable to type 'string'. -a.js(6,35): error TS2339: Property 'toUpperCase' does not exist on type 'string | number'. - Property 'toUpperCase' does not exist on type 'number'. a.js(9,7): error TS2322: Type '(content: string) => string' is not assignable to type '(content: string | number) => string'. Types of parameters 'content' and 'content' are incompatible. Type 'string | number' is not assignable to type 'string'. Type 'number' is not assignable to type 'string'. -a.js(11,26): error TS2339: Property 'toUpperCase' does not exist on type 'string | number'. - Property 'toUpperCase' does not exist on type 'number'. -==== a.js (4 errors) ==== +==== a.js (2 errors) ==== /** @type {{ f: (a: string | number, ...rest: unknown[]) => string }} */ const context = { f: (a) => "" }; @@ -24,9 +20,6 @@ a.js(11,26): error TS2339: Property 'toUpperCase' does not exist on type 'string !!! error TS2322: Type 'number' is not assignable to type 'string'. /** @type {(content: string, ...rest: [boolean?]) => string} */ (content, ...rest) => content.toUpperCase() + rest.length; - ~~~~~~~~~~~ -!!! error TS2339: Property 'toUpperCase' does not exist on type 'string | number'. -!!! error TS2339: Property 'toUpperCase' does not exist on type 'number'. /** @type {(content: string | number) => string} */ const g = @@ -37,7 +30,4 @@ a.js(11,26): error TS2339: Property 'toUpperCase' does not exist on type 'string !!! error TS2322: Type 'number' is not assignable to type 'string'. /** @type {(content: string) => string} */ (content) => content.toUpperCase(); - ~~~~~~~~~~~ -!!! error TS2339: Property 'toUpperCase' does not exist on type 'string | number'. -!!! error TS2339: Property 'toUpperCase' does not exist on type 'number'. \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/jsdocTypeTagOnContextuallyTypedFunction.symbols b/tsc/testdata/baselines/reference/compiler/jsdocTypeTagOnContextuallyTypedFunction.symbols index 17ba749362f25..15ffe15bb65e2 100644 --- a/tsc/testdata/baselines/reference/compiler/jsdocTypeTagOnContextuallyTypedFunction.symbols +++ b/tsc/testdata/baselines/reference/compiler/jsdocTypeTagOnContextuallyTypedFunction.symbols @@ -16,10 +16,12 @@ context.f = (content, ...rest) => content.toUpperCase() + rest.length; >content : Symbol(content, Decl(a.js, 5, 5)) >rest : Symbol(rest, Decl(a.js, 5, 13)) +>content.toUpperCase : Symbol(String.toUpperCase, Decl(lib.es5.d.ts, --, --)) >content : Symbol(content, Decl(a.js, 5, 5)) ->rest.length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --)) +>toUpperCase : Symbol(String.toUpperCase, Decl(lib.es5.d.ts, --, --)) +>rest.length : Symbol(length) >rest : Symbol(rest, Decl(a.js, 5, 13)) ->length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --)) +>length : Symbol(length) /** @type {(content: string | number) => string} */ const g = @@ -28,5 +30,7 @@ const g = /** @type {(content: string) => string} */ (content) => content.toUpperCase(); >content : Symbol(content, Decl(a.js, 10, 5)) +>content.toUpperCase : Symbol(String.toUpperCase, Decl(lib.es5.d.ts, --, --)) >content : Symbol(content, Decl(a.js, 10, 5)) +>toUpperCase : Symbol(String.toUpperCase, Decl(lib.es5.d.ts, --, --)) diff --git a/tsc/testdata/baselines/reference/compiler/jsdocTypeTagOnContextuallyTypedFunction.types b/tsc/testdata/baselines/reference/compiler/jsdocTypeTagOnContextuallyTypedFunction.types index 7511697864aa1..6defe743de587 100644 --- a/tsc/testdata/baselines/reference/compiler/jsdocTypeTagOnContextuallyTypedFunction.types +++ b/tsc/testdata/baselines/reference/compiler/jsdocTypeTagOnContextuallyTypedFunction.types @@ -19,16 +19,16 @@ context.f = /** @type {(content: string, ...rest: [boolean?]) => string} */ (content, ...rest) => content.toUpperCase() + rest.length; >(content, ...rest) => content.toUpperCase() + rest.length : (content: string, rest_0?: boolean | undefined) => string ->content : string | number ->rest : unknown[] ->content.toUpperCase() + rest.length : any ->content.toUpperCase() : any ->content.toUpperCase : any ->content : string | number ->toUpperCase : any ->rest.length : number ->rest : unknown[] ->length : number +>content : string +>rest : [(boolean | undefined)?] +>content.toUpperCase() + rest.length : string +>content.toUpperCase() : string +>content.toUpperCase : () => string +>content : string +>toUpperCase : () => string +>rest.length : 0 | 1 +>rest : [(boolean | undefined)?] +>length : 0 | 1 /** @type {(content: string | number) => string} */ const g = @@ -37,9 +37,9 @@ const g = /** @type {(content: string) => string} */ (content) => content.toUpperCase(); >(content) => content.toUpperCase() : (content: string) => string ->content : string | number ->content.toUpperCase() : any ->content.toUpperCase : any ->content : string | number ->toUpperCase : any +>content : string +>content.toUpperCase() : string +>content.toUpperCase : () => string +>content : string +>toUpperCase : () => string From 9233cb11d9f9f54f70e40e40812a19c65dc6be55 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 00:10:16 -0700 Subject: [PATCH 158/194] Add test for inference through iterators regardless of check order Inferring from string[][] to Iterable> passes through the [Symbol.iterator] method types of the outer and inner arrays. Ordering those by type id calls the inner method type newer, and so the inference expanding recursion, only when it is first created during the inference; iterating string[] beforehand avoids that. Ordering by generation infers the element type in both cases (seen in webpack). --- ...inferenceDeeplyNestedCheckOrder.errors.txt | 24 +++++++++ .../inferenceDeeplyNestedCheckOrder.symbols | 52 +++++++++++++++++++ .../inferenceDeeplyNestedCheckOrder.types | 44 ++++++++++++++++ .../inferenceDeeplyNestedCheckOrder.ts | 23 ++++++++ 4 files changed, 143 insertions(+) create mode 100644 tsc/testdata/baselines/reference/compiler/inferenceDeeplyNestedCheckOrder.errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/inferenceDeeplyNestedCheckOrder.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/inferenceDeeplyNestedCheckOrder.types create mode 100644 tsc/testdata/tests/cases/compiler/inferenceDeeplyNestedCheckOrder.ts diff --git a/tsc/testdata/baselines/reference/compiler/inferenceDeeplyNestedCheckOrder.errors.txt b/tsc/testdata/baselines/reference/compiler/inferenceDeeplyNestedCheckOrder.errors.txt new file mode 100644 index 0000000000000..b98c3dd4a3075 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/inferenceDeeplyNestedCheckOrder.errors.txt @@ -0,0 +1,24 @@ +first.ts(3,7): error TS2322: Type 'string[]' is not assignable to type 'null'. +second.ts(6,7): error TS2322: Type 'number[]' is not assignable to type 'null'. + + +==== first.ts (1 errors) ==== + declare function flatten1(iterable: Iterable>): T[]; + declare const lists1: string[][]; + const flat1: null = flatten1(lists1); + ~~~~~ +!!! error TS2322: Type 'string[]' is not assignable to type 'null'. + + declare const items1: string[]; + for (const item of items1) {} + +==== second.ts (1 errors) ==== + declare const items2: number[]; + for (const item of items2) {} + + declare function flatten2(iterable: Iterable>): T[]; + declare const lists2: number[][]; + const flat2: null = flatten2(lists2); + ~~~~~ +!!! error TS2322: Type 'number[]' is not assignable to type 'null'. + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/inferenceDeeplyNestedCheckOrder.symbols b/tsc/testdata/baselines/reference/compiler/inferenceDeeplyNestedCheckOrder.symbols new file mode 100644 index 0000000000000..57cb4ce9d6984 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/inferenceDeeplyNestedCheckOrder.symbols @@ -0,0 +1,52 @@ +//// [tests/cases/compiler/inferenceDeeplyNestedCheckOrder.ts] //// + +=== first.ts === +declare function flatten1(iterable: Iterable>): T[]; +>flatten1 : Symbol(flatten1, Decl(first.ts, 0, 0)) +>T : Symbol(T, Decl(first.ts, 0, 26)) +>iterable : Symbol(iterable, Decl(first.ts, 0, 29)) +>Iterable : Symbol(Iterable, Decl(lib.es2015.iterable.d.ts, --, --)) +>Iterable : Symbol(Iterable, Decl(lib.es2015.iterable.d.ts, --, --)) +>T : Symbol(T, Decl(first.ts, 0, 26)) +>T : Symbol(T, Decl(first.ts, 0, 26)) + +declare const lists1: string[][]; +>lists1 : Symbol(lists1, Decl(first.ts, 1, 13)) + +const flat1: null = flatten1(lists1); +>flat1 : Symbol(flat1, Decl(first.ts, 2, 5)) +>flatten1 : Symbol(flatten1, Decl(first.ts, 0, 0)) +>lists1 : Symbol(lists1, Decl(first.ts, 1, 13)) + +declare const items1: string[]; +>items1 : Symbol(items1, Decl(first.ts, 4, 13)) + +for (const item of items1) {} +>item : Symbol(item, Decl(first.ts, 5, 10)) +>items1 : Symbol(items1, Decl(first.ts, 4, 13)) + +=== second.ts === +declare const items2: number[]; +>items2 : Symbol(items2, Decl(second.ts, 0, 13)) + +for (const item of items2) {} +>item : Symbol(item, Decl(second.ts, 1, 10)) +>items2 : Symbol(items2, Decl(second.ts, 0, 13)) + +declare function flatten2(iterable: Iterable>): T[]; +>flatten2 : Symbol(flatten2, Decl(second.ts, 1, 29)) +>T : Symbol(T, Decl(second.ts, 3, 26)) +>iterable : Symbol(iterable, Decl(second.ts, 3, 29)) +>Iterable : Symbol(Iterable, Decl(lib.es2015.iterable.d.ts, --, --)) +>Iterable : Symbol(Iterable, Decl(lib.es2015.iterable.d.ts, --, --)) +>T : Symbol(T, Decl(second.ts, 3, 26)) +>T : Symbol(T, Decl(second.ts, 3, 26)) + +declare const lists2: number[][]; +>lists2 : Symbol(lists2, Decl(second.ts, 4, 13)) + +const flat2: null = flatten2(lists2); +>flat2 : Symbol(flat2, Decl(second.ts, 5, 5)) +>flatten2 : Symbol(flatten2, Decl(second.ts, 1, 29)) +>lists2 : Symbol(lists2, Decl(second.ts, 4, 13)) + diff --git a/tsc/testdata/baselines/reference/compiler/inferenceDeeplyNestedCheckOrder.types b/tsc/testdata/baselines/reference/compiler/inferenceDeeplyNestedCheckOrder.types new file mode 100644 index 0000000000000..a4b3f46e454aa --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/inferenceDeeplyNestedCheckOrder.types @@ -0,0 +1,44 @@ +//// [tests/cases/compiler/inferenceDeeplyNestedCheckOrder.ts] //// + +=== first.ts === +declare function flatten1(iterable: Iterable>): T[]; +>flatten1 : (iterable: Iterable>) => T[] +>iterable : Iterable> + +declare const lists1: string[][]; +>lists1 : string[][] + +const flat1: null = flatten1(lists1); +>flat1 : null +>flatten1(lists1) : string[] +>flatten1 : (iterable: Iterable>) => T[] +>lists1 : string[][] + +declare const items1: string[]; +>items1 : string[] + +for (const item of items1) {} +>item : string +>items1 : string[] + +=== second.ts === +declare const items2: number[]; +>items2 : number[] + +for (const item of items2) {} +>item : number +>items2 : number[] + +declare function flatten2(iterable: Iterable>): T[]; +>flatten2 : (iterable: Iterable>) => T[] +>iterable : Iterable> + +declare const lists2: number[][]; +>lists2 : number[][] + +const flat2: null = flatten2(lists2); +>flat2 : null +>flatten2(lists2) : number[] +>flatten2 : (iterable: Iterable>) => T[] +>lists2 : number[][] + diff --git a/tsc/testdata/tests/cases/compiler/inferenceDeeplyNestedCheckOrder.ts b/tsc/testdata/tests/cases/compiler/inferenceDeeplyNestedCheckOrder.ts new file mode 100644 index 0000000000000..9771e61448026 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/inferenceDeeplyNestedCheckOrder.ts @@ -0,0 +1,23 @@ +// @strict: true +// @target: es2015 +// @noEmit: true + +// Inferring from string[][] to Iterable> recurses through the +// [Symbol.iterator] methods of both arrays. Whether that looks like expanding +// recursion must not depend on whether string[] was iterated beforehand. + +// @filename: first.ts +declare function flatten1(iterable: Iterable>): T[]; +declare const lists1: string[][]; +const flat1: null = flatten1(lists1); + +declare const items1: string[]; +for (const item of items1) {} + +// @filename: second.ts +declare const items2: number[]; +for (const item of items2) {} + +declare function flatten2(iterable: Iterable>): T[]; +declare const lists2: number[][]; +const flat2: null = flatten2(lists2); From a7320f7671d0d0b7fdb875141657efd370b7a506 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 01:27:02 -0800 Subject: [PATCH 159/194] Revert "Skip resolving an enclosing call that is already resolved" This reverts commit f871455e471. Computing the contextual type of a call nested in an argument of an enclosing call does more than resolve the enclosing call: it walks the contextual types between them, such as the contextual return type of an arrow function the nested call is returned from. When the enclosing call is already resolving, that walk still decides where a cycle through the two calls is entered. With it skipped, a cycle through a scope object whose members are thunks referring to the scope was entered at the nested call rather than at the thunk's return type, as in source order, and parameters of callbacks passed to the nested call became implicitly any (seen in arktype). --- tsc/internal/checker/checker.go | 43 ++++++++++++--------------------- 1 file changed, 15 insertions(+), 28 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 8a0cf256f3467..d3cce8ef32059 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -8852,48 +8852,45 @@ func (c *Checker) isSymbolOrSymbolForCall(node *ast.Node) bool { return globalESSymbol == c.resolveName(left, "Symbol", ast.SymbolFlagsValue, nil /*nameNotFoundMessage*/, false /*isUse*/, false) } -// getContextuallyTypingCall returns the enclosing call an argument of which -// may give an expression its contextual type, or nil. Other contexts are not -// resolved ahead of the expression, since computing them may evaluate -// expressions that checking only evaluates otherwise, such as the target of a -// destructuring assignment. -func getContextuallyTypingCall(node *ast.Node) *ast.Node { +// isContextuallyTypedByEnclosingCall reports whether the contextual type of +// an expression may come from an argument of an enclosing call. Other +// contexts are not resolved ahead of the expression, since computing them +// may evaluate expressions that checking only evaluates otherwise, such as +// the target of a destructuring assignment. +func isContextuallyTypedByEnclosingCall(node *ast.Node) bool { for { parent := node.Parent switch parent.Kind { case ast.KindCallExpression, ast.KindNewExpression: - if node == parent.Expression() { - return nil - } - return parent + return node != parent.Expression() case ast.KindParenthesizedExpression, ast.KindSpreadElement, ast.KindArrayLiteralExpression, ast.KindObjectLiteralExpression, ast.KindPropertyAssignment, ast.KindAwaitExpression: node = parent continue case ast.KindConditionalExpression: if node == parent.AsConditionalExpression().Condition { - return nil + return false } case ast.KindBinaryExpression: switch parent.AsBinaryExpression().OperatorToken.Kind { case ast.KindBarBarToken, ast.KindAmpersandAmpersandToken, ast.KindQuestionQuestionToken, ast.KindCommaToken: if node != parent.AsBinaryExpression().Right { - return nil + return false } default: - return nil + return false } case ast.KindArrowFunction: if node != parent.Body() { - return nil + return false } case ast.KindReturnStatement: parent = ast.GetContainingFunction(parent) if parent == nil || !ast.IsFunctionExpressionOrArrowFunction(parent) { - return nil + return false } default: - return nil + return false } node = parent } @@ -8947,10 +8944,8 @@ func (c *Checker) getResolvedSignatureUncached(node *ast.Node, candidatesOutArra // type parameters this call references. Resolved from within this call // instead, the enclosing call sees this one marked as resolving, and // the result depends on which call was queried first. - if ast.IsCallExpression(node) || ast.IsNewExpression(node) { - if call := getContextuallyTypingCall(node); call != nil && !c.isSignatureResolvingOrResolved(call) { - c.getContextualType(node, ContextFlagsNone) - } + if (ast.IsCallExpression(node) || ast.IsNewExpression(node)) && isContextuallyTypedByEnclosingCall(node) { + c.getContextualType(node, ContextFlagsNone) } cached = links.resolvedSignature.get(c) if cached == c.resolvingSignature && c.isSignatureResolutionHidden(links) { @@ -9016,14 +9011,6 @@ type signatureResolving struct { // isSignatureResolutionHidden reports whether the resolution of the call // with the given links is in progress below what is visible; see yieldCycle. -// isSignatureResolvingOrResolved reports whether the signature of a call is -// resolved, or being resolved by a resolution visible to the current one. -func (c *Checker) isSignatureResolvingOrResolved(call *ast.Node) bool { - links := c.signatureLinks.Get(call) - s := links.resolvedSignature.get(c) - return s != nil && !(s == c.resolvingSignature && c.isSignatureResolutionHidden(links)) -} - func (c *Checker) isSignatureResolutionHidden(links *SignatureLinks) bool { if c.visibleStart == 0 { return false From 4594e2a2db0d7a42c0aff2cebcda6be6b82f9ff6 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 01:27:25 -0800 Subject: [PATCH 160/194] Add test for a scope whose thunks refer to the scope A scope object built by a generic call whose parameter is a mapped type over the object, with a member that is a thunk calling back into the scope, checks without error in the reference implementation under every order tried. There, the thunk's return type is computed once, while the scope's reverse mapping of the thunk is in progress, which cuts off the nested resolution of the scope call, and is cached. Here it is computed again after the scope call's nested resolution is discarded, outside that reverse mapping, and fails as a cycle through the scope. The baseline records the current, incorrect, circularity errors. The case is reduced by hand from a pattern in arktype, which itself checks without error. --- ...circularScopeThunkReverseMapped.errors.txt | 28 ++++++ .../circularScopeThunkReverseMapped.symbols | 90 +++++++++++++++++++ .../circularScopeThunkReverseMapped.types | 67 ++++++++++++++ .../circularScopeThunkReverseMapped.ts | 19 ++++ 4 files changed, 204 insertions(+) create mode 100644 tsc/testdata/baselines/reference/compiler/circularScopeThunkReverseMapped.errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/circularScopeThunkReverseMapped.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/circularScopeThunkReverseMapped.types create mode 100644 tsc/testdata/tests/cases/compiler/circularScopeThunkReverseMapped.ts diff --git a/tsc/testdata/baselines/reference/compiler/circularScopeThunkReverseMapped.errors.txt b/tsc/testdata/baselines/reference/compiler/circularScopeThunkReverseMapped.errors.txt new file mode 100644 index 0000000000000..3fb9014247bf1 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularScopeThunkReverseMapped.errors.txt @@ -0,0 +1,28 @@ +circularScopeThunkReverseMapped.ts(12,14): error TS7022: '$' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. +circularScopeThunkReverseMapped.ts(14,5): error TS7023: 'b' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. +circularScopeThunkReverseMapped.ts(14,41): error TS7006: Parameter 'n' implicitly has an 'any' type. + + +==== circularScopeThunkReverseMapped.ts (3 errors) ==== + type Resolve = T extends () => infer R ? R : T; + type Validate = { [K in keyof def]: def[K] extends () => infer R ? () => R : def[K] }; + interface Scope { + type(k: k): Resolve; + } + interface Type { + pipe(f: (x: T) => U): Type; + } + declare function scope(def: Validate): Scope; + declare function type(x: T): Type; + + export const $ = scope({ + ~ +!!! error TS7022: '$' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. + a: type("string").pipe(function (s) { return s.length; }), + b: () => $.type("a").pipe(function (n) { return n === 0; }), + ~ +!!! error TS7023: 'b' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. + ~ +!!! error TS7006: Parameter 'n' implicitly has an 'any' type. + }); + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/circularScopeThunkReverseMapped.symbols b/tsc/testdata/baselines/reference/compiler/circularScopeThunkReverseMapped.symbols new file mode 100644 index 0000000000000..f674708961bdd --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularScopeThunkReverseMapped.symbols @@ -0,0 +1,90 @@ +//// [tests/cases/compiler/circularScopeThunkReverseMapped.ts] //// + +=== circularScopeThunkReverseMapped.ts === +type Resolve = T extends () => infer R ? R : T; +>Resolve : Symbol(Resolve, Decl(circularScopeThunkReverseMapped.ts, 0, 0)) +>T : Symbol(T, Decl(circularScopeThunkReverseMapped.ts, 0, 13)) +>T : Symbol(T, Decl(circularScopeThunkReverseMapped.ts, 0, 13)) +>R : Symbol(R, Decl(circularScopeThunkReverseMapped.ts, 0, 39)) +>R : Symbol(R, Decl(circularScopeThunkReverseMapped.ts, 0, 39)) +>T : Symbol(T, Decl(circularScopeThunkReverseMapped.ts, 0, 13)) + +type Validate = { [K in keyof def]: def[K] extends () => infer R ? () => R : def[K] }; +>Validate : Symbol(Validate, Decl(circularScopeThunkReverseMapped.ts, 0, 50)) +>def : Symbol(def, Decl(circularScopeThunkReverseMapped.ts, 1, 14)) +>K : Symbol(K, Decl(circularScopeThunkReverseMapped.ts, 1, 24)) +>def : Symbol(def, Decl(circularScopeThunkReverseMapped.ts, 1, 14)) +>def : Symbol(def, Decl(circularScopeThunkReverseMapped.ts, 1, 14)) +>K : Symbol(K, Decl(circularScopeThunkReverseMapped.ts, 1, 24)) +>R : Symbol(R, Decl(circularScopeThunkReverseMapped.ts, 1, 67)) +>R : Symbol(R, Decl(circularScopeThunkReverseMapped.ts, 1, 67)) +>def : Symbol(def, Decl(circularScopeThunkReverseMapped.ts, 1, 14)) +>K : Symbol(K, Decl(circularScopeThunkReverseMapped.ts, 1, 24)) + +interface Scope { +>Scope : Symbol(Scope, Decl(circularScopeThunkReverseMapped.ts, 1, 91)) +>def : Symbol(def, Decl(circularScopeThunkReverseMapped.ts, 2, 16)) + + type(k: k): Resolve; +>type : Symbol(Scope.type, Decl(circularScopeThunkReverseMapped.ts, 2, 22)) +>k : Symbol(k, Decl(circularScopeThunkReverseMapped.ts, 3, 9), Decl(circularScopeThunkReverseMapped.ts, 3, 30)) +>def : Symbol(def, Decl(circularScopeThunkReverseMapped.ts, 2, 16)) +>k : Symbol(k, Decl(circularScopeThunkReverseMapped.ts, 3, 9), Decl(circularScopeThunkReverseMapped.ts, 3, 30)) +>k : Symbol(k, Decl(circularScopeThunkReverseMapped.ts, 3, 9), Decl(circularScopeThunkReverseMapped.ts, 3, 30)) +>Resolve : Symbol(Resolve, Decl(circularScopeThunkReverseMapped.ts, 0, 0)) +>def : Symbol(def, Decl(circularScopeThunkReverseMapped.ts, 2, 16)) +>k : Symbol(k, Decl(circularScopeThunkReverseMapped.ts, 3, 9), Decl(circularScopeThunkReverseMapped.ts, 3, 30)) +} +interface Type { +>Type : Symbol(Type, Decl(circularScopeThunkReverseMapped.ts, 4, 1)) +>T : Symbol(T, Decl(circularScopeThunkReverseMapped.ts, 5, 15)) + + pipe(f: (x: T) => U): Type; +>pipe : Symbol(Type.pipe, Decl(circularScopeThunkReverseMapped.ts, 5, 19)) +>U : Symbol(U, Decl(circularScopeThunkReverseMapped.ts, 6, 9)) +>f : Symbol(f, Decl(circularScopeThunkReverseMapped.ts, 6, 12)) +>x : Symbol(x, Decl(circularScopeThunkReverseMapped.ts, 6, 16)) +>T : Symbol(T, Decl(circularScopeThunkReverseMapped.ts, 5, 15)) +>U : Symbol(U, Decl(circularScopeThunkReverseMapped.ts, 6, 9)) +>Type : Symbol(Type, Decl(circularScopeThunkReverseMapped.ts, 4, 1)) +>U : Symbol(U, Decl(circularScopeThunkReverseMapped.ts, 6, 9)) +} +declare function scope(def: Validate): Scope; +>scope : Symbol(scope, Decl(circularScopeThunkReverseMapped.ts, 7, 1)) +>def : Symbol(def, Decl(circularScopeThunkReverseMapped.ts, 8, 23), Decl(circularScopeThunkReverseMapped.ts, 8, 34)) +>def : Symbol(def, Decl(circularScopeThunkReverseMapped.ts, 8, 23), Decl(circularScopeThunkReverseMapped.ts, 8, 34)) +>Validate : Symbol(Validate, Decl(circularScopeThunkReverseMapped.ts, 0, 50)) +>def : Symbol(def, Decl(circularScopeThunkReverseMapped.ts, 8, 23), Decl(circularScopeThunkReverseMapped.ts, 8, 34)) +>Scope : Symbol(Scope, Decl(circularScopeThunkReverseMapped.ts, 1, 91)) +>def : Symbol(def, Decl(circularScopeThunkReverseMapped.ts, 8, 23), Decl(circularScopeThunkReverseMapped.ts, 8, 34)) + +declare function type(x: T): Type; +>type : Symbol(type, Decl(circularScopeThunkReverseMapped.ts, 8, 66)) +>T : Symbol(T, Decl(circularScopeThunkReverseMapped.ts, 9, 22)) +>x : Symbol(x, Decl(circularScopeThunkReverseMapped.ts, 9, 25)) +>T : Symbol(T, Decl(circularScopeThunkReverseMapped.ts, 9, 22)) +>Type : Symbol(Type, Decl(circularScopeThunkReverseMapped.ts, 4, 1)) +>T : Symbol(T, Decl(circularScopeThunkReverseMapped.ts, 9, 22)) + +export const $ = scope({ +>$ : Symbol($, Decl(circularScopeThunkReverseMapped.ts, 11, 12)) +>scope : Symbol(scope, Decl(circularScopeThunkReverseMapped.ts, 7, 1)) + + a: type("string").pipe(function (s) { return s.length; }), +>a : Symbol(a, Decl(circularScopeThunkReverseMapped.ts, 11, 24)) +>type("string").pipe : Symbol(Type.pipe, Decl(circularScopeThunkReverseMapped.ts, 5, 19)) +>type : Symbol(type, Decl(circularScopeThunkReverseMapped.ts, 8, 66)) +>pipe : Symbol(Type.pipe, Decl(circularScopeThunkReverseMapped.ts, 5, 19)) +>s : Symbol(s, Decl(circularScopeThunkReverseMapped.ts, 12, 37)) +>s.length : Symbol(String.length, Decl(lib.es5.d.ts, --, --)) +>s : Symbol(s, Decl(circularScopeThunkReverseMapped.ts, 12, 37)) +>length : Symbol(String.length, Decl(lib.es5.d.ts, --, --)) + + b: () => $.type("a").pipe(function (n) { return n === 0; }), +>b : Symbol(b, Decl(circularScopeThunkReverseMapped.ts, 12, 62)) +>$ : Symbol($, Decl(circularScopeThunkReverseMapped.ts, 11, 12)) +>n : Symbol(n, Decl(circularScopeThunkReverseMapped.ts, 13, 40)) +>n : Symbol(n, Decl(circularScopeThunkReverseMapped.ts, 13, 40)) + +}); + diff --git a/tsc/testdata/baselines/reference/compiler/circularScopeThunkReverseMapped.types b/tsc/testdata/baselines/reference/compiler/circularScopeThunkReverseMapped.types new file mode 100644 index 0000000000000..b5b7bcbdd4318 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/circularScopeThunkReverseMapped.types @@ -0,0 +1,67 @@ +//// [tests/cases/compiler/circularScopeThunkReverseMapped.ts] //// + +=== circularScopeThunkReverseMapped.ts === +type Resolve = T extends () => infer R ? R : T; +>Resolve : Resolve + +type Validate = { [K in keyof def]: def[K] extends () => infer R ? () => R : def[K] }; +>Validate : Validate + +interface Scope { + type(k: k): Resolve; +>type : (k: k) => Resolve +>k : k +} +interface Type { + pipe(f: (x: T) => U): Type; +>pipe : (f: (x: T) => U) => Type +>f : (x: T) => U +>x : T +} +declare function scope(def: Validate): Scope; +>scope : (def: Validate) => Scope +>def : Validate + +declare function type(x: T): Type; +>type : (x: T) => Type +>x : T + +export const $ = scope({ +>$ : any +>scope({ a: type("string").pipe(function (s) { return s.length; }), b: () => $.type("a").pipe(function (n) { return n === 0; }),}) : Scope<{ readonly a: Type; readonly b: () => any; }> +>scope : (def: Validate) => Scope +>{ a: type("string").pipe(function (s) { return s.length; }), b: () => $.type("a").pipe(function (n) { return n === 0; }),} : { a: Type; b: () => any; } + + a: type("string").pipe(function (s) { return s.length; }), +>a : Type +>type("string").pipe(function (s) { return s.length; }) : Type +>type("string").pipe : (f: (x: string) => U) => Type +>type("string") : Type +>type : (x: T) => Type +>"string" : "string" +>pipe : (f: (x: string) => U) => Type +>function (s) { return s.length; } : (s: string) => number +>s : string +>s.length : number +>s : string +>length : number + + b: () => $.type("a").pipe(function (n) { return n === 0; }), +>b : () => any +>() => $.type("a").pipe(function (n) { return n === 0; }) : () => any +>$.type("a").pipe(function (n) { return n === 0; }) : any +>$.type("a").pipe : any +>$.type("a") : any +>$.type : any +>$ : any +>type : any +>"a" : "a" +>pipe : any +>function (n) { return n === 0; } : (n: any) => boolean +>n : any +>n === 0 : boolean +>n : any +>0 : 0 + +}); + diff --git a/tsc/testdata/tests/cases/compiler/circularScopeThunkReverseMapped.ts b/tsc/testdata/tests/cases/compiler/circularScopeThunkReverseMapped.ts new file mode 100644 index 0000000000000..3837d48d2d9bf --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/circularScopeThunkReverseMapped.ts @@ -0,0 +1,19 @@ +// @strict: true +// @target: esnext +// @noEmit: true + +type Resolve = T extends () => infer R ? R : T; +type Validate = { [K in keyof def]: def[K] extends () => infer R ? () => R : def[K] }; +interface Scope { + type(k: k): Resolve; +} +interface Type { + pipe(f: (x: T) => U): Type; +} +declare function scope(def: Validate): Scope; +declare function type(x: T): Type; + +export const $ = scope({ + a: type("string").pipe(function (s) { return s.length; }), + b: () => $.type("a").pipe(function (n) { return n === 0; }), +}); From 77daf9ac9e990d40139e6407be3c036e6bd0785c Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 01:34:16 -0800 Subject: [PATCH 161/194] Add test for a never narrowing after a loop with an && condition The variable is narrowed to never inside the if. With && in the loop condition, main reports only the assignment of false to never: loop analysis creates an incomplete never placeholder (silentNever), and that placeholder leaks into the type of the reference, so the property access is silently allowed. With a plain loop condition, main reports the property access instead, which is what we report in both cases. Reduced with creduce (seen in uglify-js). --- ...dNeverAfterLoopWithAndCondition.errors.txt | 29 ++++++++++ ...owedNeverAfterLoopWithAndCondition.symbols | 47 ++++++++++++++++ ...rrowedNeverAfterLoopWithAndCondition.types | 56 +++++++++++++++++++ .../narrowedNeverAfterLoopWithAndCondition.ts | 22 ++++++++ 4 files changed, 154 insertions(+) create mode 100644 tsc/testdata/baselines/reference/compiler/narrowedNeverAfterLoopWithAndCondition.errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/narrowedNeverAfterLoopWithAndCondition.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/narrowedNeverAfterLoopWithAndCondition.types create mode 100644 tsc/testdata/tests/cases/compiler/narrowedNeverAfterLoopWithAndCondition.ts diff --git a/tsc/testdata/baselines/reference/compiler/narrowedNeverAfterLoopWithAndCondition.errors.txt b/tsc/testdata/baselines/reference/compiler/narrowedNeverAfterLoopWithAndCondition.errors.txt new file mode 100644 index 0000000000000..dfe01f2eea345 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/narrowedNeverAfterLoopWithAndCondition.errors.txt @@ -0,0 +1,29 @@ +narrowedNeverAfterLoopWithAndCondition.ts(9,19): error TS2339: Property 'last_ref' does not exist on type 'never'. +narrowedNeverAfterLoopWithAndCondition.ts(17,19): error TS2339: Property 'last_ref' does not exist on type 'never'. + + +==== narrowedNeverAfterLoopWithAndCondition.ts (2 errors) ==== + // value_def is never inside the if. With a && condition, main and + // Strada leak the loop analysis's incomplete never placeholder + // (silentNever), so the property access is silently allowed and only + // the assignment errors. With `while (x)` they report the access. + function f(x: boolean, y: boolean) { + let value_def: { last_ref: boolean } | null = null; + if (value_def) { + while (x && y); + value_def.last_ref = false; + ~~~~~~~~ +!!! error TS2339: Property 'last_ref' does not exist on type 'never'. + } + } + + function g(x: boolean) { + let value_def: { last_ref: boolean } | null = null; + if (value_def) { + while (x); + value_def.last_ref = false; + ~~~~~~~~ +!!! error TS2339: Property 'last_ref' does not exist on type 'never'. + } + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/narrowedNeverAfterLoopWithAndCondition.symbols b/tsc/testdata/baselines/reference/compiler/narrowedNeverAfterLoopWithAndCondition.symbols new file mode 100644 index 0000000000000..4320e2396f293 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/narrowedNeverAfterLoopWithAndCondition.symbols @@ -0,0 +1,47 @@ +//// [tests/cases/compiler/narrowedNeverAfterLoopWithAndCondition.ts] //// + +=== narrowedNeverAfterLoopWithAndCondition.ts === +// value_def is never inside the if. With a && condition, main and +// Strada leak the loop analysis's incomplete never placeholder +// (silentNever), so the property access is silently allowed and only +// the assignment errors. With `while (x)` they report the access. +function f(x: boolean, y: boolean) { +>f : Symbol(f, Decl(narrowedNeverAfterLoopWithAndCondition.ts, 0, 0)) +>x : Symbol(x, Decl(narrowedNeverAfterLoopWithAndCondition.ts, 4, 11)) +>y : Symbol(y, Decl(narrowedNeverAfterLoopWithAndCondition.ts, 4, 22)) + + let value_def: { last_ref: boolean } | null = null; +>value_def : Symbol(value_def, Decl(narrowedNeverAfterLoopWithAndCondition.ts, 5, 7)) +>last_ref : Symbol(last_ref, Decl(narrowedNeverAfterLoopWithAndCondition.ts, 5, 20)) + + if (value_def) { +>value_def : Symbol(value_def, Decl(narrowedNeverAfterLoopWithAndCondition.ts, 5, 7)) + + while (x && y); +>x : Symbol(x, Decl(narrowedNeverAfterLoopWithAndCondition.ts, 4, 11)) +>y : Symbol(y, Decl(narrowedNeverAfterLoopWithAndCondition.ts, 4, 22)) + + value_def.last_ref = false; +>value_def : Symbol(value_def, Decl(narrowedNeverAfterLoopWithAndCondition.ts, 5, 7)) + } +} + +function g(x: boolean) { +>g : Symbol(g, Decl(narrowedNeverAfterLoopWithAndCondition.ts, 10, 1)) +>x : Symbol(x, Decl(narrowedNeverAfterLoopWithAndCondition.ts, 12, 11)) + + let value_def: { last_ref: boolean } | null = null; +>value_def : Symbol(value_def, Decl(narrowedNeverAfterLoopWithAndCondition.ts, 13, 7)) +>last_ref : Symbol(last_ref, Decl(narrowedNeverAfterLoopWithAndCondition.ts, 13, 20)) + + if (value_def) { +>value_def : Symbol(value_def, Decl(narrowedNeverAfterLoopWithAndCondition.ts, 13, 7)) + + while (x); +>x : Symbol(x, Decl(narrowedNeverAfterLoopWithAndCondition.ts, 12, 11)) + + value_def.last_ref = false; +>value_def : Symbol(value_def, Decl(narrowedNeverAfterLoopWithAndCondition.ts, 13, 7)) + } +} + diff --git a/tsc/testdata/baselines/reference/compiler/narrowedNeverAfterLoopWithAndCondition.types b/tsc/testdata/baselines/reference/compiler/narrowedNeverAfterLoopWithAndCondition.types new file mode 100644 index 0000000000000..ec7b2e4bfcb90 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/narrowedNeverAfterLoopWithAndCondition.types @@ -0,0 +1,56 @@ +//// [tests/cases/compiler/narrowedNeverAfterLoopWithAndCondition.ts] //// + +=== narrowedNeverAfterLoopWithAndCondition.ts === +// value_def is never inside the if. With a && condition, main and +// Strada leak the loop analysis's incomplete never placeholder +// (silentNever), so the property access is silently allowed and only +// the assignment errors. With `while (x)` they report the access. +function f(x: boolean, y: boolean) { +>f : (x: boolean, y: boolean) => void +>x : boolean +>y : boolean + + let value_def: { last_ref: boolean } | null = null; +>value_def : { last_ref: boolean; } | null +>last_ref : boolean + + if (value_def) { +>value_def : null + + while (x && y); +>x && y : boolean +>x : boolean +>y : boolean + + value_def.last_ref = false; +>value_def.last_ref = false : false +>value_def.last_ref : any +>value_def : never +>last_ref : any +>false : false + } +} + +function g(x: boolean) { +>g : (x: boolean) => void +>x : boolean + + let value_def: { last_ref: boolean } | null = null; +>value_def : { last_ref: boolean; } | null +>last_ref : boolean + + if (value_def) { +>value_def : null + + while (x); +>x : boolean + + value_def.last_ref = false; +>value_def.last_ref = false : false +>value_def.last_ref : any +>value_def : never +>last_ref : any +>false : false + } +} + diff --git a/tsc/testdata/tests/cases/compiler/narrowedNeverAfterLoopWithAndCondition.ts b/tsc/testdata/tests/cases/compiler/narrowedNeverAfterLoopWithAndCondition.ts new file mode 100644 index 0000000000000..46b9086842fb1 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/narrowedNeverAfterLoopWithAndCondition.ts @@ -0,0 +1,22 @@ +// @strict: true +// @noEmit: true + +// value_def is never inside the if. With a && condition, main and +// Strada leak the loop analysis's incomplete never placeholder +// (silentNever), so the property access is silently allowed and only +// the assignment errors. With `while (x)` they report the access. +function f(x: boolean, y: boolean) { + let value_def: { last_ref: boolean } | null = null; + if (value_def) { + while (x && y); + value_def.last_ref = false; + } +} + +function g(x: boolean) { + let value_def: { last_ref: boolean } | null = null; + if (value_def) { + while (x); + value_def.last_ref = false; + } +} From 12068c681ef58e6fee5c969ebbb9d99933ed714b Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 02:57:06 -0800 Subject: [PATCH 162/194] Keep the result of a resolution nested in a hidden one of itself A call resolution hides the resolutions below it, so a symbol whose initializer reaches itself through a call argument is computed again, nested in itself, as in main. The nested computation observes things in progress that the outer one entered: here, a mapped property whose contextual type is skipped, and the reverse mapping whose depth cutoff it reaches. Those mark everything since as circular, so the nested result was discarded, and the outer computation, reaching the same types again outside that context, then failed with a circularity. When everything the nested computation observed in progress was entered by the outermost hidden resolution of the same target, the nested computation is what that one always computes first from scratch, whichever entry led to it, so its result is kept as a cycle participant, as main keeps the first result set. Main also keeps the reverse-mapped property type computed under the depth cutoff, so it types the property as unknown. That result still depends on the cutoff and is discarded, so the property is computed again from scratch afterwards, giving its full type: an improvement over main rather than a match (seen in arktype). --- tsc/internal/checker/checker.go | 33 +++++++++++++++++++ ...circularScopeThunkReverseMapped.errors.txt | 28 ---------------- .../circularScopeThunkReverseMapped.symbols | 4 +++ .../circularScopeThunkReverseMapped.types | 30 ++++++++--------- 4 files changed, 52 insertions(+), 43 deletions(-) delete mode 100644 tsc/testdata/baselines/reference/compiler/circularScopeThunkReverseMapped.errors.txt diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index d3cce8ef32059..f6a58775ef9c6 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -94,6 +94,10 @@ type TypeResolution struct { restartHidden bool // participant records that the resolution is in cycleParticipants. participant bool + // outerSelf is one more than the index in resolutions of the outermost + // resolution of the same property of target hidden below this one, or 0; + // see popTypeResolution. + outerSelf int32 } // ContextualInfo @@ -20235,9 +20239,29 @@ func (c *Checker) pushTypeResolution(target TypeSystemEntity, propertyName TypeS } } c.beginTypeResolution(target, propertyName) + if resolutionCycleStartIndex < 0 && c.resolutionStart > 0 { + if i := c.findHiddenResolution(target, propertyName); i >= 0 { + c.resolutions[len(c.resolutions)-1].typeResolution.outerSelf = int32(i + 1) + } + } return true } +// findHiddenResolution returns the index in resolutions of the outermost +// resolution of the property of target in progress below resolutionStart, +// or -1. +func (c *Checker) findHiddenResolution(target TypeSystemEntity, propertyName TypeSystemPropertyName) int { + found := -1 + for i := int(c.resolutions[len(c.resolutions)-1].prevSearchable) - 1; i >= 0; i = int(c.resolutions[i].prevSearchable) - 1 { + if i < c.resolutionStart { + if r := &c.resolutions[i].typeResolution; r.target == target && r.propertyName == propertyName { + found = i + } + } + } + return found +} + // cycleYield is a canonical recomputation in progress; see yieldCycle. type cycleYield struct { end int // Index in resolutions of the resolution whose pop ends it, or -1 @@ -20662,6 +20686,15 @@ func (c *Checker) popTypeResolution() bool { debug.Assert(c.typeResolutionTop == n+1, "resolutions left above a type resolution") f := &c.resolutions[n] result := f.typeResolution.result + if r := &f.typeResolution; r.outerSelf != 0 && result && c.circularityStart != 0 && c.circularityStart <= n && c.circularityStart >= int(r.outerSelf) && !r.participant { + // The resolution re-entered a hidden resolution of itself, which a + // computation from scratch of the outer one always does, and what it + // observed in progress was all entered by the outer one, so its result + // is what the outer one computes first from scratch: the outer one + // keeps it, as must the cycle. + r.participant = true + c.cycleParticipants = append(c.cycleParticipants, *r) + } c.typeResolutionTop = int(f.prevTypeResolution) if f.typeResolution.propertyName != TypeSystemPropertyNameCurrentNode { c.searchableTop = int(f.prevSearchable) diff --git a/tsc/testdata/baselines/reference/compiler/circularScopeThunkReverseMapped.errors.txt b/tsc/testdata/baselines/reference/compiler/circularScopeThunkReverseMapped.errors.txt deleted file mode 100644 index 3fb9014247bf1..0000000000000 --- a/tsc/testdata/baselines/reference/compiler/circularScopeThunkReverseMapped.errors.txt +++ /dev/null @@ -1,28 +0,0 @@ -circularScopeThunkReverseMapped.ts(12,14): error TS7022: '$' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. -circularScopeThunkReverseMapped.ts(14,5): error TS7023: 'b' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. -circularScopeThunkReverseMapped.ts(14,41): error TS7006: Parameter 'n' implicitly has an 'any' type. - - -==== circularScopeThunkReverseMapped.ts (3 errors) ==== - type Resolve = T extends () => infer R ? R : T; - type Validate = { [K in keyof def]: def[K] extends () => infer R ? () => R : def[K] }; - interface Scope { - type(k: k): Resolve; - } - interface Type { - pipe(f: (x: T) => U): Type; - } - declare function scope(def: Validate): Scope; - declare function type(x: T): Type; - - export const $ = scope({ - ~ -!!! error TS7022: '$' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. - a: type("string").pipe(function (s) { return s.length; }), - b: () => $.type("a").pipe(function (n) { return n === 0; }), - ~ -!!! error TS7023: 'b' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. - ~ -!!! error TS7006: Parameter 'n' implicitly has an 'any' type. - }); - \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/circularScopeThunkReverseMapped.symbols b/tsc/testdata/baselines/reference/compiler/circularScopeThunkReverseMapped.symbols index f674708961bdd..a2787b9846b66 100644 --- a/tsc/testdata/baselines/reference/compiler/circularScopeThunkReverseMapped.symbols +++ b/tsc/testdata/baselines/reference/compiler/circularScopeThunkReverseMapped.symbols @@ -82,7 +82,11 @@ export const $ = scope({ b: () => $.type("a").pipe(function (n) { return n === 0; }), >b : Symbol(b, Decl(circularScopeThunkReverseMapped.ts, 12, 62)) +>$.type("a").pipe : Symbol(Type.pipe, Decl(circularScopeThunkReverseMapped.ts, 5, 19)) +>$.type : Symbol(Scope.type, Decl(circularScopeThunkReverseMapped.ts, 2, 22)) >$ : Symbol($, Decl(circularScopeThunkReverseMapped.ts, 11, 12)) +>type : Symbol(Scope.type, Decl(circularScopeThunkReverseMapped.ts, 2, 22)) +>pipe : Symbol(Type.pipe, Decl(circularScopeThunkReverseMapped.ts, 5, 19)) >n : Symbol(n, Decl(circularScopeThunkReverseMapped.ts, 13, 40)) >n : Symbol(n, Decl(circularScopeThunkReverseMapped.ts, 13, 40)) diff --git a/tsc/testdata/baselines/reference/compiler/circularScopeThunkReverseMapped.types b/tsc/testdata/baselines/reference/compiler/circularScopeThunkReverseMapped.types index b5b7bcbdd4318..7ad9a883d6877 100644 --- a/tsc/testdata/baselines/reference/compiler/circularScopeThunkReverseMapped.types +++ b/tsc/testdata/baselines/reference/compiler/circularScopeThunkReverseMapped.types @@ -27,10 +27,10 @@ declare function type(x: T): Type; >x : T export const $ = scope({ ->$ : any ->scope({ a: type("string").pipe(function (s) { return s.length; }), b: () => $.type("a").pipe(function (n) { return n === 0; }),}) : Scope<{ readonly a: Type; readonly b: () => any; }> +>$ : Scope<{ a: Type; b: () => Type; }> +>scope({ a: type("string").pipe(function (s) { return s.length; }), b: () => $.type("a").pipe(function (n) { return n === 0; }),}) : Scope<{ readonly a: Type; readonly b: () => Type; }> >scope : (def: Validate) => Scope ->{ a: type("string").pipe(function (s) { return s.length; }), b: () => $.type("a").pipe(function (n) { return n === 0; }),} : { a: Type; b: () => any; } +>{ a: type("string").pipe(function (s) { return s.length; }), b: () => $.type("a").pipe(function (n) { return n === 0; }),} : { a: Type; b: () => Type; } a: type("string").pipe(function (s) { return s.length; }), >a : Type @@ -47,20 +47,20 @@ export const $ = scope({ >length : number b: () => $.type("a").pipe(function (n) { return n === 0; }), ->b : () => any ->() => $.type("a").pipe(function (n) { return n === 0; }) : () => any ->$.type("a").pipe(function (n) { return n === 0; }) : any ->$.type("a").pipe : any ->$.type("a") : any ->$.type : any ->$ : any ->type : any +>b : () => Type +>() => $.type("a").pipe(function (n) { return n === 0; }) : () => Type +>$.type("a").pipe(function (n) { return n === 0; }) : Type +>$.type("a").pipe : (f: (x: number) => U) => Type +>$.type("a") : Type +>$.type : (k: k_1) => Resolve<{ a: Type; b: () => Type; }[k_1]> +>$ : Scope<{ a: Type; b: () => Type; }> +>type : (k: k_1) => Resolve<{ a: Type; b: () => Type; }[k_1]> >"a" : "a" ->pipe : any ->function (n) { return n === 0; } : (n: any) => boolean ->n : any +>pipe : (f: (x: number) => U) => Type +>function (n) { return n === 0; } : (n: number) => n is 0 +>n : number >n === 0 : boolean ->n : any +>n : number >0 : 0 }); From 68fa09b722a7b1db0682badf490928a25af4b711 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 03:25:56 -0800 Subject: [PATCH 163/194] Name an instantiation cycle from its first declared type An instantiation stopped by the limit on the depth of the whole instantiation names every type that recurs in it, in the order in which they recur. Which type of the cycle the instantiation entered first depends on what was cached before, so checkers that had checked different files named the same cycle starting from different types, and reported the same error twice with different messages (seen in zod, with checkers running concurrently). The names now start from the type declared first, so the message is the same wherever the cycle is entered. The limit on the depth of a single computation already names only what that computation instantiated, which does not depend on where it was entered, so its messages keep the order in which the types recur. --- tsc/internal/checker/checker.go | 29 +++++++++++++++---- ...enericExtendingClassDoubleLayer.errors.txt | 8 ++--- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index f6a58775ef9c6..a3a86f12e712c 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -24849,12 +24849,13 @@ func getActiveMapperCacheKey(t *Type, alias *TypeAlias) CacheHashKey { func (c *Checker) getCircularTypeNames() []string { typeCounts := make(map[*Type]int) - var circularTypeNames []string + var circularSymbols []*ast.Symbol // A computation reaching the depth limit names only its own // instantiations, which do not depend on where it was first computed; // see "Instantiation limits". stack := c.instantiationStack - if len(stack) != instantiationTotalDepthLimit { + total := len(stack) == instantiationTotalDepthLimit + if !total { stack = stack[c.currentResolution().depthStart:] } for _, t := range stack { @@ -24864,12 +24865,28 @@ func (c *Checker) getCircularTypeNames() []string { if t.alias != nil { symbol = t.alias.symbol } - if symbol != nil && len(symbol.Name()) != 0 && symbol.Name()[0] != '\xFE' { - if name := c.SymbolToString(symbol); !slices.Contains(circularTypeNames, name) { - circularTypeNames = append(circularTypeNames, name) - } + if symbol != nil && len(symbol.Name()) != 0 && symbol.Name()[0] != '\xFE' && !slices.Contains(circularSymbols, symbol) { + circularSymbols = append(circularSymbols, symbol) + } + } + } + if total && len(circularSymbols) > 1 { + // The whole instantiation is named, and which of the types in the + // cycle it entered first depends on what was cached before, so the + // cycle is named starting from the type declared first. + first := 0 + for i, s := range circularSymbols { + if c.compareSymbols(s, circularSymbols[first]) < 0 { + first = i } } + circularSymbols = append(circularSymbols[first:], circularSymbols[:first]...) + } + var circularTypeNames []string + for _, s := range circularSymbols { + if name := c.SymbolToString(s); !slices.Contains(circularTypeNames, name) { + circularTypeNames = append(circularTypeNames, name) + } } return circularTypeNames } diff --git a/tsc/testdata/baselines/reference/compiler/keyofGenericExtendingClassDoubleLayer.errors.txt b/tsc/testdata/baselines/reference/compiler/keyofGenericExtendingClassDoubleLayer.errors.txt index 5babffc1080a2..8c8a4f0003e86 100644 --- a/tsc/testdata/baselines/reference/compiler/keyofGenericExtendingClassDoubleLayer.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/keyofGenericExtendingClassDoubleLayer.errors.txt @@ -1,7 +1,7 @@ keyofGenericExtendingClassDoubleLayer.ts(2,12): error TS2564: Property 'createdAt' has no initializer and is not definitely assigned in the constructor. -keyofGenericExtendingClassDoubleLayer.ts(9,7): error TS5115: Instantiations of the following types appear infinitely circular: 'Model', 'ModelAttributes', 'Exclude'. +keyofGenericExtendingClassDoubleLayer.ts(9,7): error TS5115: Instantiations of the following types appear infinitely circular: 'Exclude', 'Model', 'ModelAttributes'. keyofGenericExtendingClassDoubleLayer.ts(10,12): error TS2564: Property 'age' has no initializer and is not definitely assigned in the constructor. -keyofGenericExtendingClassDoubleLayer.ts(13,13): error TS5115: Instantiations of the following types appear infinitely circular: 'Model', 'ModelAttributes', 'Exclude'. +keyofGenericExtendingClassDoubleLayer.ts(13,13): error TS5115: Instantiations of the following types appear infinitely circular: 'Exclude', 'Model', 'ModelAttributes'. ==== keyofGenericExtendingClassDoubleLayer.ts (4 errors) ==== @@ -17,7 +17,7 @@ keyofGenericExtendingClassDoubleLayer.ts(13,13): error TS5115: Instantiations of class PersonModel extends AutoModel { ~~~~~~~~~~~ -!!! error TS5115: Instantiations of the following types appear infinitely circular: 'Model', 'ModelAttributes', 'Exclude'. +!!! error TS5115: Instantiations of the following types appear infinitely circular: 'Exclude', 'Model', 'ModelAttributes'. public age: number; ~~~ !!! error TS2564: Property 'age' has no initializer and is not definitely assigned in the constructor. @@ -25,7 +25,7 @@ keyofGenericExtendingClassDoubleLayer.ts(13,13): error TS5115: Instantiations of toJson() { let x: keyof this = 'createdAt'; ~ -!!! error TS5115: Instantiations of the following types appear infinitely circular: 'Model', 'ModelAttributes', 'Exclude'. +!!! error TS5115: Instantiations of the following types appear infinitely circular: 'Exclude', 'Model', 'ModelAttributes'. } } \ No newline at end of file From 58ce69cdd028c0ba16c6d57b7b9fbeb40bd904d8 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 03:36:05 -0800 Subject: [PATCH 164/194] Keep rare memo effects fields out of line Every computation with effects keeps a memoEffects until a check replays it, and when nothing checks again, such as when emitting after checking, those of the whole program stay live. Few have reference marks or cycle heads, so moving them to a side struct shrinks every node from 128 to 80 bytes (seen in angular, about 60MB less). --- tsc/internal/checker/memo.go | 43 +++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index c1976733eff81..62835863e6d39 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -130,15 +130,29 @@ func (k memoKey) symbol() *ast.Symbol { type memoEffects struct { effects []func(c *Checker) - marks []*ast.Symbol // Aliases marked referenced, also among effects; see withReferenceMarks deps []*memoEffects parent *memoEffects // Resolution d was most recently added to; avoids duplicate deps - cycles []int32 // Indices in deps of the cycle heads memoCycle added entry *ast.Node // Current node when the computation started, if entered - entered bool // Whether this is the resolution of a computation, not just a set of deps + rare *memoEffectsRare + entered bool // Whether this is the resolution of a computation, not just a set of deps replayed bool } +// memoEffectsRare holds the parts of memoEffects that few computations have, +// kept apart since the effects of every computation in a program can be +// retained at once. +type memoEffectsRare struct { + marks []*ast.Symbol // Aliases marked referenced, also among effects; see withReferenceMarks + cycles []int32 // Indices in deps of the cycle heads memoCycle added +} + +func (f *memoEffects) rareFields() *memoEffectsRare { + if f.rare == nil { + f.rare = &memoEffectsRare{} + } + return f.rare +} + func (f *memoEffects) addDep(d *memoEffects) { if f == d || d.parent == f { return @@ -1247,7 +1261,7 @@ func (c *Checker) replayEffects(f *memoEffects, outerEntry *ast.Node, outerEnter c.currentNode = saveCurrentNode f.effects = nil f.deps = nil - f.cycles = nil + f.rare = nil } // atMemoStartNode reports whether the current node is the one the innermost @@ -1278,7 +1292,8 @@ func (c *Checker) recordEffect(effect func(c *Checker)) { func (c *Checker) recordReferenceMark(symbol *ast.Symbol) { if f := c.currentMemoEffects(); f != nil { f.effects = append(f.effects, func(c *Checker) { c.markAliasSymbolAsReferenced(symbol) }) - f.marks = append(f.marks, symbol) + rare := f.rareFields() + rare.marks = append(rare.marks, symbol) } } @@ -1305,7 +1320,9 @@ func (c *Checker) withReferenceMarks(fn func()) { return } visited[f] = struct{}{} - marks = append(marks, f.marks...) + if f.rare != nil { + marks = append(marks, f.rare.marks...) + } for _, d := range f.deps { collect(d) } @@ -1513,7 +1530,8 @@ func (c *Checker) memoCycle(depth int) { // the mark must also discard this dependency. c.logDepsDiscard(f) } - f.cycles = append(f.cycles, int32(len(f.deps))) + rare := f.rareFields() + rare.cycles = append(rare.cycles, int32(len(f.deps))) f.deps = append(f.deps, outer) outer.parent = f } @@ -1521,7 +1539,10 @@ func (c *Checker) memoCycle(depth int) { // dependsOnCycle reports whether memoCycle made f depend on the cycle head. func (f *memoEffects) dependsOnCycle(head *memoEffects) bool { - for _, i := range f.cycles { + if f.rare == nil { + return false + } + for _, i := range f.rare.cycles { if f.deps[i] == head { return true } @@ -1893,8 +1914,10 @@ func (f *memoEffects) truncateDeps(n int) { } clear(f.deps[n:]) f.deps = f.deps[:n] - for len(f.cycles) != 0 && int(f.cycles[len(f.cycles)-1]) >= n { - f.cycles = f.cycles[:len(f.cycles)-1] + if rare := f.rare; rare != nil { + for len(rare.cycles) != 0 && int(rare.cycles[len(rare.cycles)-1]) >= n { + rare.cycles = rare.cycles[:len(rare.cycles)-1] + } } } From a2eb116d5dd968ef6ae6f5fe44ef281b6c16f0f4 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 03:36:05 -0800 Subject: [PATCH 165/194] Make a result depend on its first computation directly linkState wrapped the effects of the computation that cached a result in a set of deps even when it was the only one, though replaying a set holding only f replays f the same way. The state now points at f until a second computation caches the result, which then gets a set rather than adding to the effects of f, shared with everything else depending on it (seen in angular, about 30MB less). --- tsc/internal/checker/memo.go | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 62835863e6d39..5cb4ad0e402a2 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -953,15 +953,26 @@ func (c *Checker) linkState(state *memoState, f *memoEffects) { if c.logResults() { c.logPendingDiscard(state) } - if state.pending == nil { - state.pending = &memoEffects{} + switch { + case state.pending == nil: + // Replaying f is replaying a set of deps holding only f. + state.pending = f c.memoPendingCount++ c.syncObserving() if c.flushStates != nil { *c.flushStates = append(*c.flushStates, state) } + case state.pending == f: + case state.pending.entered: + // The effects of a computation are shared with whatever else + // depends on it, so they cannot gain a dependency of the result. + deps := &memoEffects{} + deps.addDep(state.pending) + deps.addDep(f) + state.pending = deps + default: + state.pending.addDep(f) } - state.pending.addDep(f) } // observeCell and attachCell are observeMemo and memoAttach for a memo at @@ -1941,7 +1952,8 @@ func (c *Checker) logPendingDiscard(state *memoState) { c.syncObserving() } state.pending = old - if old != nil && len(old.deps) > n { + // Only a set of deps (see linkState) gains deps through its state. + if old != nil && !old.entered && len(old.deps) > n { old.truncateDeps(n) } }}) From cd24318e07c770539998520ba2ac68356c20d743 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 03:40:46 -0800 Subject: [PATCH 166/194] Keep the errors of a memo state out of line Most results with a memo state only have pending effects, and every state stays live until a check reads it, so storing the rare errors list behind a pointer halves the state (seen in angular, about 20MB less). --- tsc/internal/checker/memo.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 5cb4ad0e402a2..011afee5bb706 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -178,7 +178,7 @@ func (f *memoEffects) covers(deps []*memoEffects) bool { // memoState is the memo state of one memoized result. type memoState struct { pending *memoEffects // Effects not yet replayed by a check - errors []*currentNodeError // Errors the computation reported at the current node; see setReported + errors *[]*currentNodeError // Errors the computation reported at the current node, out of line since few have any; see setErrors } // memo is a cached result. Cached checker state must live in a memo so that @@ -1016,7 +1016,7 @@ func (c *Checker) observeState(state *memoState) bool { return false } if state.errors != nil { - c.replayCurrentNodeErrors(state.errors) + c.replayCurrentNodeErrors(*state.errors) } if c.checking { c.replayPending(state) @@ -1090,7 +1090,11 @@ func (s *memoState) setErrors(c *Checker, reports []*currentNodeError) { c.memoErrorStates-- c.syncObserving() } - s.errors = reports + if reports == nil { + s.errors = nil + } else { + s.errors = &reports + } } // replayCurrentNodeErrors reports at the current node the errors that From 6b0f8023906f89528988bbbcc31bafdc06e377a2 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 03:46:36 -0800 Subject: [PATCH 167/194] Retain what a forwarding computation observed in its place A computation with no effects of its own that observed only one result computed at the same node replays exactly what that result does, so the result keeps those effects as its own rather than a node holding one edge to them (seen in angular, about 10MB less). --- tsc/internal/checker/memo.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 011afee5bb706..2fa41ad302cfa 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -1225,6 +1225,11 @@ func (c *Checker) retainEffects(state *memoState, f *memoEffects) { } return } + if state.pending == nil && len(f.effects) == 0 && f.rare == nil && len(f.deps) == 1 && f.deps[0].entered && f.deps[0].entry == f.entry { + // The computation only observed one result computed at the same + // node, whose effects replay the same way without it. + f = f.deps[0] + } if c.logEffects() { c.logPendingDiscard(state) } From 092cb754278bb2bac2d2643b661b3684898dabf1 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 04:53:14 -0800 Subject: [PATCH 168/194] Index memo maps' resolving counts resolvingIndex scanned every in-progress entry of a memo map to find a key, which is quadratic when many entries of one map are in progress at once, as in deeply nested variance measurements. Past a small number of in-progress entries, count them by key so that a lookup for a key that is not in progress is constant time. (seen in nested variance stress) --- tsc/internal/checker/memo.go | 69 ++++++++++++++++++++++++++++++++++-- 1 file changed, 66 insertions(+), 3 deletions(-) diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 2fa41ad302cfa..e2ea1a78e2b0b 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -177,7 +177,7 @@ func (f *memoEffects) covers(deps []*memoEffects) bool { // memoState is the memo state of one memoized result. type memoState struct { - pending *memoEffects // Effects not yet replayed by a check + pending *memoEffects // Effects not yet replayed by a check errors *[]*currentNodeError // Errors the computation reported at the current node, out of line since few have any; see setErrors } @@ -416,6 +416,9 @@ type memoMapSide[K comparable] struct { memoStates map[K]*memoState resolvingKeys []K // Keys of computations in progress without a memo state yet resolvingAt []int32 // Index in Checker.resolutions of each + // The occurrences of each key in resolvingKeys, kept while there are + // many, so that looking one up does not scan them all. + resolvingCount map[K]resolvingOccurrences // If set, keyBits returns well-mixed bits of a key, with which stateKeys // filters the keys that may have a memo state, since few do and looking // up one that does not costs as much as one that does. @@ -602,6 +605,11 @@ func (m *memoMap[K, V]) begin(c *Checker, k K) { } side.resolvingKeys = append(side.resolvingKeys, k) side.resolvingAt = append(side.resolvingAt, int32(len(c.resolutions))) + if side.resolvingCount != nil { + side.countResolving(k, len(side.resolvingKeys)-1) + } else if len(side.resolvingKeys) > resolvingCountMin { + side.countAllResolving() + } c.beginResolution(m, len(side.resolvingKeys)-1) if c.checking && c.memoPendingCount == 0 && c.memoTop|c.currentNodeResolution != 0 && !c.logEffects() { // beginCheckedMemo for the common case, without the calls. The memo @@ -634,8 +642,22 @@ func (m *memoMap[K, V]) resolvingIndex(c *Checker, k K) int { if m.side == nil { return 0 } - for i, key := range m.side.resolvingKeys { - if key != k { + start := 0 + if m.side.resolvingCount != nil { + o, ok := m.side.resolvingCount[k] + if !ok { + return 0 + } + start = int(o.first) + if o.count == 1 { + if j := int(m.side.resolvingAt[start]); j >= c.visibleStart { + return j + 1 + } + return 0 + } + } + for i := start; i < len(m.side.resolvingKeys); i++ { + if m.side.resolvingKeys[i] != k { continue } j := int(m.side.resolvingAt[i]) @@ -664,11 +686,52 @@ func (m *memoMap[K, V]) peekStateAt(i int) *memoState { } func (m *memoMap[K, V]) popState(i int) { + if counts := m.side.resolvingCount; counts != nil { + if i < resolvingCountMin/4 { + m.side.resolvingCount = nil + } else { + for _, k := range m.side.resolvingKeys[i:] { + // Keys are popped last in first out, so the first + // occurrence is popped last. + if o := counts[k]; o.count == 1 { + delete(counts, k) + } else { + o.count-- + counts[k] = o + } + } + } + } clear(m.side.resolvingKeys[i:]) m.side.resolvingKeys = m.side.resolvingKeys[:i] m.side.resolvingAt = m.side.resolvingAt[:i] } +// Number of computations of a memo map in progress above which they are +// counted by key; see resolvingCount. +const resolvingCountMin = 64 + +type resolvingOccurrences struct { + first int32 // Index in resolvingKeys of the first + count int32 +} + +func (side *memoMapSide[K]) countAllResolving() { + side.resolvingCount = make(map[K]resolvingOccurrences, 2*len(side.resolvingKeys)) + for i, k := range side.resolvingKeys { + side.countResolving(k, i) + } +} + +func (side *memoMapSide[K]) countResolving(k K, i int) { + o, ok := side.resolvingCount[k] + if !ok { + o.first = int32(i) + } + o.count++ + side.resolvingCount[k] = o +} + func (m *memoMap[K, V]) state(k K) *memoState { state := m.stateOf(k) if state == nil { From acbe052777fdab4118ddd474d517fd5e32eb7d24 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 04:53:22 -0800 Subject: [PATCH 169/194] Measure circular variances once per strongly connected component When a variance measurement re-entered one already in progress, the inner measurement restarted from the canonical (smallest) type of the cycle with the stack hidden. With cycles nested in cycles, each restart re-measured every type still in progress, so the work multiplied with the nesting depth. Now re-entry instead records the lowest stack index it reached, as in Tarjan's algorithm, and returns provisional variances. When a measurement finishes as the root of its strongly connected component and the component's canonical type is not the root, what was cached since the root began is discarded and the canonical type is measured once with the stack hidden; the root then adopts its result. The result is what main computes when the canonical type is checked first, and each component is measured at most about twice. The elaboration in varianceCircularConsistency now goes through the 'queries' property again, matching main and TypeScript 6.0. (seen in nested variance stress) --- tsc/internal/checker/checker.go | 9 ++ tsc/internal/checker/memo.go | 5 +- tsc/internal/checker/relater.go | 127 ++++++++++++++---- .../varianceCircularConsistency.errors.txt | 12 +- 4 files changed, 118 insertions(+), 35 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index a3a86f12e712c..2821194d72e7a 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -575,6 +575,13 @@ type VarianceStackEntry struct { symbol *ast.Symbol typeParameters []*Type resolution int // Index in Checker.resolutions of the resolution of the measurement + // The lowest index in the variance stack of a measurement in progress + // that this one or one it reached needed, and the smallest type in the + // circularity so far, as in Tarjan's algorithm for strongly connected + // components. + low int + min *ast.Symbol + minTypeParameters []*Type } type ResolvingObjectType struct { @@ -695,11 +702,13 @@ type Checker struct { currentNodeErrorCollectors int // Number of computations collecting currentNodeErrors currentNodeErrorsCyclic bool // Whether a cycle was observed while collecting currentNodeErrors; see endCurrentNodeErrors discardLog []discardEntry // Restores what was cached while anything may be discarded; see "Discard log" in memo.go + discardLogTrims int // Number of times trimDiscardLog cleared discardLog circularityMark int // Length of discard log when the cycle in progress was detected innerCycles []innerCycle // Cycles detected inside the one in progress; see extendCircularity cycleParticipants []TypeResolution // Computations that observed a cycle in progress effectsMarkDepth int // 1 + resolution index of the innermost effects mark that may be discarded, or 0 varianceStack []VarianceStackEntry + varianceCycleRoot int // 1 + index in varianceStack of the outermost measurement re-entered in progress, or 0; see getRecursiveVariances incompleteVariances int // 1 + resolution index of the outermost measurement whose incomplete variances were observed, or 0; see getRecursiveVariances measuringVariances bool // The comparison about to start measures variances; see isMarkerTypeAssignableTo flushBuf []*memoState diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index e2ea1a78e2b0b..799453b11ed1f 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -1728,13 +1728,13 @@ type discardEntry struct { // logResults reports whether caching a result must be logged in the discard // log. func (c *Checker) logResults() bool { - return c.circularityStart != 0 + return c.circularityStart != 0 || c.varianceCycleRoot != 0 } // logEffects reports whether changing the effects of a result must be logged // in the discard log. func (c *Checker) logEffects() bool { - return c.circularityStart != 0 || c.effectsMarkDepth != 0 + return c.circularityStart != 0 || c.effectsMarkDepth != 0 || c.varianceCycleRoot != 0 } // discardLogSince restores everything logged in the discard log since @@ -1754,6 +1754,7 @@ func (c *Checker) discardLogSince(start int) { // trimDiscardLog clears the discard log if nothing in progress can discard. func (c *Checker) trimDiscardLog() { if !c.logEffects() && len(c.discardLog) != 0 { + c.discardLogTrims++ clear(c.discardLog) c.discardLog = c.discardLog[:0] } diff --git a/tsc/internal/checker/relater.go b/tsc/internal/checker/relater.go index 97ad0b0c13d57..1ac5720603e22 100644 --- a/tsc/internal/checker/relater.go +++ b/tsc/internal/checker/relater.go @@ -1544,20 +1544,57 @@ func (c *Checker) getVariancesWorker(symbol *ast.Symbol, typeParameters []*Type) }() } links.variances.begin(c) + // The measurement may have to be discarded; see below. What it caches is + // logged from when it re-enters a measurement in progress, as what it + // caches before observes nothing in progress. + mark := c.markVarianceDiscard() saveResolutionStart := c.resolutionStart if len(c.varianceStack) == 0 { c.resolutionStart = len(c.resolutions) } - c.varianceStack = append(c.varianceStack, VarianceStackEntry{symbol: symbol, typeParameters: typeParameters, resolution: len(c.resolutions)}) + index := len(c.varianceStack) + c.varianceStack = append(c.varianceStack, VarianceStackEntry{symbol: symbol, typeParameters: typeParameters, resolution: len(c.resolutions), low: index, min: symbol, minTypeParameters: typeParameters}) c.beginTypeResolution(symbol, TypeSystemPropertyNameVariances) variances := c.measureVariances(symbol, typeParameters, links) - // A restart from a circularity (see getRecursiveVariances) may already - // have measured this type, from the canonical entry of the circularity. - if restarted := links.variances.get(c); len(restarted) != 0 { + e := c.varianceStack[index] + if e.low == index && e.min != symbol && !c.isYieldingTo(e.min, TypeSystemPropertyNameVariances) { + // The measurement entered a circularity, of which this type is the + // first entered, at a type other than the canonical entry. What it + // measured depends on where the circularity was entered, so it is + // discarded, and the circularity measured again from the canonical + // entry, as if that type had been measured first, with nothing in + // progress visible. That measures this type as it reaches it. + c.discardVariancesSince(mark) + saveVarianceStack, saveCycleRoot := c.varianceStack, c.varianceCycleRoot + c.varianceStack, c.varianceCycleRoot = nil, 0 + c.beginCycleYield(e.min, TypeSystemPropertyNameVariances, -1, len(c.resolutions)) + c.getVariancesWorker(e.min, e.minTypeParameters) + c.endCycleYield() + c.varianceStack, c.varianceCycleRoot = saveVarianceStack, saveCycleRoot + variances = links.variances.get(c) + if len(variances) == 0 { + variances = c.measureVariances(symbol, typeParameters, links) + } + } else if restarted := links.variances.get(c); len(restarted) != 0 { + // A measurement from the canonical entry of a circularity measured + // this type while its own measurement was in progress, hidden. variances = restarted } links.variances.set(c, variances) - c.varianceStack = c.varianceStack[:len(c.varianceStack)-1] + if c.varianceCycleRoot == index+1 { + c.varianceCycleRoot = 0 + c.trimDiscardLog() + c.resumeChecking() + } + c.varianceStack = c.varianceStack[:index] + if index != 0 && e.low < index { + // This type is in a circularity with the measurement that reached it. + parent := &c.varianceStack[index-1] + parent.low = min(parent.low, e.low) + if c.compareSymbols(e.min, parent.min) < 0 { + parent.min, parent.minTypeParameters = e.min, e.minTypeParameters + } + } c.popTypeResolution() if len(c.varianceStack) == 0 { c.resolutionStart = saveResolutionStart @@ -1570,39 +1607,71 @@ func (c *Checker) getVariancesWorker(symbol *ast.Symbol, typeParameters []*Type) // index of the variance stack, whose measurement is in progress. Occurrences of type parameters // nested in such recursive references are not measured: the variances are an empty slice, which // comparisons treat as unknown. Since the variances measured then depend on where the -// circularity was entered, it is measured from a canonical entry, the type with the "smallest" -// symbol, as if that type had been measured first: if that is not the type re-entered, it is -// measured again with nothing in progress visible, measuring the others in the circularity as -// it reaches them, and the measurements in progress then take those results. +// circularity was entered, each circularity (a strongly connected component of types whose +// measurements need each other's variances) is measured from a canonical entry, the type with +// the "smallest" symbol, as if that type had been measured first: the measurement of the type +// at which it was entered finds the canonical entry once it finishes (see getVariancesWorker). func (c *Checker) getRecursiveVariances(stackIndex int) []VarianceFlags { - minIndex := stackIndex - for i := stackIndex + 1; i < len(c.varianceStack); i++ { - if c.compareSymbols(c.varianceStack[i].symbol, c.varianceStack[minIndex].symbol) < 0 { - minIndex = i - } - } - if minIndex > stackIndex && !c.isYieldingTo(c.varianceStack[minIndex].symbol, TypeSystemPropertyNameVariances) { - entry := c.varianceStack[minIndex] - saveVarianceStack := c.varianceStack - c.varianceStack = nil - c.beginCycleYield(entry.symbol, TypeSystemPropertyNameVariances, -1, len(c.resolutions)) - c.getVariancesWorker(entry.symbol, entry.typeParameters) - c.endCycleYield() - c.varianceStack = saveVarianceStack - } - if variances := c.varianceLinks.Get(c.varianceStack[stackIndex].symbol).variances.get(c); variances != nil { - return variances - } + top := &c.varianceStack[len(c.varianceStack)-1] + top.low = min(top.low, stackIndex) // The variances are incomplete. Only comparisons and inferences read // variances: a comparison observing them is not cached, and once the // outermost one completes, what reads its result is discarded when the // measurement re-entered finishes, unless it is one measuring variances, - // which are kept, since each is measured from the canonical entry - // whichever type is entered first. + // which are kept if measured from the canonical entry. What is cached + // from now on until the measurement re-entered finishes is logged, so + // that it can be discarded otherwise. + if c.varianceCycleRoot == 0 { + if c.checking && c.memoTop != 0 { + c.recordFromCheck() + } + c.varianceCycleRoot = stackIndex + 1 + } else { + c.varianceCycleRoot = min(c.varianceCycleRoot, stackIndex+1) + } c.incompleteVariances = minIncompleteVariances(c.incompleteVariances, c.varianceStack[stackIndex].resolution+1) return []VarianceFlags{} } +// A varianceDiscardMark is the state when a measurement of variances began, +// to which it is discarded if it entered a circularity at a type other than +// the canonical entry; see getVariancesWorker. +type varianceDiscardMark struct { + discardLog int + discardLogTrims int + participants int + circularityStart int + resolutionIndex int // Index in resolutions of the measurement's memo +} + +func (c *Checker) markVarianceDiscard() varianceDiscardMark { + return varianceDiscardMark{ + discardLog: len(c.discardLog), + discardLogTrims: c.discardLogTrims, + participants: len(c.cycleParticipants), + circularityStart: c.circularityStart, + resolutionIndex: c.memoTop - 1, + } +} + +// discardVariancesSince discards the results cached since m, like +// discardSince, and all the effects the measurement recorded. +func (c *Checker) discardVariancesSince(m varianceDiscardMark) { + start := m.discardLog + if c.discardLogTrims != m.discardLogTrims { + // Everything logged is from after the mark. + start = 0 + } + c.discardLogSince(start) + c.cycleParticipants = c.cycleParticipants[:min(m.participants, len(c.cycleParticipants))] + c.circularityStart = m.circularityStart + if f := c.resolutions[m.resolutionIndex].effects; f != nil { + clear(f.effects) + f.effects = f.effects[:0] + f.truncateDeps(0) + } +} + func minIncompleteVariances(a int, b int) int { if a == 0 || b != 0 && b < a { return b diff --git a/tsc/testdata/baselines/reference/compiler/varianceCircularConsistency.errors.txt b/tsc/testdata/baselines/reference/compiler/varianceCircularConsistency.errors.txt index 060c23148616c..07e45f9bb2d02 100644 --- a/tsc/testdata/baselines/reference/compiler/varianceCircularConsistency.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/varianceCircularConsistency.errors.txt @@ -6,14 +6,16 @@ varianceCircularConsistency.ts(25,7): error TS2322: Type 'EntryPoint) => void' is not assignable to type '(props: Props, never, never, {}>) => void'. Types of parameters 'props' and 'props' are incompatible. Type 'Props, never, never, {}>' is not assignable to type 'Props<{ q: { readonly variables: { slug: string; }; }; }, never, never, {}>'. - Property 'q' is missing in type 'Record' but required in type '{ q: { readonly variables: { slug: string; }; }; }'. + Types of property 'queries' are incompatible. + Property 'q' is missing in type 'Record' but required in type '{ q: { readonly variables: { slug: string; }; }; }'. varianceCircularConsistency.ts(26,7): error TS2322: Type 'Ref>' is not assignable to type 'Ref, never, never, {}>>'. Type 'EntryPointComponent<{ q: { readonly variables: { slug: string; }; }; }, never, never, {}>' is not assignable to type 'EntryPointComponent, never, never, {}>'. Type '(props: Props<{ q: { readonly variables: { slug: string; }; }; }, never, never, {}>) => void' is not assignable to type 'EntryPointComponent, never, never, {}>'. Type '(props: Props<{ q: { readonly variables: { slug: string; }; }; }, never, never, {}>) => void' is not assignable to type '(props: Props, never, never, {}>) => void'. Types of parameters 'props' and 'props' are incompatible. Type 'Props, never, never, {}>' is not assignable to type 'Props<{ q: { readonly variables: { slug: string; }; }; }, never, never, {}>'. - Property 'q' is missing in type 'Record' but required in type '{ q: { readonly variables: { slug: string; }; }; }'. + Types of property 'queries' are incompatible. + Property 'q' is missing in type 'Record' but required in type '{ q: { readonly variables: { slug: string; }; }; }'. ==== varianceCircularConsistency.ts (2 errors) ==== @@ -51,7 +53,8 @@ varianceCircularConsistency.ts(26,7): error TS2322: Type 'Ref) => void' is not assignable to type '(props: Props, never, never, {}>) => void'. !!! error TS2322: Types of parameters 'props' and 'props' are incompatible. !!! error TS2322: Type 'Props, never, never, {}>' is not assignable to type 'Props<{ q: { readonly variables: { slug: string; }; }; }, never, never, {}>'. -!!! error TS2322: Property 'q' is missing in type 'Record' but required in type '{ q: { readonly variables: { slug: string; }; }; }'. +!!! error TS2322: Types of property 'queries' are incompatible. +!!! error TS2322: Property 'q' is missing in type 'Record' but required in type '{ q: { readonly variables: { slug: string; }; }; }'. !!! related TS2728 varianceCircularConsistency.ts:23:40: 'q' is declared here. const root: EntryPoint["root"] = e.root; ~~~~ @@ -61,6 +64,7 @@ varianceCircularConsistency.ts(26,7): error TS2322: Type 'Ref) => void' is not assignable to type '(props: Props, never, never, {}>) => void'. !!! error TS2322: Types of parameters 'props' and 'props' are incompatible. !!! error TS2322: Type 'Props, never, never, {}>' is not assignable to type 'Props<{ q: { readonly variables: { slug: string; }; }; }, never, never, {}>'. -!!! error TS2322: Property 'q' is missing in type 'Record' but required in type '{ q: { readonly variables: { slug: string; }; }; }'. +!!! error TS2322: Types of property 'queries' are incompatible. +!!! error TS2322: Property 'q' is missing in type 'Record' but required in type '{ q: { readonly variables: { slug: string; }; }; }'. !!! related TS2728 varianceCircularConsistency.ts:23:40: 'q' is declared here. \ No newline at end of file From 2f756dce9fd673e25f21f820a3db1eb346500dd6 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 05:01:15 -0800 Subject: [PATCH 170/194] fixup! Make a result depend on its first computation directly --- tsc/internal/checker/memo.go | 1 + 1 file changed, 1 insertion(+) diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 799453b11ed1f..af981bb010287 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -1026,6 +1026,7 @@ func (c *Checker) linkState(state *memoState, f *memoEffects) { *c.flushStates = append(*c.flushStates, state) } case state.pending == f: + // Already depends on f. case state.pending.entered: // The effects of a computation are shared with whatever else // depends on it, so they cannot gain a dependency of the result. From cc9b84c48d4d67e817aeb0f407cfe2a44a854a6d Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 08:31:23 -0800 Subject: [PATCH 171/194] Make computations depend only on the lowest cycle head they observe When a computation re-entered one in progress, memoCycle made every computation above it depend on it, stopping only at one that already depended on that same head. With cycles nested in cycles, re-entries reach many different heads, so each walked most of the stack and every computation gained a dependency per head. A computation in progress above a cycle head becomes part of the head's effects, so depending on the lowest head covers every head above it. Record the head's index with each dependency, add one only for a lower head than the computation already depends on, and stop the walk at the first computation that depends on this head or one below it. (seen in nested variance stress) --- tsc/internal/checker/memo.go | 44 ++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index af981bb010287..80bf483ff5171 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -142,8 +142,8 @@ type memoEffects struct { // kept apart since the effects of every computation in a program can be // retained at once. type memoEffectsRare struct { - marks []*ast.Symbol // Aliases marked referenced, also among effects; see withReferenceMarks - cycles []int32 // Indices in deps of the cycle heads memoCycle added + marks []*ast.Symbol // Aliases marked referenced, also among effects; see withReferenceMarks + cycles []memoCycleDep // The cycle heads memoCycle added to deps, from highest to lowest } func (f *memoEffects) rareFields() *memoEffectsRare { @@ -1589,10 +1589,14 @@ func (c *Checker) memoCycle(depth int) { return } var outer *memoEffects - // Walk down from the top, stopping at a computation an earlier reentry - // already made depend on outer: the computations below it were in - // progress then too, so they depend on outer as well. Without this, - // every reentry of a cycle would walk, and grow, the whole stack. + // A computation that depends on a cycle head depends on every computation + // in progress above the head, as their effects become part of the head's. + // So walk down from the top, stopping at a computation an earlier reentry + // already made depend on outer or a head below it: the computations below + // it were in progress then too, so they depend on that head as well. + // Without this, every reentry of a cycle would walk, and grow, the whole + // stack. + head := depth - 1 for i := len(c.resolutions) - 1; i >= depth; i-- { if !c.resolutions[i].memo { continue @@ -1606,7 +1610,7 @@ func (c *Checker) memoCycle(depth int) { if f == outer || outer.parent == f { continue } - if f.dependsOnCycle(outer) { + if h := f.cycleHead(); h >= 0 && h <= head { break } if i < c.effectsMarkDepth-1 { @@ -1615,23 +1619,25 @@ func (c *Checker) memoCycle(depth int) { c.logDepsDiscard(f) } rare := f.rareFields() - rare.cycles = append(rare.cycles, int32(len(f.deps))) + rare.cycles = append(rare.cycles, memoCycleDep{dep: int32(len(f.deps)), head: int32(head)}) f.deps = append(f.deps, outer) outer.parent = f } } -// dependsOnCycle reports whether memoCycle made f depend on the cycle head. -func (f *memoEffects) dependsOnCycle(head *memoEffects) bool { - if f.rare == nil { - return false - } - for _, i := range f.rare.cycles { - if f.deps[i] == head { - return true - } +// A memoCycleDep is a dependency memoCycle added on a cycle head. +type memoCycleDep struct { + dep int32 // Index in deps + head int32 // Index of the head's resolution +} + +// cycleHead returns the index of the resolution of the lowest cycle head that +// memoCycle made f depend on, or -1. +func (f *memoEffects) cycleHead() int { + if f.rare == nil || len(f.rare.cycles) == 0 { + return -1 } - return false + return int(f.rare.cycles[len(f.rare.cycles)-1].head) } // logDepsDiscard logs the dependencies of a computation in progress below the @@ -2000,7 +2006,7 @@ func (f *memoEffects) truncateDeps(n int) { clear(f.deps[n:]) f.deps = f.deps[:n] if rare := f.rare; rare != nil { - for len(rare.cycles) != 0 && int(rare.cycles[len(rare.cycles)-1]) >= n { + for len(rare.cycles) != 0 && int(rare.cycles[len(rare.cycles)-1].dep) >= n { rare.cycles = rare.cycles[:len(rare.cycles)-1] } } From b32df3f63f641d00e06d87dcdecce8c635e0e8d9 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 08:47:19 -0800 Subject: [PATCH 172/194] Find a variance measurement in progress without scanning the stack Relating type references and aliases now asks whether the target's variances are being measured, which scanned the whole variance stack on every comparison made during a measurement. Index the stack by symbol, restoring a symbol's previous index when its measurement ends, so that a measurement hidden with the rest of the stack is still not found. (seen in nested variance stress) --- tsc/internal/checker/checker.go | 10 ++++++---- tsc/internal/checker/relater.go | 26 ++++++++++++++++++++------ 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 2821194d72e7a..548c4b44bb629 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -574,7 +574,8 @@ type WideningContext struct { type VarianceStackEntry struct { symbol *ast.Symbol typeParameters []*Type - resolution int // Index in Checker.resolutions of the resolution of the measurement + resolution int // Index in Checker.resolutions of the resolution of the measurement + prevStackIndex int32 // varianceStackIndex of symbol before the measurement // The lowest index in the variance stack of a measurement in progress // that this one or one it reached needed, and the smallest type in the // circularity so far, as in Tarjan's algorithm for strongly connected @@ -708,9 +709,10 @@ type Checker struct { cycleParticipants []TypeResolution // Computations that observed a cycle in progress effectsMarkDepth int // 1 + resolution index of the innermost effects mark that may be discarded, or 0 varianceStack []VarianceStackEntry - varianceCycleRoot int // 1 + index in varianceStack of the outermost measurement re-entered in progress, or 0; see getRecursiveVariances - incompleteVariances int // 1 + resolution index of the outermost measurement whose incomplete variances were observed, or 0; see getRecursiveVariances - measuringVariances bool // The comparison about to start measures variances; see isMarkerTypeAssignableTo + varianceStackIndex map[*ast.Symbol]int32 // 1 + the index in varianceStack of the measurement of a symbol in progress, if any + varianceCycleRoot int // 1 + index in varianceStack of the outermost measurement re-entered in progress, or 0; see getRecursiveVariances + incompleteVariances int // 1 + resolution index of the outermost measurement whose incomplete variances were observed, or 0; see getRecursiveVariances + measuringVariances bool // The comparison about to start measures variances; see isMarkerTypeAssignableTo flushBuf []*memoState resumeBuf []int deferredAttach []*memoState // See attachState diff --git a/tsc/internal/checker/relater.go b/tsc/internal/checker/relater.go index 1ac5720603e22..852f6f7592968 100644 --- a/tsc/internal/checker/relater.go +++ b/tsc/internal/checker/relater.go @@ -1553,7 +1553,11 @@ func (c *Checker) getVariancesWorker(symbol *ast.Symbol, typeParameters []*Type) c.resolutionStart = len(c.resolutions) } index := len(c.varianceStack) - c.varianceStack = append(c.varianceStack, VarianceStackEntry{symbol: symbol, typeParameters: typeParameters, resolution: len(c.resolutions), low: index, min: symbol, minTypeParameters: typeParameters}) + c.varianceStack = append(c.varianceStack, VarianceStackEntry{symbol: symbol, typeParameters: typeParameters, resolution: len(c.resolutions), prevStackIndex: c.varianceStackIndex[symbol], low: index, min: symbol, minTypeParameters: typeParameters}) + if c.varianceStackIndex == nil { + c.varianceStackIndex = make(map[*ast.Symbol]int32) + } + c.varianceStackIndex[symbol] = int32(index + 1) c.beginTypeResolution(symbol, TypeSystemPropertyNameVariances) variances := c.measureVariances(symbol, typeParameters, links) e := c.varianceStack[index] @@ -1587,6 +1591,11 @@ func (c *Checker) getVariancesWorker(symbol *ast.Symbol, typeParameters []*Type) c.resumeChecking() } c.varianceStack = c.varianceStack[:index] + if e.prevStackIndex != 0 { + c.varianceStackIndex[symbol] = e.prevStackIndex + } else { + delete(c.varianceStackIndex, symbol) + } if index != 0 && e.low < index { // This type is in a circularity with the measurement that reached it. parent := &c.varianceStack[index-1] @@ -1762,13 +1771,18 @@ func (c *Checker) isMarkerTypeAssignableTo(source *Type, target *Type) bool { return result } +// getVarianceStackIndex returns the index in the variance stack of the +// measurement of the variances of symbol in progress, or -1. A measurement +// hidden with the rest of the stack is not in progress. func (c *Checker) getVarianceStackIndex(symbol *ast.Symbol) int { - for i, entry := range c.varianceStack { - if entry.symbol == symbol { - return i - } + if len(c.varianceStack) == 0 { + return -1 + } + i := int(c.varianceStackIndex[symbol]) - 1 + if i < 0 || i >= len(c.varianceStack) || c.varianceStack[i].symbol != symbol { + return -1 } - return -1 + return i } func (c *Checker) createMarkerType(symbol *ast.Symbol, source *Type, target *Type) *Type { From 1904840e9056d87ecee37e65833b8e6d065caf4c Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 14:52:26 -0800 Subject: [PATCH 173/194] Reuse the caller's read of the outermost relation result isTypeRelatedTo reads the cached result for the relation key before it starts a comparison, and beginTop read it again in case a comparison made in between cached one. Most comparisons cache nothing in between, so memoMap now counts its writes, and beginTop reads the result again only if the relation was written since the caller read it. This avoids a map lookup per comparison that reaches recursiveTypeRelatedTo. (seen in VS Code check time) --- tsc/internal/checker/memo.go | 6 ++++++ tsc/internal/checker/relater.go | 15 +++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 80bf483ff5171..52d2649ec3723 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -410,6 +410,9 @@ type memoMap[K comparable, V any] struct { _ memoNoCopy memoEntries map[K]V side *memoMapSide[K] + // The number of writes to memoEntries, with which a caller can tell + // that an entry it read is still current without reading it again. + writes uint32 } type memoMapSide[K comparable] struct { @@ -528,6 +531,7 @@ func (m *memoMap[K, V]) set(c *Checker, k K, v V) { func (m *memoMap[K, V]) logDiscard(c *Checker, k K) { old, ok := m.memoEntries[k] c.discardLog = append(c.discardLog, discardEntry{nil, func() { + m.writes++ if ok { m.memoEntries[k] = old } else { @@ -560,6 +564,7 @@ func (m *memoMap[K, V]) setIdentity(c *Checker, k K, v V) { m.memoEntries = make(map[K]V) } m.memoEntries[k] = v + m.writes++ m.attach(c, k) } @@ -581,6 +586,7 @@ func (m *memoMap[K, V]) intern(k K, v V) { m.memoEntries = make(map[K]V) } m.memoEntries[k] = v + m.writes++ } // compute computes and caches the result for k in a computation of its own. diff --git a/tsc/internal/checker/relater.go b/tsc/internal/checker/relater.go index 852f6f7592968..0b620146e6c06 100644 --- a/tsc/internal/checker/relater.go +++ b/tsc/internal/checker/relater.go @@ -407,6 +407,7 @@ func (c *Checker) checkTypeRelatedToWithKey( r.topSource, r.topTarget = source, target if hasKey { r.topKey, r.topConstrained, r.topHasKey = id, constrained, true + r.topEntry, r.topEntryWrites, r.topEntryRead = entry, relation.results.writes, true } var result Ternary if entry&RelationComparisonResultOverflow != 0 { @@ -3014,7 +3015,9 @@ type Relater struct { topEntry RelationComparisonResult // The result cached for topKey when the comparison began topEntryValid bool // Whether topEntry is unused, and so still the cached result topHasKey bool // Whether topKey and topConstrained are known - topBegun bool // Whether the comparison began its computation; see beginTop + topEntryRead bool // Whether the caller read topEntry, when the relation had topEntryWrites writes + topEntryWrites uint32 + topBegun bool // Whether the comparison began its computation; see beginTop sourceStack []*Type targetStack []*Type // sourceDepths and targetDepths are the depths of the comparisons that @@ -3070,8 +3073,12 @@ func (r *Relater) beginTop() bool { r.topKey, r.topConstrained = c.getRelationKey(r.topSource, r.topTarget, IntersectionStateNone, r.relation == c.identityRelation, false /*ignoreConstraints*/) r.topHasKey = true } - // A comparison made before now may have cached a result for the key. - r.topEntry, r.topEntryValid = r.relation.get(c, r.topKey), true + // A comparison made before now may have cached a result for the key, + // unless nothing was cached since the caller read it. + if !r.topEntryRead || r.topEntryWrites != r.relation.results.writes { + r.topEntry = r.relation.get(c, r.topKey) + } + r.topEntryValid = true if r.topEntry&RelationComparisonResultOverflow != 0 { r.topBegun = false r.overflow = true @@ -3105,7 +3112,7 @@ func (c *Checker) putRelater(r *Relater) { r.depth, r.low, r.truncated = 0, 0, false r.topSource, r.topTarget = nil, nil r.topKey, r.topConstrained = CacheHashKey{}, false - r.topEntry, r.topEntryValid, r.topHasKey, r.topBegun = RelationComparisonResultNone, false, false, false + r.topEntry, r.topEntryValid, r.topHasKey, r.topBegun, r.topEntryRead = RelationComparisonResultNone, false, false, false, false r.expandingFlags, r.expandingSourceDepth, r.expandingTargetDepth = ExpandingFlagsNone, 0, 0 r.overflow = false r.relationCount = 0 From 96ff5e70c062e1efc0f120851ba81f15b1f19401 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 19:00:29 -0800 Subject: [PATCH 174/194] Find runs of unreachable statements once per block Every statement of a run of unreachable statements reports the whole run, so each one found the run by scanning its neighbors. Checking a run of n statements thus took quadratic time: 20000 unreachable statements took 2.85s to check, against 0.22s when the runs of a block are found together and cached. (seen in review) --- tsc/internal/checker/checker.go | 60 +++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 17 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 548c4b44bb629..567940a2833c1 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -1045,6 +1045,7 @@ type memoStore struct { ambientModulesOnce sync.Once ambientModules []*ast.Symbol reportedUnreachableNodes memoSet[*ast.Node] + unreachableRuns memoMap[*ast.Node, map[*ast.Node]unreachableRun] checkedRegularExpressions memoSet[*ast.Node] nonExistentPropertyNodes collections.Set[*ast.Node] // Property names reported as nonexistent deferredDiagnosticCallbacks []func(c *Checker) @@ -2688,23 +2689,10 @@ func (c *Checker) checkSourceElementUnreachable(node *ast.Node) bool { // the same range whichever statement of the run is checked first. startNode := node endNode := node - parent := node.Parent - if parent.CanHaveStatements() { - statements := parent.Statements() - if offset := slices.Index(statements, node); offset >= 0 { - isUnreachable := func(n *ast.Node) bool { - return ast.IsPotentiallyExecutableNode(n) && c.isSourceElementUnreachable(n) - } - first := offset - for first > 0 && isUnreachable(statements[first-1]) { - first-- - } - last := offset - for last < len(statements)-1 && isUnreachable(statements[last+1]) { - last++ - } - startNode = statements[first] - endNode = statements[last] + if parent := node.Parent; parent.CanHaveStatements() { + if run, ok := c.getUnreachableRuns(parent)[node]; ok { + startNode = run.start + endNode = run.end } } c.reportedUnreachableNodes.once(c, startNode, func() { @@ -2716,6 +2704,44 @@ func (c *Checker) checkSourceElementUnreachable(node *ast.Node) bool { return true } +type unreachableRun struct { + start *ast.Node + end *ast.Node +} + +// getUnreachableRuns returns the run of unreachable statements containing +// each unreachable statement of container. The runs are found together, so +// checking every statement of a long run does not rescan it each time. +func (c *Checker) getUnreachableRuns(container *ast.Node) map[*ast.Node]unreachableRun { + if runs, ok := c.unreachableRuns.get(c, container); ok { + return runs + } + return c.unreachableRuns.compute(c, container, func() map[*ast.Node]unreachableRun { + var runs map[*ast.Node]unreachableRun + isUnreachable := func(n *ast.Node) bool { + return ast.IsPotentiallyExecutableNode(n) && c.isSourceElementUnreachable(n) + } + statements := container.Statements() + for i := 0; i < len(statements); i++ { + if !isUnreachable(statements[i]) { + continue + } + first := i + for i+1 < len(statements) && isUnreachable(statements[i+1]) { + i++ + } + run := unreachableRun{statements[first], statements[i]} + if runs == nil { + runs = make(map[*ast.Node]unreachableRun) + } + for _, statement := range statements[first : i+1] { + runs[statement] = run + } + } + return runs + }) +} + func (c *Checker) isSourceElementUnreachable(node *ast.Node) bool { // Precondition: ast.IsPotentiallyExecutableNode is true if node.Flags&ast.NodeFlagsUnreachable != 0 { From d548a833164e647550ebad073714a42683c48071 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 19:00:41 -0800 Subject: [PATCH 175/194] Discard cached exports and instantiation expressions with cycles A result cached while a cycle is in progress may be computed from an incomplete result of the cycle, so it must be discarded when the cycle ends. The exports of a module, the module of the implicit JSX import, and the type of an instantiation expression were kept in plain fields whose writes were not logged for discard, so they kept whatever the first order of computing them produced. Entries interned by pointer own cached results like links do, but the check that cached state is memoized did not look at them, which is how the instantiation expression slipped through. It now does. The loop fixed point it then finds is kept on purpose: analyzing the loop again after a cycle starts from another reference and can reach another fixed point, which made controlFlowIterationErrors depend on order. (seen in review) --- tsc/internal/checker/checker.go | 7 +-- tsc/internal/checker/checker_test.go | 64 +++++++++++++++++++--------- tsc/internal/checker/flow.go | 3 ++ tsc/internal/checker/jsx.go | 2 +- tsc/internal/checker/memo.go | 11 +++++ 5 files changed, 62 insertions(+), 25 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 567940a2833c1..58baa17cbd2f7 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -11429,7 +11429,7 @@ func (c *Checker) getInstantiationExpressionTypeCached(exprType *Type, node *ast return result } result := getInstantiatedType(exprType) - entry.t = result + c.setFlagMemoValue(memoKeyOf(entry, memoInstantiationExpressionType), &entry.t, result) var errorType *Type if hasSomeApplicableSignature { errorType = nonApplicableType @@ -17411,8 +17411,9 @@ func (c *Checker) getExportsOfModule(moduleSymbol *ast.Symbol) ast.SymbolTable { func (c *Checker) getExportsOfModuleCached(moduleSymbol *ast.Symbol, links *ModuleSymbolLinks) ast.SymbolTable { if links.resolvedExports == nil { exports, typeOnlyExportStarMap := c.getExportsOfModuleWorker(moduleSymbol) - links.resolvedExports = exports - links.typeOnlyExportStarMap = typeOnlyExportStarMap + key := memoKeyOf(links, memoModuleExports) + c.setFlagMemoValue(key, &links.typeOnlyExportStarMap, typeOnlyExportStarMap) + c.setFlagMemoValue(key, &links.resolvedExports, exports) } return links.resolvedExports } diff --git a/tsc/internal/checker/checker_test.go b/tsc/internal/checker/checker_test.go index dd3700bec829f..4b5549135fa15 100644 --- a/tsc/internal/checker/checker_test.go +++ b/tsc/internal/checker/checker_test.go @@ -244,19 +244,38 @@ func TestCachedStateIsMemoized(t *testing.T) { files, err := filepath.Glob("*.go") assert.NilError(t, err) seen := make(map[string]bool) + var parsed []*goast.File + // Entries interned by pointer own the results cached in them. + interned := make(map[string]bool) for _, name := range files { if strings.HasSuffix(name, "_test.go") { continue } file, err := parser.ParseFile(fset, name, nil, parser.SkipObjectResolution) assert.NilError(t, err) + parsed = append(parsed, file) + goast.Inspect(file, func(n goast.Node) bool { + if e, ok := n.(*goast.IndexListExpr); ok { + if ident, ok := e.X.(*goast.Ident); ok && ident.Name == "internMap" && len(e.Indices) == 2 { + if star, ok := e.Indices[1].(*goast.StarExpr); ok { + if elem, ok := star.X.(*goast.Ident); ok { + interned[elem.Name] = true + } + } + } + } + return true + }) + } + for _, file := range parsed { + name := filepath.Base(fset.File(file.Pos()).Name()) goast.Inspect(file, func(n goast.Node) bool { spec, ok := n.(*goast.TypeSpec) if !ok { return true } st, ok := spec.Type.(*goast.StructType) - if !ok || slices.Contains(notCacheOwners, spec.Name.Name) || name != "types.go" && !strings.HasSuffix(spec.Name.Name, "Links") && spec.Name.Name != "memoStore" { + if !ok || slices.Contains(notCacheOwners, spec.Name.Name) || name != "types.go" && !strings.HasSuffix(spec.Name.Name, "Links") && spec.Name.Name != "memoStore" && !interned[spec.Name.Name] { return true } for _, field := range st.Fields.List { @@ -296,23 +315,24 @@ func isMemoType(expr goast.Expr) bool { } const ( - unmemoizedImmutable = "Set when the store is created" - unmemoizedContainer = "Holds links, whose fields are checked separately" - unmemoizedCounter = "Allocation counter for IDs and statistics" - unmemoizedInterned = "Interned type whose creation has no effects" - unmemoizedProgram = "Derived from the program only; computing it has no effects" - unmemoizedMemoState = "State of the memos themselves" - unmemoizedChecking = "Written only by checks" - unmemoizedCreated = "Set when the entity owning the links is created" - unmemoizedSyntax = "Derived from syntax and options only; computing it has no effects" - unmemoizedGuarded = "Written only within the memoized computation it is part of" - unmemoizedEmit = "Emit resolver state, written only while resolving for emit" - unmemoizedMark = "Written only by checks and emit marking, and read only by emit" - unmemoizedNodeBuilder = "Node builder state, scoped to one node builder" - unmemoizedNodeFlags = "Each flag is memo-guarded, reporting-only, or set whenever a node is checked and read only by deferred diagnostics, after the whole file is checked" - unmemoizedFlagMemo = "Flag memo, accounted for like a memo under a key naming its entity and field" - unmemoizedEntityFlags = "Each flag is set when the entity is created, or is part of a flag memo" - unmemoizedDerived = "Derived only from fields set when the entity is created; computing it has no effects" + unmemoizedImmutable = "Set when the store is created" + unmemoizedContainer = "Holds links, whose fields are checked separately" + unmemoizedCounter = "Allocation counter for IDs and statistics" + unmemoizedInterned = "Interned type whose creation has no effects" + unmemoizedProgram = "Derived from the program only; computing it has no effects" + unmemoizedMemoState = "State of the memos themselves" + unmemoizedChecking = "Written only by checks" + unmemoizedCreated = "Set when the entity owning the links is created" + unmemoizedSyntax = "Derived from syntax and options only; computing it has no effects" + unmemoizedGuarded = "Written only within the memoized computation it is part of" + unmemoizedEmit = "Emit resolver state, written only while resolving for emit" + unmemoizedMark = "Written only by checks and emit marking, and read only by emit" + unmemoizedNodeBuilder = "Node builder state, scoped to one node builder" + unmemoizedNodeFlags = "Each flag is memo-guarded, reporting-only, or set whenever a node is checked and read only by deferred diagnostics, after the whole file is checked" + unmemoizedFlagMemo = "Flag memo, accounted for like a memo under a key naming its entity and field" + unmemoizedEntityFlags = "Each flag is set when the entity is created, or is part of a flag memo" + unmemoizedDerived = "Derived only from fields set when the entity is created; computing it has no effects" + unmemoizedLoopFixpoint = "Fixed point of a loop, kept once complete; analyzing it again from another reference may differ" ) // notCacheOwners are the structs declared in types.go that are plain values @@ -634,9 +654,11 @@ var unmemoizedCacheFields = map[string]string{ "SourceFileLinks.localJsxFactory": unmemoizedSyntax, "SourceFileLinks.localJsxFragmentFactory": unmemoizedSyntax, "JsxElementLinks.jsxFlags": unmemoizedGuarded, - "JsxElementLinks.jsxImplicitImportContainer": unmemoizedGuarded, - "ModuleSymbolLinks.resolvedExports": unmemoizedGuarded, - "ModuleSymbolLinks.typeOnlyExportStarMap": unmemoizedGuarded, + "JsxElementLinks.jsxImplicitImportContainer": unmemoizedFlagMemo, + "flowLoopCacheEntry.t": unmemoizedLoopFixpoint, + "instantiationExpressionEntry.t": unmemoizedFlagMemo, + "ModuleSymbolLinks.resolvedExports": unmemoizedFlagMemo, + "ModuleSymbolLinks.typeOnlyExportStarMap": unmemoizedFlagMemo, "LateBoundLinks.lateSymbol": unmemoizedGuarded, "TypeAliasLinks.typeParameters": unmemoizedGuarded, "MarkedAssignmentSymbolLinks.lastAssignmentPos": unmemoizedGuarded, diff --git a/tsc/internal/checker/flow.go b/tsc/internal/checker/flow.go index af9198a0cc2d5..98ea47920511e 100644 --- a/tsc/internal/checker/flow.go +++ b/tsc/internal/checker/flow.go @@ -1427,6 +1427,9 @@ func (c *Checker) getTypeAtFlowLoopLabelCached(f *FlowState, flow *ast.FlowNode, if firstAntecedentType.incomplete { return c.newFlowType(result, true /*incomplete*/) } + // Kept even if a cycle in progress discards what it computed: analyzing + // the loop again after the cycle starts from wherever the next reference + // is, and may then reach a different fixed point. entry.t = result return FlowType{t: result} } diff --git a/tsc/internal/checker/jsx.go b/tsc/internal/checker/jsx.go index 2dbcbecac7b43..be492977402be 100644 --- a/tsc/internal/checker/jsx.go +++ b/tsc/internal/checker/jsx.go @@ -1529,7 +1529,7 @@ func (c *Checker) getJsxNamespaceContainerForImplicitImportCached(file *ast.Sour if mod != nil && mod != c.unknownSymbol { result = c.getMergedSymbol(c.resolveSymbol(mod)) } - links.jsxImplicitImportContainer = core.OrElse(result, c.unknownSymbol) + c.setFlagMemoValue(memoKeyOf(links, memoJsxImplicitImportContainer), &links.jsxImplicitImportContainer, core.OrElse(result, c.unknownSymbol)) return result } diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 52d2649ec3723..5a79d929636e2 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -1847,6 +1847,17 @@ func setFlagMemoBits[T ~uint32](c *Checker, key memoKey, p *T, mask T, bits T) { c.setFlagMemo(key) } +// setFlagMemoValue caches v in *p as the result of the flag memo identified +// by key. +func (c *Checker) setFlagMemoValue[T any](key memoKey, p *T, v T) { + if c.logResults() { + old := *p + c.logFlagMemoDiscard(func() { *p = old }) + } + *p = v + c.setFlagMemo(key) +} + // endCircularity discards the results cached since the outermost cycle in // progress was detected, except those of its participants. func (c *Checker) endCircularity() { From be77f3af7afbec6e2dce54c3f861767c6862e931 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 19:00:45 -0800 Subject: [PATCH 176/194] Only reuse the last reachability result when it is final The reachability of the last flow node asked about is kept outside any memo, to make walking back through a run of statements linear. A result kept while a cycle is in progress may come from an incomplete result that the cycle later discards, and reusing it while effects are being recorded leaves the reuse out of them. It is now kept only when nothing can discard it, and reused only when reading need not be accounted for. (seen in review) --- tsc/internal/checker/flow.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tsc/internal/checker/flow.go b/tsc/internal/checker/flow.go index 98ea47920511e..755d56a9bb94b 100644 --- a/tsc/internal/checker/flow.go +++ b/tsc/internal/checker/flow.go @@ -2565,14 +2565,18 @@ func (c *Checker) isReachableFlowNode(flow *ast.FlowNode) bool { f := c.getFlowState() result := c.isReachableFlowNodeWorker(f, flow, false /*noCacheCheck*/) c.putFlowState(f) - c.lastFlowNode = flow - c.lastFlowNodeReachable = result + // The last result is reused without accounting for reading it, so it is + // only kept where nothing computed since could be discarded. + if !c.logResults() { + c.lastFlowNode = flow + c.lastFlowNodeReachable = result + } return result } func (c *Checker) isReachableFlowNodeWorker(f *FlowState, flow *ast.FlowNode, noCacheCheck bool) bool { for { - if flow == c.lastFlowNode { + if flow == c.lastFlowNode && !c.observing() { return c.lastFlowNodeReachable } flags := flow.Flags From c047cd5dd69920c2d53ad403bd3425d031a4e00e Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 19:34:29 -0800 Subject: [PATCH 177/194] Attach deferred results unlogged during variance cycles too A result cached before its computation had effects is attached to them later as if it had been attached when cached, so the link is not logged for discard. Only an ordinary cycle was set aside for that, so a variance measurement re-entered since then still logged it, and ending the measurement dropped a dependency of a result that it never discards, losing effects that reusing the result should replay. (seen in review) --- tsc/internal/checker/memo.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index 5a79d929636e2..afad56343cfee 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -1688,15 +1688,15 @@ func (c *Checker) attachDeferred(i int, f *memoEffects) { if start == end { return } - saveStart := c.circularityStart - c.circularityStart = 0 + saveStart, saveVarianceRoot := c.circularityStart, c.varianceCycleRoot + c.circularityStart, c.varianceCycleRoot = 0, 0 for k := start; k < end; k++ { if state := c.deferredAttach[k]; state != nil { c.deferredAttach[k] = nil c.linkState(state, f) } } - c.circularityStart = saveStart + c.circularityStart, c.varianceCycleRoot = saveStart, saveVarianceRoot } // Cycles From ce74b6c184eedcde8163898dfb557e35cf5affa9 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 19:34:29 -0800 Subject: [PATCH 178/194] Correct two misleading descriptions of memo state The documentation of beginMemo sat above readsWithoutMemo, reading as part of it. Type.generation was described as an allocation counter, but it is derived from the types a type is built from, all fixed when it is created, which is why it is order-independent. (seen in review) --- tsc/internal/checker/checker_test.go | 2 +- tsc/internal/checker/memo.go | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tsc/internal/checker/checker_test.go b/tsc/internal/checker/checker_test.go index 4b5549135fa15..e37b80821a35e 100644 --- a/tsc/internal/checker/checker_test.go +++ b/tsc/internal/checker/checker_test.go @@ -348,7 +348,7 @@ var unmemoizedCacheFields = map[string]string{ "Type.objectFlags": unmemoizedEntityFlags, "Type.id": unmemoizedCounter, "Type.kind": unmemoizedCreated, - "Type.generation": unmemoizedCounter, + "Type.generation": unmemoizedDerived, "Type.symbol": unmemoizedCreated, "Type.alias": unmemoizedCreated, "Type.checker": unmemoizedImmutable, diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index afad56343cfee..a49f30cadd777 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -804,11 +804,6 @@ func (c *Checker) syncObserving() { c.observingMemos = !c.checking || c.memoPendingCount != 0 } -// beginMemo is called on entry to a memoized function whose result for this -// input is cached in the memo state identified by key. It accounts for -// effects recorded by a previous computation of that result, and starts a -// resolution for this computation, which in a query records its effects. It -// must be matched by endMemo. // readsWithoutMemo reports whether a memoized computation identified by key, // whose result is cached, can read it without beginning the memo: when no // memo is active, the memo records and replays nothing, and the computation @@ -822,6 +817,11 @@ func (c *Checker) readsWithoutMemo(key memoKey) bool { return !resolving } +// beginMemo is called on entry to a memoized function whose result for this +// input is cached in the memo state identified by key. It accounts for +// effects recorded by a previous computation of that result, and starts a +// resolution for this computation, which in a query records its effects. It +// must be matched by endMemo. func (c *Checker) beginMemo(key memoKey) { resolving := c.beginResolving(key) c.appendResolution(key, nil, 0, int32(len(c.instantiationStack))) From c114c28c9307dbdd624367f64093b97f7b638528 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 19:37:38 -0800 Subject: [PATCH 179/194] Discard intrinsic JSX flags with their tag symbol getIntrinsicTagSymbol records whether an intrinsic tag resolved by name or by index signature in jsxFlags, but wrote the bits directly. When the tag's resolved symbol was discarded at the end of a cycle, the flags stayed set, so a later resolution could see bits from a discarded attempt. Write them as a flag memo of the resolved symbol so both are discarded together. (seen in review) --- tsc/internal/checker/checker_test.go | 2 +- tsc/internal/checker/jsx.go | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/tsc/internal/checker/checker_test.go b/tsc/internal/checker/checker_test.go index e37b80821a35e..6d8b4611e5b7e 100644 --- a/tsc/internal/checker/checker_test.go +++ b/tsc/internal/checker/checker_test.go @@ -653,7 +653,7 @@ var unmemoizedCacheFields = map[string]string{ "SourceFileLinks.localJsxFragmentNamespace": unmemoizedSyntax, "SourceFileLinks.localJsxFactory": unmemoizedSyntax, "SourceFileLinks.localJsxFragmentFactory": unmemoizedSyntax, - "JsxElementLinks.jsxFlags": unmemoizedGuarded, + "JsxElementLinks.jsxFlags": unmemoizedFlagMemo, "JsxElementLinks.jsxImplicitImportContainer": unmemoizedFlagMemo, "flowLoopCacheEntry.t": unmemoizedLoopFixpoint, "instantiationExpressionEntry.t": unmemoizedFlagMemo, diff --git a/tsc/internal/checker/jsx.go b/tsc/internal/checker/jsx.go index be492977402be..02c7ed54d54e1 100644 --- a/tsc/internal/checker/jsx.go +++ b/tsc/internal/checker/jsx.go @@ -1237,6 +1237,12 @@ func (c *Checker) getIntrinsicTagSymbol(node *ast.Node) *ast.Symbol { return c.getIntrinsicTagSymbolUncached(node) } +// setIntrinsicJsxFlag records how the intrinsic tag symbol of node was found, +// as part of resolving that symbol. +func (c *Checker) setIntrinsicJsxFlag(node *ast.Node, links *SymbolNodeLinks, flag JsxFlags) { + setFlagMemoBits(c, links.resolvedSymbol.key(), &c.jsxElementLinks.Get(node).jsxFlags, JsxFlagsIntrinsicNamedElement|JsxFlagsIntrinsicIndexedElement, flag) +} + func (c *Checker) getIntrinsicTagSymbolUncached(node *ast.Node) *ast.Symbol { links := c.symbolNodeLinks.Get(node) if links.resolvedSymbol.get(c) != nil { @@ -1252,19 +1258,19 @@ func (c *Checker) getIntrinsicTagSymbolUncached(node *ast.Node) *ast.Symbol { propName := tagName.Text() intrinsicProp := c.getPropertyOfType(intrinsicElementsType, propName) if intrinsicProp != nil { - c.jsxElementLinks.Get(node).jsxFlags |= JsxFlagsIntrinsicNamedElement + c.setIntrinsicJsxFlag(node, links, JsxFlagsIntrinsicNamedElement) links.resolvedSymbol.set(c, intrinsicProp) return links.resolvedSymbol.get(c) } // Intrinsic string indexer case indexSymbol := c.getApplicableIndexSymbol(intrinsicElementsType, c.getStringLiteralType(propName)) if indexSymbol != nil { - c.jsxElementLinks.Get(node).jsxFlags |= JsxFlagsIntrinsicIndexedElement + c.setIntrinsicJsxFlag(node, links, JsxFlagsIntrinsicIndexedElement) links.resolvedSymbol.set(c, indexSymbol) return links.resolvedSymbol.get(c) } if c.getTypeOfPropertyOrIndexSignatureOfType(intrinsicElementsType, propName) != nil { - c.jsxElementLinks.Get(node).jsxFlags |= JsxFlagsIntrinsicIndexedElement + c.setIntrinsicJsxFlag(node, links, JsxFlagsIntrinsicIndexedElement) links.resolvedSymbol.set(c, intrinsicElementsType.symbol) return links.resolvedSymbol.get(c) } From 8ce9b6842442f933dafb03681cd161195dde09f3 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 19:50:08 -0800 Subject: [PATCH 180/194] Ask for contextual types and signatures when querying first Editors ask the checker for contextual types and resolved signatures as well as types and symbols, and both reach parts of the checker that types and symbols alone do not, such as contextual typing of arguments whose call has not been resolved. The check order fuzzer and the typesfirst order now ask for them too, so that results which depend on those queries being answered first are found. (seen in review) --- .../testutil/harnessutil/checkorderfuzz.go | 86 +++++++++++++------ .../testutil/harnessutil/harnessutil.go | 19 ++-- 2 files changed, 71 insertions(+), 34 deletions(-) diff --git a/tsc/internal/testutil/harnessutil/checkorderfuzz.go b/tsc/internal/testutil/harnessutil/checkorderfuzz.go index 4cd589d691fdd..b66a13fa64a9b 100644 --- a/tsc/internal/testutil/harnessutil/checkorderfuzz.go +++ b/tsc/internal/testutil/harnessutil/checkorderfuzz.go @@ -11,6 +11,7 @@ import ( "testing" "github.com/microsoft/TypeScript/tsc/internal/ast" + "github.com/microsoft/TypeScript/tsc/internal/checker" "github.com/microsoft/TypeScript/tsc/internal/compiler" "github.com/microsoft/TypeScript/tsc/internal/core" "github.com/microsoft/TypeScript/tsc/internal/scanner" @@ -19,10 +20,10 @@ import ( // Setting TS_CHECK_ORDER_FUZZ=n checks each test that has no checkOrder // option n more times, each time in a fresh program that first answers a -// random selection of queries in a random order: the type or symbol of a -// node, or the diagnostics of a file. A test fails if its diagnostics, or -// the type or symbol of any node, then differ from checking in program -// order, and reports the smallest list of queries that still makes them +// random selection of queries in a random order: the type, symbol, +// contextual type or resolved signature of a node, or the diagnostics of a +// file. A test fails if its diagnostics, or any of those results for any +// node, then differ from checking in program order, and reports the smallest list of queries that still makes them // differ. TS_CHECK_ORDER_FUZZ_SEED=s runs only seed s. type fuzzQuery struct { @@ -37,17 +38,23 @@ type fuzzQueryKind int const ( fuzzQueryType fuzzQueryKind = iota fuzzQuerySymbol + fuzzQueryContextualType + fuzzQuerySignature fuzzQueryDiagnostics ) +var fuzzQueryKindNames = [...]string{ + fuzzQueryType: "type", + fuzzQuerySymbol: "symbol", + fuzzQueryContextualType: "contextual type", + fuzzQuerySignature: "signature", +} + func (q fuzzQuery) String() string { if q.kind == fuzzQueryDiagnostics { return fmt.Sprintf("diagnostics of %s", q.file.FileName()) } - kind := "type" - if q.kind == fuzzQuerySymbol { - kind = "symbol" - } + kind := fuzzQueryKindNames[q.kind] if ast.PositionIsSynthesized(q.node.Pos()) { return fmt.Sprintf("%s of synthesized %s %d in %s", kind, q.node.Kind, q.index, q.file.FileName()) } @@ -57,7 +64,7 @@ func (q fuzzQuery) String() string { } // fuzzResult is what a check order must not change: diagnostics and the -// type and symbol of every queryable node. +// result of every query of every queryable node. type fuzzResult []string func fuzzCheckOrder(t *testing.T, host compiler.CompilerHost, config *tsoptions.ParsedCommandLine, harnessOptions *HarnessOptions) { @@ -115,10 +122,9 @@ func fuzzQueries(program compiler.ProgramLike, rng *rand.Rand) []fuzzQuery { for _, file := range fuzzCheckedFiles(program) { queries = append(queries, fuzzQuery{file: file, kind: fuzzQueryDiagnostics}) for i, node := range fuzzNodes(file) { - if fuzzHasType(node) { - queries = append(queries, fuzzQuery{file, node, i, fuzzQueryType}) + for _, kind := range fuzzNodeQueryKinds(node) { + queries = append(queries, fuzzQuery{file, node, i, kind}) } - queries = append(queries, fuzzQuery{file, node, i, fuzzQuerySymbol}) } } rng.Shuffle(len(queries), func(i, j int) { queries[i], queries[j] = queries[j], queries[i] }) @@ -171,7 +177,7 @@ func fuzzCheckedFiles(program compiler.ProgramLike) []*ast.SourceFile { return files } -// fuzzNodes returns the nodes of file that queryTypesAndSymbols queries. +// fuzzNodes returns the nodes of file that queryNodes queries. func fuzzNodes(file *ast.SourceFile) []*ast.Node { var nodes []*ast.Node var visit func(n *ast.Node) bool @@ -190,6 +196,44 @@ func fuzzHasType(node *ast.Node) bool { return !ast.IsPartOfTypeNode(node) && !ast.IsOmittedExpression(node) } +// fuzzNodeQueryKinds returns the kinds of query that apply to node. +func fuzzNodeQueryKinds(node *ast.Node) []fuzzQueryKind { + kinds := make([]fuzzQueryKind, 0, 4) + if fuzzHasType(node) { + kinds = append(kinds, fuzzQueryType) + if ast.IsExpression(node) { + kinds = append(kinds, fuzzQueryContextualType) + } + } + kinds = append(kinds, fuzzQuerySymbol) + if ast.IsCallLikeExpression(node) { + kinds = append(kinds, fuzzQuerySignature) + } + return kinds +} + +// fuzzQueryResult answers a query of a node, returning its result as text, +// or "" if it has none. +func fuzzQueryResult(c *checker.Checker, node *ast.Node, kind fuzzQueryKind) string { + switch kind { + case fuzzQueryType: + return c.TypeToString(c.GetTypeAtLocation(node)) + case fuzzQuerySymbol: + if symbol := c.GetSymbolAtLocation(node); symbol != nil { + return c.SymbolToString(symbol) + } + case fuzzQueryContextualType: + if t := c.GetContextualType(node, checker.ContextFlagsNone); t != nil { + return c.TypeToString(t) + } + case fuzzQuerySignature: + if signature := c.GetResolvedSignature(node); signature != nil { + return c.SignatureToStringEx(signature, nil, checker.TypeFormatFlagsNone, nil) + } + } + return "" +} + // fuzzRun answers queries, given in the files of the program that // fuzzQueries was given, in a fresh program, then returns its results. func fuzzRun(ctx context.Context, host compiler.CompilerHost, config *tsoptions.ParsedCommandLine, queries []fuzzQuery) fuzzResult { @@ -209,11 +253,7 @@ func fuzzRun(ctx context.Context, host compiler.CompilerHost, config *tsoptions. } node := nodesByFile[string(file.FileName())][q.index] c, done := program.Program().GetTypeCheckerForFile(ctx, file) - if q.kind == fuzzQueryType { - c.GetTypeAtLocation(node) - } else { - c.GetSymbolAtLocation(node) - } + fuzzQueryResult(c, node, q.kind) done() } @@ -233,12 +273,10 @@ func fuzzRun(ctx context.Context, host compiler.CompilerHost, config *tsoptions. for _, file := range files { c, done := program.Program().GetTypeCheckerForFile(ctx, file) for i, node := range nodesByFile[string(file.FileName())] { - q := fuzzQuery{file, node, i, fuzzQuerySymbol} - if fuzzHasType(node) { - result = append(result, fmt.Sprintf("type of %s: %s", strings.TrimPrefix(q.String(), "symbol of "), c.TypeToString(c.GetTypeAtLocation(node)))) - } - if symbol := c.GetSymbolAtLocation(node); symbol != nil { - result = append(result, fmt.Sprintf("%s: %s", q, c.SymbolToString(symbol))) + for _, kind := range fuzzNodeQueryKinds(node) { + if r := fuzzQueryResult(c, node, kind); r != "" { + result = append(result, fmt.Sprintf("%s: %s", fuzzQuery{file, node, i, kind}, r)) + } } } done() diff --git a/tsc/internal/testutil/harnessutil/harnessutil.go b/tsc/internal/testutil/harnessutil/harnessutil.go index 65d2405be8fca..a742efcc39069 100644 --- a/tsc/internal/testutil/harnessutil/harnessutil.go +++ b/tsc/internal/testutil/harnessutil/harnessutil.go @@ -383,9 +383,9 @@ var checkOrders = []string{ // Check and emit each file with a fresh program that has checked // nothing else. "isolated", - // Before checking or emitting, ask for the type and symbol of every - // expression and name in each file, innermost and last first, as an - // editor might. + // Before checking or emitting, ask for the type, symbol, contextual + // type and resolved signature of every expression and name in each + // file, innermost and last first, as an editor might. "typesfirst", } @@ -759,7 +759,7 @@ func getCheckerDiagnostics(ctx context.Context, host compiler.CompilerHost, conf case "typesfirst": for _, file := range slices.Backward(files) { c, done := program.Program().GetTypeCheckerForFile(ctx, file) - queryTypesAndSymbols(c, file) + queryNodes(c, file) done() } result = append(result, program.GetSemanticDiagnostics(ctx, nil)...) @@ -772,7 +772,7 @@ func getCheckerDiagnostics(ctx context.Context, host compiler.CompilerHost, conf // emitInOrder emits program, querying the checker in the given order: each // file emitted separately, in reverse or in a program of its own, or after -// querying the types and symbols of every file in reverse. +// querying every node of every file in reverse. func emitInOrder(ctx context.Context, host compiler.CompilerHost, config *tsoptions.ParsedCommandLine, program compiler.ProgramLike, order string) *compiler.EmitResult { options := program.Options() if order == "" || order == "default" || options.OutFile != "" || options.NoEmitOnError.IsTrue() { @@ -787,7 +787,7 @@ func emitInOrder(ctx context.Context, host compiler.CompilerHost, config *tsopti continue } c, done := program.Program().GetTypeCheckerForFile(ctx, file) - queryTypesAndSymbols(c, file) + queryNodes(c, file) done() } return program.Emit(ctx, compiler.EmitOptions{}) @@ -817,7 +817,7 @@ func emitInOrder(ctx context.Context, host compiler.CompilerHost, config *tsopti return result } -func queryTypesAndSymbols(c *checker.Checker, file *ast.SourceFile) { +func queryNodes(c *checker.Checker, file *ast.SourceFile) { var nodes []*ast.Node var visit func(n *ast.Node) bool visit = func(n *ast.Node) bool { @@ -830,10 +830,9 @@ func queryTypesAndSymbols(c *checker.Checker, file *ast.SourceFile) { file.AsNode().ForEachChild(visit) for _, n := range slices.Backward(nodes) { if ast.IsExpressionNode(n) || n.Kind == ast.KindIdentifier || ast.IsDeclarationName(n) { - if !ast.IsPartOfTypeNode(n) && !ast.IsOmittedExpression(n) { - c.GetTypeAtLocation(n) + for _, kind := range fuzzNodeQueryKinds(n) { + fuzzQueryResult(c, n, kind) } - c.GetSymbolAtLocation(n) } } } From 7ffb50f11d1a42bc6498af297a5e60554adcff94 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 19:50:15 -0800 Subject: [PATCH 181/194] Add test for a const assertion inferred before its binding pattern When the type of an expression inside the argument is asked for first, the inferred tuple becomes readonly, though the binding pattern the call result is destructured into makes it mutable when checked in program order. (seen in check order fuzzing) --- ...ternQueryOrder(checkorder=default).symbols | 31 +++++++++++++++++++ ...atternQueryOrder(checkorder=default).types | 31 +++++++++++++++++++ ...nQueryOrder(checkorder=typesfirst).symbols | 31 +++++++++++++++++++ ...ernQueryOrder(checkorder=typesfirst).types | 31 +++++++++++++++++++ .../constAssertionBindingPatternQueryOrder.ts | 11 +++++++ 5 files changed, 135 insertions(+) create mode 100644 tsc/testdata/baselines/reference/compiler/constAssertionBindingPatternQueryOrder(checkorder=default).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/constAssertionBindingPatternQueryOrder(checkorder=default).types create mode 100644 tsc/testdata/baselines/reference/compiler/constAssertionBindingPatternQueryOrder(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/constAssertionBindingPatternQueryOrder(checkorder=typesfirst).types create mode 100644 tsc/testdata/tests/cases/compiler/constAssertionBindingPatternQueryOrder.ts diff --git a/tsc/testdata/baselines/reference/compiler/constAssertionBindingPatternQueryOrder(checkorder=default).symbols b/tsc/testdata/baselines/reference/compiler/constAssertionBindingPatternQueryOrder(checkorder=default).symbols new file mode 100644 index 0000000000000..cbd22ad10c410 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/constAssertionBindingPatternQueryOrder(checkorder=default).symbols @@ -0,0 +1,31 @@ +//// [tests/cases/compiler/constAssertionBindingPatternQueryOrder.ts] //// + +=== constAssertionBindingPatternQueryOrder.ts === +declare function settle(fn: () => T): Promise<{ [K in keyof T]: [Awaited] }>; +>settle : Symbol(settle, Decl(constAssertionBindingPatternQueryOrder.ts, 0, 0)) +>T : Symbol(T, Decl(constAssertionBindingPatternQueryOrder.ts, 0, 24)) +>fn : Symbol(fn, Decl(constAssertionBindingPatternQueryOrder.ts, 0, 54)) +>T : Symbol(T, Decl(constAssertionBindingPatternQueryOrder.ts, 0, 24)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +>K : Symbol(K, Decl(constAssertionBindingPatternQueryOrder.ts, 0, 79)) +>T : Symbol(T, Decl(constAssertionBindingPatternQueryOrder.ts, 0, 24)) +>Awaited : Symbol(Awaited, Decl(lib.es5.d.ts, --, --)) +>T : Symbol(T, Decl(constAssertionBindingPatternQueryOrder.ts, 0, 24)) +>K : Symbol(K, Decl(constAssertionBindingPatternQueryOrder.ts, 0, 79)) + +async function f() { +>f : Symbol(f, Decl(constAssertionBindingPatternQueryOrder.ts, 0, 113)) + + const [[a], b] = await settle(() => [Promise.resolve(0), Promise.reject(1)] as const); +>a : Symbol(a, Decl(constAssertionBindingPatternQueryOrder.ts, 3, 10)) +>b : Symbol(b, Decl(constAssertionBindingPatternQueryOrder.ts, 3, 13)) +>settle : Symbol(settle, Decl(constAssertionBindingPatternQueryOrder.ts, 0, 0)) +>Promise.resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +>resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>Promise.reject : Symbol(PromiseConstructor.reject, Decl(lib.es2015.promise.d.ts, --, --)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +>reject : Symbol(PromiseConstructor.reject, Decl(lib.es2015.promise.d.ts, --, --)) +>const : Symbol(const) +} + diff --git a/tsc/testdata/baselines/reference/compiler/constAssertionBindingPatternQueryOrder(checkorder=default).types b/tsc/testdata/baselines/reference/compiler/constAssertionBindingPatternQueryOrder(checkorder=default).types new file mode 100644 index 0000000000000..d263c604b0052 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/constAssertionBindingPatternQueryOrder(checkorder=default).types @@ -0,0 +1,31 @@ +//// [tests/cases/compiler/constAssertionBindingPatternQueryOrder.ts] //// + +=== constAssertionBindingPatternQueryOrder.ts === +declare function settle(fn: () => T): Promise<{ [K in keyof T]: [Awaited] }>; +>settle : (fn: () => T) => Promise<{ [K in keyof T]: [Awaited]; }> +>fn : () => T + +async function f() { +>f : () => Promise + + const [[a], b] = await settle(() => [Promise.resolve(0), Promise.reject(1)] as const); +>a : number +>b : [never] +>await settle(() => [Promise.resolve(0), Promise.reject(1)] as const) : [[number], [never]] +>settle(() => [Promise.resolve(0), Promise.reject(1)] as const) : Promise<[[number], [never]]> +>settle : (fn: () => T) => Promise<{ [K in keyof T]: [Awaited]; }> +>() => [Promise.resolve(0), Promise.reject(1)] as const : () => [Promise, Promise] +>[Promise.resolve(0), Promise.reject(1)] as const : [Promise, Promise] +>[Promise.resolve(0), Promise.reject(1)] : [Promise, Promise] +>Promise.resolve(0) : Promise +>Promise.resolve : { (): Promise; (value: T): Promise>; (value: T | PromiseLike): Promise>; } +>Promise : PromiseConstructor +>resolve : { (): Promise; (value: T): Promise>; (value: T | PromiseLike): Promise>; } +>0 : 0 +>Promise.reject(1) : Promise +>Promise.reject : (reason?: any) => Promise +>Promise : PromiseConstructor +>reject : (reason?: any) => Promise +>1 : 1 +} + diff --git a/tsc/testdata/baselines/reference/compiler/constAssertionBindingPatternQueryOrder(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/constAssertionBindingPatternQueryOrder(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..cbd22ad10c410 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/constAssertionBindingPatternQueryOrder(checkorder=typesfirst).symbols @@ -0,0 +1,31 @@ +//// [tests/cases/compiler/constAssertionBindingPatternQueryOrder.ts] //// + +=== constAssertionBindingPatternQueryOrder.ts === +declare function settle(fn: () => T): Promise<{ [K in keyof T]: [Awaited] }>; +>settle : Symbol(settle, Decl(constAssertionBindingPatternQueryOrder.ts, 0, 0)) +>T : Symbol(T, Decl(constAssertionBindingPatternQueryOrder.ts, 0, 24)) +>fn : Symbol(fn, Decl(constAssertionBindingPatternQueryOrder.ts, 0, 54)) +>T : Symbol(T, Decl(constAssertionBindingPatternQueryOrder.ts, 0, 24)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +>K : Symbol(K, Decl(constAssertionBindingPatternQueryOrder.ts, 0, 79)) +>T : Symbol(T, Decl(constAssertionBindingPatternQueryOrder.ts, 0, 24)) +>Awaited : Symbol(Awaited, Decl(lib.es5.d.ts, --, --)) +>T : Symbol(T, Decl(constAssertionBindingPatternQueryOrder.ts, 0, 24)) +>K : Symbol(K, Decl(constAssertionBindingPatternQueryOrder.ts, 0, 79)) + +async function f() { +>f : Symbol(f, Decl(constAssertionBindingPatternQueryOrder.ts, 0, 113)) + + const [[a], b] = await settle(() => [Promise.resolve(0), Promise.reject(1)] as const); +>a : Symbol(a, Decl(constAssertionBindingPatternQueryOrder.ts, 3, 10)) +>b : Symbol(b, Decl(constAssertionBindingPatternQueryOrder.ts, 3, 13)) +>settle : Symbol(settle, Decl(constAssertionBindingPatternQueryOrder.ts, 0, 0)) +>Promise.resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +>resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>Promise.reject : Symbol(PromiseConstructor.reject, Decl(lib.es2015.promise.d.ts, --, --)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +>reject : Symbol(PromiseConstructor.reject, Decl(lib.es2015.promise.d.ts, --, --)) +>const : Symbol(const) +} + diff --git a/tsc/testdata/baselines/reference/compiler/constAssertionBindingPatternQueryOrder(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/constAssertionBindingPatternQueryOrder(checkorder=typesfirst).types new file mode 100644 index 0000000000000..4d7301bd19e06 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/constAssertionBindingPatternQueryOrder(checkorder=typesfirst).types @@ -0,0 +1,31 @@ +//// [tests/cases/compiler/constAssertionBindingPatternQueryOrder.ts] //// + +=== constAssertionBindingPatternQueryOrder.ts === +declare function settle(fn: () => T): Promise<{ [K in keyof T]: [Awaited] }>; +>settle : (fn: () => T) => Promise<{ [K in keyof T]: [Awaited]; }> +>fn : () => T + +async function f() { +>f : () => Promise + + const [[a], b] = await settle(() => [Promise.resolve(0), Promise.reject(1)] as const); +>a : number +>b : [never] +>await settle(() => [Promise.resolve(0), Promise.reject(1)] as const) : readonly [[number], [never]] +>settle(() => [Promise.resolve(0), Promise.reject(1)] as const) : Promise +>settle : (fn: () => T) => Promise<{ [K in keyof T]: [Awaited]; }> +>() => [Promise.resolve(0), Promise.reject(1)] as const : () => readonly [Promise, Promise] +>[Promise.resolve(0), Promise.reject(1)] as const : readonly [Promise, Promise] +>[Promise.resolve(0), Promise.reject(1)] : readonly [Promise, Promise] +>Promise.resolve(0) : Promise +>Promise.resolve : { (): Promise; (value: T): Promise>; (value: T | PromiseLike): Promise>; } +>Promise : PromiseConstructor +>resolve : { (): Promise; (value: T): Promise>; (value: T | PromiseLike): Promise>; } +>0 : 0 +>Promise.reject(1) : Promise +>Promise.reject : (reason?: any) => Promise +>Promise : PromiseConstructor +>reject : (reason?: any) => Promise +>1 : 1 +} + diff --git a/tsc/testdata/tests/cases/compiler/constAssertionBindingPatternQueryOrder.ts b/tsc/testdata/tests/cases/compiler/constAssertionBindingPatternQueryOrder.ts new file mode 100644 index 0000000000000..42517d7d60024 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/constAssertionBindingPatternQueryOrder.ts @@ -0,0 +1,11 @@ +// @strict: true +// @target: esnext +// @lib: esnext +// @noEmit: true +// @checkOrder: default, typesfirst + +declare function settle(fn: () => T): Promise<{ [K in keyof T]: [Awaited] }>; + +async function f() { + const [[a], b] = await settle(() => [Promise.resolve(0), Promise.reject(1)] as const); +} From 56aeb4e94dbed221fbe87e199da36d3389d08ef1 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 20:06:03 -0800 Subject: [PATCH 182/194] Keep a contextually inferred return type with its marker Contextually checking a function sets a flag first, then infers the return type. If a cycle is detected in between (for example a call inside the body re-entering the outer resolution), the flag is not logged but the return type is, so discarding the cycle drops the return type and keeps the flag. A later request then infers the return type without the contextual types, and a const assertion in the body becomes readonly when queried before its binding pattern. Clearing the flag on discard is not an option: it is TypeScript's guard against re-checking the function from within its own check. Instead, store the return type unlogged whenever the flag was, so both are kept or neither. (seen in check order fuzzing) --- tsc/internal/checker/checker.go | 14 +++++++++++++- ...gPatternQueryOrder(checkorder=typesfirst).types | 10 +++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 58baa17cbd2f7..e4d06191eaa3b 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -10804,6 +10804,10 @@ func (c *Checker) contextuallyCheckFunctionExpressionOrObjectLiteralMethodUncach if links.flags&NodeCheckFlagsContextChecked == 0 || links.flags&NodeCheckFlagsSignatureContextChecked != 0 { return } + // The flag guards against checking the function again from within the + // check, so it is set now, and is only discarded if a cycle in progress + // logs it. + markerLogged := c.logResults() setFlagMemoBits(c, memoKeyOf(node, memoContextChecked), &links.flags, NodeCheckFlagsSignatureContextChecked, NodeCheckFlagsSignatureContextChecked) signature := c.getSignatureFromDeclarationUncontextual(node) contextualSignature := c.getContextualSignature(node) @@ -10815,7 +10819,15 @@ func (c *Checker) contextuallyCheckFunctionExpressionOrObjectLiteralMethodUncach // otherwise anyFunctionType could leak as part of the computed (and cached) return type. returnType := c.getReturnTypeFromBody(node, checkMode&^CheckModeSkipContextSensitive) if signature.resolvedReturnType.get(c) == nil { - signature.resolvedReturnType.set(c, returnType) + if markerLogged { + signature.resolvedReturnType.set(c, returnType) + } else { + // A cycle detected since the flag was set would discard the + // return type but keep the flag, so a later request would + // infer the return type without the contextual types in + // place now. Keep the return type with the flag instead. + signature.resolvedReturnType.setIdentity(c, returnType) + } } } c.checkSignatureDeclaration(node) diff --git a/tsc/testdata/baselines/reference/compiler/constAssertionBindingPatternQueryOrder(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/constAssertionBindingPatternQueryOrder(checkorder=typesfirst).types index 4d7301bd19e06..d263c604b0052 100644 --- a/tsc/testdata/baselines/reference/compiler/constAssertionBindingPatternQueryOrder(checkorder=typesfirst).types +++ b/tsc/testdata/baselines/reference/compiler/constAssertionBindingPatternQueryOrder(checkorder=typesfirst).types @@ -11,12 +11,12 @@ async function f() { const [[a], b] = await settle(() => [Promise.resolve(0), Promise.reject(1)] as const); >a : number >b : [never] ->await settle(() => [Promise.resolve(0), Promise.reject(1)] as const) : readonly [[number], [never]] ->settle(() => [Promise.resolve(0), Promise.reject(1)] as const) : Promise +>await settle(() => [Promise.resolve(0), Promise.reject(1)] as const) : [[number], [never]] +>settle(() => [Promise.resolve(0), Promise.reject(1)] as const) : Promise<[[number], [never]]> >settle : (fn: () => T) => Promise<{ [K in keyof T]: [Awaited]; }> ->() => [Promise.resolve(0), Promise.reject(1)] as const : () => readonly [Promise, Promise] ->[Promise.resolve(0), Promise.reject(1)] as const : readonly [Promise, Promise] ->[Promise.resolve(0), Promise.reject(1)] : readonly [Promise, Promise] +>() => [Promise.resolve(0), Promise.reject(1)] as const : () => [Promise, Promise] +>[Promise.resolve(0), Promise.reject(1)] as const : [Promise, Promise] +>[Promise.resolve(0), Promise.reject(1)] : [Promise, Promise] >Promise.resolve(0) : Promise >Promise.resolve : { (): Promise; (value: T): Promise>; (value: T | PromiseLike): Promise>; } >Promise : PromiseConstructor From f34e474ba340bf58a3d4116a3cf322e949803a9d Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 20:06:39 -0800 Subject: [PATCH 183/194] Ignore symbol IDs in names when fuzzing check order Unique symbol properties are named with the ID of their symbol, which depends on the order symbols were created in, so the same type printed differently after querying in another order. (seen in check order fuzzing) --- tsc/internal/testutil/harnessutil/checkorderfuzz.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tsc/internal/testutil/harnessutil/checkorderfuzz.go b/tsc/internal/testutil/harnessutil/checkorderfuzz.go index b66a13fa64a9b..dfb45db11b67c 100644 --- a/tsc/internal/testutil/harnessutil/checkorderfuzz.go +++ b/tsc/internal/testutil/harnessutil/checkorderfuzz.go @@ -6,6 +6,7 @@ import ( "hash/fnv" "math/rand/v2" "os" + "regexp" "strconv" "strings" "testing" @@ -212,9 +213,17 @@ func fuzzNodeQueryKinds(node *ast.Node) []fuzzQueryKind { return kinds } +// fuzzSymbolIDs matches the symbol IDs that the names of unique symbol +// properties end with, which depend on the order symbols were created in. +var fuzzSymbolIDs = regexp.MustCompile(`(\\uFFFD@[^@"]*)@\d+`) + // fuzzQueryResult answers a query of a node, returning its result as text, // or "" if it has none. func fuzzQueryResult(c *checker.Checker, node *ast.Node, kind fuzzQueryKind) string { + return fuzzSymbolIDs.ReplaceAllString(fuzzQueryResultWithIDs(c, node, kind), "$1") +} + +func fuzzQueryResultWithIDs(c *checker.Checker, node *ast.Node, kind fuzzQueryKind) string { switch kind { case fuzzQueryType: return c.TypeToString(c.GetTypeAtLocation(node)) From 9497534a31ff119ce158e21c4c76b185bda00333 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 20:24:28 -0800 Subject: [PATCH 184/194] Discard results computed from a binding pattern's own elements While the type implied by a binding pattern is computed as the contextual type of its initializer, references to the pattern's elements from the elements' defaults are any. The calls and types computed from them were cached anyway, so asking for the contextual type of the initializer first left `extra` in const { kind, payload, extra = kind === "a" ? ... : ... } = u; as any rather than unknown. TypeScript behaves the same way. Track the patterns as resolutions in progress rather than a separate stack, so that a reference returning any marks the computation circular and what was cached from it is discarded. (seen in check order fuzzing) --- tsc/internal/checker/checker.go | 16 +++-- ...ntInitializer(checkorder=default).symbols} | 0 ...mentInitializer(checkorder=default).types} | 0 ...Initializer(checkorder=typesfirst).symbols | 62 ++++++++++++++++ ...ntInitializer(checkorder=typesfirst).types | 70 +++++++++++++++++++ ...tDestructuringBindingElementInitializer.ts | 1 + 6 files changed, 143 insertions(+), 6 deletions(-) rename tsc/testdata/baselines/reference/compiler/{dependentDestructuringBindingElementInitializer.symbols => dependentDestructuringBindingElementInitializer(checkorder=default).symbols} (100%) rename tsc/testdata/baselines/reference/compiler/{dependentDestructuringBindingElementInitializer.types => dependentDestructuringBindingElementInitializer(checkorder=default).types} (100%) create mode 100644 tsc/testdata/baselines/reference/compiler/dependentDestructuringBindingElementInitializer(checkorder=typesfirst).symbols create mode 100644 tsc/testdata/baselines/reference/compiler/dependentDestructuringBindingElementInitializer(checkorder=typesfirst).types diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index e4d06191eaa3b..4e205f9a450e3 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -80,6 +80,7 @@ const ( TypeSystemPropertyNameCallResolution TypeSystemPropertyNameAssertionOperand TypeSystemPropertyNamePatternInitializer + TypeSystemPropertyNameContextualBindingPattern ) type TypeResolution struct { @@ -689,7 +690,6 @@ type Checker struct { reportUnmeasurableMapper *TypeMapper restrictiveMapper *TypeMapper permissiveMapper *TypeMapper - contextualBindingPatterns []*ast.Node resolving resolvingTable // Index in resolutions of the outermost computation of each key in progress typeResolutionTop int // 1-based index in resolutions of the innermost resolution, or 0 // Like typeResolutionTop, but skipping the type resolutions of current @@ -11787,8 +11787,9 @@ func (c *Checker) checkIdentifier(node *ast.Node, checkMode CheckMode) *Type { // If the identifier is declared in a binding pattern for which we're currently computing the implied type and the // reference occurs with the same binding pattern, return the non-inferrable any type. This for example occurs in // 'const [a, b = a + 1] = [2]' when we're computing the contextual type for the array literal '[2]'. - if declaration != nil && declaration.Kind == ast.KindBindingElement && slices.Contains(c.contextualBindingPatterns, declaration.Parent) && - ast.FindAncestor(node, func(parent *ast.Node) bool { return parent == declaration.Parent }) != nil { + if declaration != nil && declaration.Kind == ast.KindBindingElement && + ast.FindAncestor(node, func(parent *ast.Node) bool { return parent == declaration.Parent }) != nil && + c.isResolvingAnywhere(declaration.Parent, TypeSystemPropertyNameContextualBindingPattern) { return c.nonInferrableAnyType } t := c.getNarrowedTypeOfSymbol(localOrExportSymbol, node) @@ -19377,7 +19378,10 @@ func (c *Checker) getParentElementAccess(node *ast.Node) *ast.Node { // the parameter. func (c *Checker) getTypeFromBindingPattern(pattern *ast.Node, includePatternInType bool, reportErrors bool) *Type { if includePatternInType { - c.contextualBindingPatterns = append(c.contextualBindingPatterns, pattern) + // While the implied type is computed, references to the pattern's own + // elements are any (see checkIdentifier), so nothing computed from + // them may be cached; see isResolvingAnywhere. + c.beginTypeResolution(pattern, TypeSystemPropertyNameContextualBindingPattern) } var result *Type if ast.IsObjectBindingPattern(pattern) { @@ -19386,7 +19390,7 @@ func (c *Checker) getTypeFromBindingPattern(pattern *ast.Node, includePatternInT result = c.getTypeFromArrayBindingPattern(pattern, includePatternInType, reportErrors) } if includePatternInType { - c.contextualBindingPatterns = c.contextualBindingPatterns[:len(c.contextualBindingPatterns)-1] + c.popTypeResolution() } return result } @@ -20853,7 +20857,7 @@ func (c *Checker) typeResolutionHasProperty(r *TypeResolution) bool { TypeSystemPropertyNameSimplifiedForReading, TypeSystemPropertyNameSimplifiedForWriting, TypeSystemPropertyNameDefaultType, TypeSystemPropertyNameAwaitedType, TypeSystemPropertyNameExplicitType, TypeSystemPropertyNameBindingElementParent, TypeSystemPropertyNameCallResolution, - TypeSystemPropertyNameAssertionOperand, TypeSystemPropertyNamePatternInitializer: + TypeSystemPropertyNameAssertionOperand, TypeSystemPropertyNamePatternInitializer, TypeSystemPropertyNameContextualBindingPattern: // Marked as checked or resolved on entry, so it is only on the stack // while in progress. return false diff --git a/tsc/testdata/baselines/reference/compiler/dependentDestructuringBindingElementInitializer.symbols b/tsc/testdata/baselines/reference/compiler/dependentDestructuringBindingElementInitializer(checkorder=default).symbols similarity index 100% rename from tsc/testdata/baselines/reference/compiler/dependentDestructuringBindingElementInitializer.symbols rename to tsc/testdata/baselines/reference/compiler/dependentDestructuringBindingElementInitializer(checkorder=default).symbols diff --git a/tsc/testdata/baselines/reference/compiler/dependentDestructuringBindingElementInitializer.types b/tsc/testdata/baselines/reference/compiler/dependentDestructuringBindingElementInitializer(checkorder=default).types similarity index 100% rename from tsc/testdata/baselines/reference/compiler/dependentDestructuringBindingElementInitializer.types rename to tsc/testdata/baselines/reference/compiler/dependentDestructuringBindingElementInitializer(checkorder=default).types diff --git a/tsc/testdata/baselines/reference/compiler/dependentDestructuringBindingElementInitializer(checkorder=typesfirst).symbols b/tsc/testdata/baselines/reference/compiler/dependentDestructuringBindingElementInitializer(checkorder=typesfirst).symbols new file mode 100644 index 0000000000000..0aaf38011344f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/dependentDestructuringBindingElementInitializer(checkorder=typesfirst).symbols @@ -0,0 +1,62 @@ +//// [tests/cases/compiler/dependentDestructuringBindingElementInitializer.ts] //// + +=== dependentDestructuringBindingElementInitializer.ts === +type U = +>U : Symbol(U, Decl(dependentDestructuringBindingElementInitializer.ts, 0, 0)) + + | { kind: "a"; payload: number; extra?: unknown } +>kind : Symbol(kind, Decl(dependentDestructuringBindingElementInitializer.ts, 1, 7)) +>payload : Symbol(payload, Decl(dependentDestructuringBindingElementInitializer.ts, 1, 18)) +>extra : Symbol(extra, Decl(dependentDestructuringBindingElementInitializer.ts, 1, 35)) + + | { kind: "b"; payload: string; extra?: unknown }; +>kind : Symbol(kind, Decl(dependentDestructuringBindingElementInitializer.ts, 2, 7)) +>payload : Symbol(payload, Decl(dependentDestructuringBindingElementInitializer.ts, 2, 18)) +>extra : Symbol(extra, Decl(dependentDestructuringBindingElementInitializer.ts, 2, 35)) + +declare const u: U; +>u : Symbol(u, Decl(dependentDestructuringBindingElementInitializer.ts, 4, 13)) +>U : Symbol(U, Decl(dependentDestructuringBindingElementInitializer.ts, 0, 0)) + +const { + kind, +>kind : Symbol(kind, Decl(dependentDestructuringBindingElementInitializer.ts, 6, 7)) + + payload, +>payload : Symbol(payload, Decl(dependentDestructuringBindingElementInitializer.ts, 7, 9)) + + extra = kind === "a" ? payload.toFixed() : payload.toUpperCase(), +>extra : Symbol(extra, Decl(dependentDestructuringBindingElementInitializer.ts, 8, 12)) +>kind : Symbol(kind, Decl(dependentDestructuringBindingElementInitializer.ts, 6, 7)) +>payload.toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --)) +>payload : Symbol(payload, Decl(dependentDestructuringBindingElementInitializer.ts, 7, 9)) +>toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --)) +>payload.toUpperCase : Symbol(String.toUpperCase, Decl(lib.es5.d.ts, --, --)) +>payload : Symbol(payload, Decl(dependentDestructuringBindingElementInitializer.ts, 7, 9)) +>toUpperCase : Symbol(String.toUpperCase, Decl(lib.es5.d.ts, --, --)) + +} = u; +>u : Symbol(u, Decl(dependentDestructuringBindingElementInitializer.ts, 4, 13)) + +function f({ +>f : Symbol(f, Decl(dependentDestructuringBindingElementInitializer.ts, 10, 6)) + + kind, +>kind : Symbol(kind, Decl(dependentDestructuringBindingElementInitializer.ts, 12, 12)) + + payload, +>payload : Symbol(payload, Decl(dependentDestructuringBindingElementInitializer.ts, 13, 9)) + + extra = kind === "a" ? payload.toFixed() : payload.toUpperCase(), +>extra : Symbol(extra, Decl(dependentDestructuringBindingElementInitializer.ts, 14, 12)) +>kind : Symbol(kind, Decl(dependentDestructuringBindingElementInitializer.ts, 12, 12)) +>payload.toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --)) +>payload : Symbol(payload, Decl(dependentDestructuringBindingElementInitializer.ts, 13, 9)) +>toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --)) +>payload.toUpperCase : Symbol(String.toUpperCase, Decl(lib.es5.d.ts, --, --)) +>payload : Symbol(payload, Decl(dependentDestructuringBindingElementInitializer.ts, 13, 9)) +>toUpperCase : Symbol(String.toUpperCase, Decl(lib.es5.d.ts, --, --)) + +}: U) {} +>U : Symbol(U, Decl(dependentDestructuringBindingElementInitializer.ts, 0, 0)) + diff --git a/tsc/testdata/baselines/reference/compiler/dependentDestructuringBindingElementInitializer(checkorder=typesfirst).types b/tsc/testdata/baselines/reference/compiler/dependentDestructuringBindingElementInitializer(checkorder=typesfirst).types new file mode 100644 index 0000000000000..0dcd3d8a64cef --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/dependentDestructuringBindingElementInitializer(checkorder=typesfirst).types @@ -0,0 +1,70 @@ +//// [tests/cases/compiler/dependentDestructuringBindingElementInitializer.ts] //// + +=== dependentDestructuringBindingElementInitializer.ts === +type U = +>U : U + + | { kind: "a"; payload: number; extra?: unknown } +>kind : "a" +>payload : number +>extra : unknown + + | { kind: "b"; payload: string; extra?: unknown }; +>kind : "b" +>payload : string +>extra : unknown + +declare const u: U; +>u : U + +const { + kind, +>kind : "a" | "b" + + payload, +>payload : string | number + + extra = kind === "a" ? payload.toFixed() : payload.toUpperCase(), +>extra : unknown +>kind === "a" ? payload.toFixed() : payload.toUpperCase() : string +>kind === "a" : boolean +>kind : "a" | "b" +>"a" : "a" +>payload.toFixed() : string +>payload.toFixed : (fractionDigits?: number) => string +>payload : number +>toFixed : (fractionDigits?: number) => string +>payload.toUpperCase() : string +>payload.toUpperCase : () => string +>payload : string +>toUpperCase : () => string + +} = u; +>u : U + +function f({ +>f : ({ kind, payload, extra, }: U) => void + + kind, +>kind : "a" | "b" + + payload, +>payload : string | number + + extra = kind === "a" ? payload.toFixed() : payload.toUpperCase(), +>extra : unknown +>kind === "a" ? payload.toFixed() : payload.toUpperCase() : string +>kind === "a" : boolean +>kind : "a" | "b" +>"a" : "a" +>payload.toFixed() : string +>payload.toFixed : (fractionDigits?: number) => string +>payload : number +>toFixed : (fractionDigits?: number) => string +>payload.toUpperCase() : string +>payload.toUpperCase : () => string +>payload : string +>toUpperCase : () => string + +}: U) {} + diff --git a/tsc/testdata/tests/cases/compiler/dependentDestructuringBindingElementInitializer.ts b/tsc/testdata/tests/cases/compiler/dependentDestructuringBindingElementInitializer.ts index 7006dffe572ca..4272774ef918b 100644 --- a/tsc/testdata/tests/cases/compiler/dependentDestructuringBindingElementInitializer.ts +++ b/tsc/testdata/tests/cases/compiler/dependentDestructuringBindingElementInitializer.ts @@ -1,5 +1,6 @@ // @strict: true // @noEmit: true +// @checkOrder: default, typesfirst type U = | { kind: "a"; payload: number; extra?: unknown } From 0d1bae02b9ec6fa44fc09a1bd9f412fa9823a355 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 21:21:07 -0800 Subject: [PATCH 185/194] Keep where unlocated effects of a reused result were observed A computation started at no node, such as one a query outside of checking starts, reports errors at the current node wherever its result is reused. When a computation started at another node reused it, its effects joined that computation's without the node, so replaying them located the errors wherever that computation was later reused instead. Asking for the symbol of t.x and then the type of tx moved an excessive depth error from t.x to tx. Wrap such effects with the node they were observed at, when that is not where the enclosing computation started. (seen in check order fuzzing) --- tsc/internal/checker/checker_test.go | 40 ++++++++++++++++++++++++++++ tsc/internal/checker/memo.go | 24 ++++++++++++----- 2 files changed, 58 insertions(+), 6 deletions(-) diff --git a/tsc/internal/checker/checker_test.go b/tsc/internal/checker/checker_test.go index 6d8b4611e5b7e..f1c223148d4fd 100644 --- a/tsc/internal/checker/checker_test.go +++ b/tsc/internal/checker/checker_test.go @@ -181,6 +181,46 @@ func BenchmarkCheckFreshProgram(b *testing.B) { } } +func TestQueriesDoNotMoveErrorsAtCurrentNode(t *testing.T) { + t.Parallel() + + // Asking for the symbol of t.x computes T<"x"> at no node, reporting + // an excessive depth there. Asking for the type of tx then reuses it at + // t.x, so checking reports the error at t.x and not at tx. + content := `type T = { + x: T[K]; + y: number; +}; + +declare let t: T<"x">; +let tx = t.x; +` + diagnostics := func(query bool) []string { + fs := bundled.WrapFS(vfstest.FromMap(map[string]string{ + "/foo.ts": content, + "/tsconfig.json": `{"files": ["foo.ts"]}`, + }, tspath.CaseInsensitive)) + host := compiler.NewCompilerHost(fs, bundled.LibPath(), nil, nil, nil) + parsed, errors := tsoptions.GetParsedCommandLineOfConfigFile("/tsconfig.json", &core.CompilerOptions{}, nil, tsoptions.NewDefaultParseConfigHost(fs), nil) + assert.Equal(t, len(errors), 0) + p := compiler.NewProgram(compiler.ProgramOptions{Config: parsed, Host: host}) + file := p.GetSourceFile("/foo.ts") + if query { + c, done := p.GetTypeCheckerForFile(t.Context(), file) + decl := file.Statements.Nodes[2].AsVariableStatement().DeclarationList.AsVariableDeclarationList().Declarations.Nodes[0] + c.GetSymbolAtLocation(decl.Initializer().Name()) + c.GetTypeAtLocation(decl.Name()) + done() + } + var result []string + for _, d := range p.GetSemanticDiagnostics(t.Context(), file) { + result = append(result, fmt.Sprintf("%d: TS%d", d.Pos(), d.Code())) + } + return result + } + assert.DeepEqual(t, diagnostics(true), diagnostics(false)) +} + func TestTypeAllocationAcrossCheckerGrowth(t *testing.T) { t.Parallel() var content strings.Builder diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index a49f30cadd777..e3911b86aef6a 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -859,9 +859,7 @@ func (c *Checker) beginMemo(key memoKey) { // progress, if this one re-enters it, or 0. func (c *Checker) beginState(state *memoState, outer int) { if state != nil && state.pending != nil { - if parent := c.currentMemoEffects(); parent != nil { - parent.addDep(state.pending) - } + c.observePending(state.pending) } c.startEffects(state) // Re-entering a computation in progress: the inner result is derived @@ -1093,13 +1091,27 @@ func (c *Checker) observeState(state *memoState) bool { return false } if state.pending != nil { - if parent := c.currentMemoEffects(); parent != nil { - parent.addDep(state.pending) - } + c.observePending(state.pending) } return true } +// observePending adds the effects of a reused result to the enclosing +// computation. Those of a computation started at no node are located where +// it is reused, so if that is not where the enclosing computation started, +// the node is kept with them; replay would otherwise locate them wherever the +// enclosing computation is reused. +func (c *Checker) observePending(pending *memoEffects) { + parent := c.currentMemoEffects() + if parent == nil { + return + } + if c.currentNode != nil && c.currentNode != parent.entry && (!pending.entered || pending.entry == nil) { + pending = &memoEffects{deps: []*memoEffects{pending}, entry: c.currentNode, entered: true} + } + parent.addDep(pending) +} + // A currentNodeError is an error reported at the current node; see // reportAtCurrentNode. Replaying it reports the same *currentNodeError, so // that reports collected more than once can be told apart from distinct ones. From c03e01bb3efb60dcb9fe4321b49f1a0a4d10c9f5 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 21:21:07 -0800 Subject: [PATCH 186/194] Ask for the types of type nodes when querying before checking Editors ask for the types of names in type annotations too, which can compute results at different nodes than checking does. Both the typesfirst check order and check order fuzzing now ask for them. (seen in check order fuzzing) --- tsc/internal/testutil/harnessutil/checkorderfuzz.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tsc/internal/testutil/harnessutil/checkorderfuzz.go b/tsc/internal/testutil/harnessutil/checkorderfuzz.go index dfb45db11b67c..9607ef50e16e2 100644 --- a/tsc/internal/testutil/harnessutil/checkorderfuzz.go +++ b/tsc/internal/testutil/harnessutil/checkorderfuzz.go @@ -194,7 +194,7 @@ func fuzzNodes(file *ast.SourceFile) []*ast.Node { } func fuzzHasType(node *ast.Node) bool { - return !ast.IsPartOfTypeNode(node) && !ast.IsOmittedExpression(node) + return !ast.IsOmittedExpression(node) } // fuzzNodeQueryKinds returns the kinds of query that apply to node. From f13ebfd8254451a09ab3c8c648279a25e557cd2c Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 21:45:17 -0800 Subject: [PATCH 187/194] Emit files among queries when fuzzing check order Builds and editors emit files before checking them, and declaration emit asks the checker for results at nodes of its own. Fuzzing now emits single files among its queries and compares the emitted output too. (seen in check order fuzzing) --- .../testutil/harnessutil/checkorderfuzz.go | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/tsc/internal/testutil/harnessutil/checkorderfuzz.go b/tsc/internal/testutil/harnessutil/checkorderfuzz.go index 9607ef50e16e2..77ca00a90a837 100644 --- a/tsc/internal/testutil/harnessutil/checkorderfuzz.go +++ b/tsc/internal/testutil/harnessutil/checkorderfuzz.go @@ -17,6 +17,7 @@ import ( "github.com/microsoft/TypeScript/tsc/internal/core" "github.com/microsoft/TypeScript/tsc/internal/scanner" "github.com/microsoft/TypeScript/tsc/internal/tsoptions" + "github.com/microsoft/TypeScript/tsc/internal/tspath" ) // Setting TS_CHECK_ORDER_FUZZ=n checks each test that has no checkOrder @@ -42,6 +43,7 @@ const ( fuzzQueryContextualType fuzzQuerySignature fuzzQueryDiagnostics + fuzzQueryEmit ) var fuzzQueryKindNames = [...]string{ @@ -52,8 +54,11 @@ var fuzzQueryKindNames = [...]string{ } func (q fuzzQuery) String() string { - if q.kind == fuzzQueryDiagnostics { + switch q.kind { + case fuzzQueryDiagnostics: return fmt.Sprintf("diagnostics of %s", q.file.FileName()) + case fuzzQueryEmit: + return fmt.Sprintf("emit of %s", q.file.FileName()) } kind := fuzzQueryKindNames[q.kind] if ast.PositionIsSynthesized(q.node.Pos()) { @@ -64,8 +69,8 @@ func (q fuzzQuery) String() string { return fmt.Sprintf("%s of %s at %s(%d,%d)", kind, scanner.GetTextOfNode(q.node), q.file.FileName(), line+1, int(character)+1) } -// fuzzResult is what a check order must not change: diagnostics and the -// result of every query of every queryable node. +// fuzzResult is what a check order must not change: diagnostics, emitted +// files, and the result of every query of every queryable node. type fuzzResult []string func fuzzCheckOrder(t *testing.T, host compiler.CompilerHost, config *tsoptions.ParsedCommandLine, harnessOptions *HarnessOptions) { @@ -121,7 +126,7 @@ func fuzzCheckOrder(t *testing.T, host compiler.CompilerHost, config *tsoptions. func fuzzQueries(program compiler.ProgramLike, rng *rand.Rand) []fuzzQuery { var queries []fuzzQuery for _, file := range fuzzCheckedFiles(program) { - queries = append(queries, fuzzQuery{file: file, kind: fuzzQueryDiagnostics}) + queries = append(queries, fuzzQuery{file: file, kind: fuzzQueryDiagnostics}, fuzzQuery{file: file, kind: fuzzQueryEmit}) for i, node := range fuzzNodes(file) { for _, kind := range fuzzNodeQueryKinds(node) { queries = append(queries, fuzzQuery{file, node, i, kind}) @@ -256,9 +261,13 @@ func fuzzRun(ctx context.Context, host compiler.CompilerHost, config *tsoptions. } for _, q := range queries { file := program.GetSourceFile(q.file.FileName()) - if q.kind == fuzzQueryDiagnostics { + switch q.kind { + case fuzzQueryDiagnostics: program.GetSemanticDiagnostics(ctx, file) continue + case fuzzQueryEmit: + program.Emit(ctx, compiler.EmitOptions{TargetSourceFiles: []*ast.SourceFile{file}, WriteFile: fuzzDiscardOutput}) + continue } node := nodesByFile[string(file.FileName())][q.index] c, done := program.Program().GetTypeCheckerForFile(ctx, file) @@ -279,6 +288,10 @@ func fuzzRun(ctx context.Context, host compiler.CompilerHost, config *tsoptions. fuzzFormatDiagnostic(&b, d, "") result = append(result, b.String()) } + program.Emit(ctx, compiler.EmitOptions{WriteFile: func(fileName tspath.RootedFilePath, text string, data *compiler.WriteFileData) error { + result = append(result, fmt.Sprintf("emit of %s:\n%s", fileName, text)) + return nil + }}) for _, file := range files { c, done := program.Program().GetTypeCheckerForFile(ctx, file) for i, node := range nodesByFile[string(file.FileName())] { @@ -293,6 +306,10 @@ func fuzzRun(ctx context.Context, host compiler.CompilerHost, config *tsoptions. return result } +func fuzzDiscardOutput(tspath.RootedFilePath, string, *compiler.WriteFileData) error { + return nil +} + func fuzzFormatDiagnostic(b *strings.Builder, d *ast.Diagnostic, indent string) { b.WriteString(indent) if d.File() != nil { From 8b8ee25420777b3fccc7959323434065262e67b2 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 22:36:14 -0800 Subject: [PATCH 188/194] Resolve return type cycles from their first declared member A cycle through return types gave different results depending on where it was entered. Entered at rebuild's return type, re-entering it fails rebuild, so both members report an implicit any. Entered at b's return type, subtype reduction of rebuild's return type finds b in progress and compares as if it returned any, without failing anything, so rebuild returns B and was kept as a participant of the cycle, though computing it from scratch fails. Cycles through the types of symbols were already made independent of the entry by resolving the member declared first from scratch (see yieldCycle). Do the same for the return types of declared signatures, both when a cycle re-enters a return type and when it only observes one in progress, so that each order gives the result of resolving the first declared member first. (seen in circularReturnTypeSubtypeReductionOrder) --- tsc/internal/checker/checker.go | 126 ++++++++++++++---- tsc/internal/checker/relater.go | 13 +- ...ReturnTypeSubtypeReductionOrder.errors.txt | 19 ++- ...larReturnTypeSubtypeReductionOrder.symbols | 45 ++++--- ...cularReturnTypeSubtypeReductionOrder.types | 17 +-- ...circularReturnTypeSubtypeReductionOrder.ts | 5 +- 6 files changed, 163 insertions(+), 62 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 4e205f9a450e3..87830da686b99 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -20334,36 +20334,116 @@ type shadowedResolving struct { // yieldCycle handles re-entering the resolution in progress at start, a // cycle that would fail the resolution re-entered. Which resolution is -// re-entered depends on which was entered first, so a cycle through the -// types of symbols declared before the one re-entered (if it is one) -// fails at the first of those instead, as if that symbol had been resolved -// first: its type is computed again from scratch, with nothing in progress -// visible, and the resolution re-entered is then computed again likewise, -// by the caller, which pushes it. The computations in progress then continue -// from those results. Termination: a resolution is never computed again -// while it is already being computed again. +// re-entered depends on which was entered first, so a cycle through members +// declared before the one re-entered (see compareCycleMembers) fails at the +// first of those instead, as if it had been resolved first: it is computed +// again from scratch, with nothing in progress visible, and the resolution +// re-entered is then computed again likewise, by the caller, which pushes it. +// The computations in progress then continue from those results. +// Termination: a resolution is never computed again while it is already +// being computed again. func (c *Checker) yieldCycle(start int) bool { - r := &c.resolutions[start].typeResolution - var first *ast.Symbol - if r.propertyName == TypeSystemPropertyNameType { - first = r.target.(*ast.Symbol) + r := c.resolutions[start].typeResolution + if c.isYieldingTo(r.target, r.propertyName) { + return false + } + first := c.firstCycleMember(start) + if first == nil { + return false + } + c.resolveCycleMember(*first) + c.beginCycleYield(r.target, r.propertyName, len(c.resolutions), len(c.resolutions)) + return true +} + +// yieldObservedCycle handles observing the resolution in progress at start +// without failing it, as yieldCycle handles re-entering it: if members of +// the cycle are declared before the resolution observed, the first of them +// is computed again from scratch, as if it had been resolved first, so that +// the caller can use its result. +func (c *Checker) yieldObservedCycle(start int) { + if r := &c.resolutions[start].typeResolution; c.isYieldingTo(r.target, r.propertyName) { + return + } + if first := c.firstCycleMember(start); first != nil { + c.resolveCycleMember(*first) + } +} + +// firstCycleMember returns the member of the cycle from the resolution at +// start to the top of the stack that is resolved first, if it is not the +// resolution at start, and is not already being computed again. +func (c *Checker) firstCycleMember(start int) *TypeResolution { + entered := &c.resolutions[start].typeResolution + var first *TypeResolution + if isCycleMember(entered) { + first = entered } - entered := first for i := start + 1; i < len(c.resolutions); i++ { - if f := &c.resolutions[i]; f.isTypeResolution && f.typeResolution.propertyName == TypeSystemPropertyNameType { - if s := f.typeResolution.target.(*ast.Symbol); first == nil || c.compareSymbols(s, first) < 0 { - first = s - } + if f := &c.resolutions[i]; f.isTypeResolution && isCycleMember(&f.typeResolution) && (first == nil || c.compareCycleMembers(&f.typeResolution, first) < 0) { + first = &f.typeResolution } } - if first == nil || first == entered || c.isYieldingTo(first, TypeSystemPropertyNameType) || c.isYieldingTo(r.target, r.propertyName) { - return false + if first == nil || first == entered || c.isYieldingTo(first.target, first.propertyName) { + return nil + } + return first +} + +// isCycleMember reports whether a type resolution may be resolved first in +// place of the one a cycle re-entered: the type of a symbol, or the return +// type of a declared signature. +func isCycleMember(r *TypeResolution) bool { + switch r.propertyName { + case TypeSystemPropertyNameType: + return true + case TypeSystemPropertyNameResolvedReturnType: + sig := r.target.(*Signature) + return sig.target == nil && sig.getComposite() == nil && sig.declaration != nil + } + return false +} + +// compareCycleMembers orders the members of a cycle in program order of +// their declarations, symbols first among members with the same one. +func (c *Checker) compareCycleMembers(a, b *TypeResolution) int { + aSymbol, aIsSymbol := a.target.(*ast.Symbol) + bSymbol, bIsSymbol := b.target.(*ast.Symbol) + switch { + case aIsSymbol && bIsSymbol: + return c.compareSymbols(aSymbol, bSymbol) + case aIsSymbol: + return c.compareSymbolToNode(aSymbol, b.target.(*Signature).declaration) + case bIsSymbol: + return -c.compareSymbolToNode(bSymbol, a.target.(*Signature).declaration) + } + return c.compareNodes(a.target.(*Signature).declaration, b.target.(*Signature).declaration) +} + +// compareSymbolToNode orders a symbol by its first declaration against node, +// the symbol first if that is node. +func (c *Checker) compareSymbolToNode(s *ast.Symbol, node *ast.Node) int { + if len(s.Declarations()) == 0 { + return 1 + } + if r := c.compareNodes(s.Declarations()[0], node); r != 0 { + return r + } + return -1 +} + +// resolveCycleMember computes the result of a member of a cycle again from +// scratch, with nothing in progress visible. +func (c *Checker) resolveCycleMember(r TypeResolution) { + target, propertyName := r.target, r.propertyName + c.beginCycleYield(target, propertyName, -1, len(c.resolutions)) + switch propertyName { + case TypeSystemPropertyNameType: + c.getTypeOfSymbol(target.(*ast.Symbol)) + case TypeSystemPropertyNameResolvedReturnType: + c.getReturnTypeOfSignature(target.(*Signature)) } - c.beginCycleYield(first, TypeSystemPropertyNameType, -1, len(c.resolutions)) - c.getTypeOfSymbol(first) c.endCycleYield() - c.beginCycleYield(r.target, r.propertyName, len(c.resolutions), len(c.resolutions)) - return true } // yieldCycleToMembers handles re-entering the type resolution in progress diff --git a/tsc/internal/checker/relater.go b/tsc/internal/checker/relater.go index 0b620146e6c06..45bfc16971541 100644 --- a/tsc/internal/checker/relater.go +++ b/tsc/internal/checker/relater.go @@ -2566,7 +2566,18 @@ func (c *Checker) isResolvingReturnTypeOfSignature(signature *Signature) bool { if signature.getComposite() != nil && core.Some(signature.getComposite().signatures, c.isResolvingReturnTypeOfSignature) { return true } - return signature.resolvedReturnType.get(c) == nil && c.isResolutionInProgress(signature, TypeSystemPropertyNameResolvedReturnType) + if signature.resolvedReturnType.get(c) != nil { + return false + } + start := c.findResolutionCycleStartIndex(signature, TypeSystemPropertyNameResolvedReturnType) + if start < 0 { + return false + } + c.markTypeResolutionCircular(start) + // Computed from the first member of the cycle, the return type may be + // available after all. + c.yieldObservedCycle(start) + return signature.resolvedReturnType.get(c) == nil } func (c *Checker) findMatchingSignatures(signatureLists [][]*Signature, signature *Signature, listIndex int) []*Signature { diff --git a/tsc/testdata/baselines/reference/compiler/circularReturnTypeSubtypeReductionOrder.errors.txt b/tsc/testdata/baselines/reference/compiler/circularReturnTypeSubtypeReductionOrder.errors.txt index f29d937312390..5f36a6dd6ba9d 100644 --- a/tsc/testdata/baselines/reference/compiler/circularReturnTypeSubtypeReductionOrder.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/circularReturnTypeSubtypeReductionOrder.errors.txt @@ -1,15 +1,18 @@ -expression.ts(9,7): error TS2322: Type 'typeof A' is not assignable to type 'new () => A'. +declaration.ts(6,5): error TS7023: 'rebuild' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. +declaration.ts(9,5): error TS7023: 'b' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. +expression.ts(10,7): error TS2322: Type 'typeof A' is not assignable to type 'new () => A'. Type 'A' is not assignable to type 'A'. Two different types with this name exist, but they are unrelated. Types of property 'c' are incompatible. Type '() => () => any' is not assignable to type 'A'. -expression.ts(10,5): error TS7023: 'rebuild' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. -expression.ts(13,5): error TS7023: 'b' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. +expression.ts(11,5): error TS7023: 'rebuild' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. +expression.ts(14,5): error TS7023: 'b' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. ==== expression.ts (3 errors) ==== // Subtype reduction of rebuild's return type relates the class to A, - // which needs b's return type, which needs rebuild's: a cycle. Which - // members report it depends on which return type is requested first. + // which needs b's return type, which needs rebuild's: a cycle. Both + // members report it, whichever return type is requested first, as if + // rebuild's, declared first, were requested first. interface A { b(): A; c: A; @@ -37,16 +40,20 @@ expression.ts(13,5): error TS7023: 'b' implicitly has return type 'any' because }; export {}; -==== declaration.ts (0 errors) ==== +==== declaration.ts (2 errors) ==== interface B { b(): B; } declare const flag: boolean; class K { rebuild() { + ~~~~~~~ +!!! error TS7023: 'rebuild' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. return flag ? this : new B(); } b() { + ~ +!!! error TS7023: 'b' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. return this.rebuild(); } } diff --git a/tsc/testdata/baselines/reference/compiler/circularReturnTypeSubtypeReductionOrder.symbols b/tsc/testdata/baselines/reference/compiler/circularReturnTypeSubtypeReductionOrder.symbols index 4a139c664483d..5706cdcb8e401 100644 --- a/tsc/testdata/baselines/reference/compiler/circularReturnTypeSubtypeReductionOrder.symbols +++ b/tsc/testdata/baselines/reference/compiler/circularReturnTypeSubtypeReductionOrder.symbols @@ -2,49 +2,50 @@ === expression.ts === // Subtype reduction of rebuild's return type relates the class to A, -// which needs b's return type, which needs rebuild's: a cycle. Which -// members report it depends on which return type is requested first. +// which needs b's return type, which needs rebuild's: a cycle. Both +// members report it, whichever return type is requested first, as if +// rebuild's, declared first, were requested first. interface A { ->A : Symbol(A, Decl(expression.ts, 0, 0), Decl(expression.ts, 8, 5)) +>A : Symbol(A, Decl(expression.ts, 0, 0), Decl(expression.ts, 9, 5)) b(): A; ->b : Symbol(A.b, Decl(expression.ts, 3, 13)) ->A : Symbol(A, Decl(expression.ts, 0, 0), Decl(expression.ts, 8, 5)) +>b : Symbol(A.b, Decl(expression.ts, 4, 13)) +>A : Symbol(A, Decl(expression.ts, 0, 0), Decl(expression.ts, 9, 5)) c: A; ->c : Symbol(A.c, Decl(expression.ts, 4, 11)) ->A : Symbol(A, Decl(expression.ts, 0, 0), Decl(expression.ts, 8, 5)) +>c : Symbol(A.c, Decl(expression.ts, 5, 11)) +>A : Symbol(A, Decl(expression.ts, 0, 0), Decl(expression.ts, 9, 5)) } declare const flag: boolean; ->flag : Symbol(flag, Decl(expression.ts, 7, 13)) +>flag : Symbol(flag, Decl(expression.ts, 8, 13)) const A: new () => A = class { ->A : Symbol(A, Decl(expression.ts, 0, 0), Decl(expression.ts, 8, 5)) ->A : Symbol(A, Decl(expression.ts, 0, 0), Decl(expression.ts, 8, 5)) +>A : Symbol(A, Decl(expression.ts, 0, 0), Decl(expression.ts, 9, 5)) +>A : Symbol(A, Decl(expression.ts, 0, 0), Decl(expression.ts, 9, 5)) rebuild() { ->rebuild : Symbol(A.rebuild, Decl(expression.ts, 8, 30)) +>rebuild : Symbol(A.rebuild, Decl(expression.ts, 9, 30)) return flag ? this : new A(); ->flag : Symbol(flag, Decl(expression.ts, 7, 13)) ->this : Symbol(A, Decl(expression.ts, 8, 22)) ->A : Symbol(A, Decl(expression.ts, 0, 0), Decl(expression.ts, 8, 5)) +>flag : Symbol(flag, Decl(expression.ts, 8, 13)) +>this : Symbol(A, Decl(expression.ts, 9, 22)) +>A : Symbol(A, Decl(expression.ts, 0, 0), Decl(expression.ts, 9, 5)) } b() { ->b : Symbol(A.b, Decl(expression.ts, 11, 5)) +>b : Symbol(A.b, Decl(expression.ts, 12, 5)) return this.rebuild(); ->this.rebuild : Symbol(A.rebuild, Decl(expression.ts, 8, 30)) ->this : Symbol(A, Decl(expression.ts, 8, 22)) ->rebuild : Symbol(A.rebuild, Decl(expression.ts, 8, 30)) +>this.rebuild : Symbol(A.rebuild, Decl(expression.ts, 9, 30)) +>this : Symbol(A, Decl(expression.ts, 9, 22)) +>rebuild : Symbol(A.rebuild, Decl(expression.ts, 9, 30)) } c() { ->c : Symbol(A.c, Decl(expression.ts, 14, 5)) +>c : Symbol(A.c, Decl(expression.ts, 15, 5)) return this.rebuild; ->this.rebuild : Symbol(A.rebuild, Decl(expression.ts, 8, 30)) ->this : Symbol(A, Decl(expression.ts, 8, 22)) ->rebuild : Symbol(A.rebuild, Decl(expression.ts, 8, 30)) +>this.rebuild : Symbol(A.rebuild, Decl(expression.ts, 9, 30)) +>this : Symbol(A, Decl(expression.ts, 9, 22)) +>rebuild : Symbol(A.rebuild, Decl(expression.ts, 9, 30)) } }; export {}; diff --git a/tsc/testdata/baselines/reference/compiler/circularReturnTypeSubtypeReductionOrder.types b/tsc/testdata/baselines/reference/compiler/circularReturnTypeSubtypeReductionOrder.types index 422aad25870de..421302078810c 100644 --- a/tsc/testdata/baselines/reference/compiler/circularReturnTypeSubtypeReductionOrder.types +++ b/tsc/testdata/baselines/reference/compiler/circularReturnTypeSubtypeReductionOrder.types @@ -2,8 +2,9 @@ === expression.ts === // Subtype reduction of rebuild's return type relates the class to A, -// which needs b's return type, which needs rebuild's: a cycle. Which -// members report it depends on which return type is requested first. +// which needs b's return type, which needs rebuild's: a cycle. Both +// members report it, whichever return type is requested first, as if +// rebuild's, declared first, were requested first. interface A { b(): A; >b : () => A @@ -60,23 +61,23 @@ class K { >K : K rebuild() { ->rebuild : () => B +>rebuild : () => any return flag ? this : new B(); ->flag ? this : new B() : B +>flag ? this : new B() : this | B >flag : boolean >this : this >new B() : B >B : new () => B } b() { ->b : () => B +>b : () => any return this.rebuild(); ->this.rebuild() : B ->this.rebuild : () => B +>this.rebuild() : any +>this.rebuild : () => any >this : this ->rebuild : () => B +>rebuild : () => any } } const B: new () => B = K; diff --git a/tsc/testdata/tests/cases/compiler/circularReturnTypeSubtypeReductionOrder.ts b/tsc/testdata/tests/cases/compiler/circularReturnTypeSubtypeReductionOrder.ts index 760fb775fc68e..76e977a6505b1 100644 --- a/tsc/testdata/tests/cases/compiler/circularReturnTypeSubtypeReductionOrder.ts +++ b/tsc/testdata/tests/cases/compiler/circularReturnTypeSubtypeReductionOrder.ts @@ -4,8 +4,9 @@ // @filename: expression.ts // Subtype reduction of rebuild's return type relates the class to A, -// which needs b's return type, which needs rebuild's: a cycle. Which -// members report it depends on which return type is requested first. +// which needs b's return type, which needs rebuild's: a cycle. Both +// members report it, whichever return type is requested first, as if +// rebuild's, declared first, were requested first. interface A { b(): A; c: A; From dbe149ea902bfe7c6117285d2729f100d9a00685 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 22:49:39 -0800 Subject: [PATCH 189/194] Keep results computed only against the outermost variance measurement Measuring the variances of a type can resolve a return type that relates instantiations of the same type, observing its incomplete variances. That result was discarded when the measurement finished, so resolving the return type afterwards, with the variances complete, gave a different union reduction than resolving it first, which measures the variances and resolves it again inside, keeping that nested result. The outermost measurement hides what is below it and is measured again from the canonical entry of its circularity if needed, so what it computes does not depend on what led to it. A resolution inside it that observed nothing else in progress is therefore what it computes first from scratch, and is kept as a cycle participant, as main keeps the first result set (seen in varianceCycleCachedResults). --- tsc/internal/checker/checker.go | 20 +++++++++++++++++++ .../compiler/varianceCycleCachedResults.types | 10 +++++----- .../compiler/varianceCycleCachedResults.ts | 5 +++-- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 87830da686b99..f1d9ce93e5282 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -20773,6 +20773,17 @@ func (c *Checker) markTypeResolutionCircular(start int) { c.markCircular(start) } +// observedOnlyOutermostMeasurement reports whether the cycle in progress is +// the one headed by the outermost measurement of variances, which the +// resolution at index n is inside, and no other. +func (c *Checker) observedOnlyOutermostMeasurement(n int) bool { + if len(c.varianceStack) == 0 || len(c.innerCycles) != 0 { + return false + } + head := c.varianceStack[0].resolution + return n > head && c.circularityStart == head+1 +} + // markCircular records that the computations from the resolution at start to // the top of the stack observed the incomplete computation at start, so // results cached while it is in progress are discarded when it finishes. @@ -20828,6 +20839,15 @@ func (c *Checker) popTypeResolution() bool { // keeps it, as must the cycle. r.participant = true c.cycleParticipants = append(c.cycleParticipants, *r) + } else if r := &f.typeResolution; result && !r.participant && c.observedOnlyOutermostMeasurement(n) { + // The outermost measurement of variances hides what is below it and + // is measured from the canonical entry of its circularity, so what + // it computes is the same whatever led to it. This resolution only + // observed its incomplete variances, so its result is what it + // computes first from scratch too, which reaches the measurement and + // computes it again inside, as main keeps the first result set. + r.participant = true + c.cycleParticipants = append(c.cycleParticipants, *r) } c.typeResolutionTop = int(f.prevTypeResolution) if f.typeResolution.propertyName != TypeSystemPropertyNameCurrentNode { diff --git a/tsc/testdata/baselines/reference/compiler/varianceCycleCachedResults.types b/tsc/testdata/baselines/reference/compiler/varianceCycleCachedResults.types index 5375d64684132..c5448fc75d3ab 100644 --- a/tsc/testdata/baselines/reference/compiler/varianceCycleCachedResults.types +++ b/tsc/testdata/baselines/reference/compiler/varianceCycleCachedResults.types @@ -29,7 +29,7 @@ class Box { >value : T m() { ->m : () => Box | Box +>m : () => Box if (cond) return a1; >cond : boolean @@ -40,10 +40,10 @@ class Box { } } const r = new Box().m(); ->r : Box | Box ->new Box().m() : Box | Box ->new Box().m : () => Box | Box +>r : Box +>new Box().m() : Box +>new Box().m : () => Box >new Box() : Box >Box : typeof Box ->m : () => Box | Box +>m : () => Box diff --git a/tsc/testdata/tests/cases/compiler/varianceCycleCachedResults.ts b/tsc/testdata/tests/cases/compiler/varianceCycleCachedResults.ts index d8d751ee1e7bc..935dada6a890f 100644 --- a/tsc/testdata/tests/cases/compiler/varianceCycleCachedResults.ts +++ b/tsc/testdata/tests/cases/compiler/varianceCycleCachedResults.ts @@ -2,8 +2,9 @@ // Relating 'Box' to 'Box' measures the variances of 'Box', which // resolves the return type of 'm', which relates 'Box' to 'Box' -// while those variances are incomplete. Results computed meanwhile must not be -// kept, so 'm' returns both types. +// while those variances are incomplete, reducing the union to 'Box'. +// Resolving 'm' first measures the variances of 'Box' and resolves 'm' again +// inside, the same way, so 'm' returns 'Box' whichever is first. // @filename: first.ts declare let b1: Box; From ca149406314b5920230826e254238b0e8171cf20 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 23:09:01 -0800 Subject: [PATCH 190/194] Keep results a cycle yield computes from scratch When a query enters a cycle somewhere other than its program-order entry, the cycle yields to its first member and recomputes it with the resolutions below hidden. Two things made that recomputation differ from computing the member first: - The reverse mapping stacks, contextual types and inference contexts of the hidden resolutions stayed visible, so the recomputation saw contexts that a computation from scratch never has. A yield now hides them along with the resolutions and restores them when it ends. - Results were kept as cycle participants only by comparing the outermost cycle head in progress against the resolution. A cycle headed below the yield, which the yield cannot observe, caused the yield root and the hidden re-entries of itself to be discarded, so the member was computed again and genuinely re-entered itself. Each type resolution now tracks the lowest cycle head it observed, and a result is kept when what it observed was entered from scratch: by the outer resolution of itself, by the yield it is the root of, or by the outermost measurement of variances. (seen in circularScopeThunkReverseMapped) --- tsc/internal/checker/checker.go | 79 +++++++++++++++++++++++------ tsc/internal/checker/memo.go | 1 + tsc/internal/checker/resolutions.go | 1 + 3 files changed, 66 insertions(+), 15 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index f1d9ce93e5282..98515ed06de9a 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -706,6 +706,7 @@ type Checker struct { discardLogTrims int // Number of times trimDiscardLog cleared discardLog circularityMark int // Length of discard log when the cycle in progress was detected innerCycles []innerCycle // Cycles detected inside the one in progress; see extendCircularity + observedHead int32 // 1 + index in resolutions of the lowest head of a cycle observed by the innermost type resolution in progress, or 0 cycleParticipants []TypeResolution // Computations that observed a cycle in progress effectsMarkDepth int // 1 + resolution index of the innermost effects mark that may be discarded, or 0 varianceStack []VarianceStackEntry @@ -20324,9 +20325,20 @@ type cycleYield struct { savedResolutionStart int savedVisibleStart int savedDepths [3]depthLimit + savedReverseMapped reverseMappedState + savedContextual []ContextualInfo + savedInference []InferenceContextInfo + floor int shadowed []shadowedResolving } +type reverseMappedState struct { + sourceStack []*Type + targetStack []*Type + expandingFlags ExpandingFlags + start int32 +} + type shadowedResolving struct { key memoKey index int32 @@ -20510,7 +20522,15 @@ func (c *Checker) beginCycleYield(target TypeSystemEntity, propertyName TypeSyst savedResolutionStart: c.resolutionStart, savedVisibleStart: c.visibleStart, savedDepths: [3]depthLimit{c.serializationLevel, c.inlineLevel, c.conditionalConstraintDepth}, + savedReverseMapped: reverseMappedState{c.reverseMappedSourceStack, c.reverseMappedTargetStack, c.reverseExpandingFlags, c.reverseMappedStart}, + savedContextual: c.contextualInfos, + savedInference: c.inferenceContextInfos, + floor: floor, }) + // The contexts the hidden resolutions entered are hidden too, so that the + // recomputation is from scratch. + c.reverseMappedSourceStack, c.reverseMappedTargetStack, c.reverseExpandingFlags, c.reverseMappedStart = nil, nil, 0, 0 + c.contextualInfos, c.inferenceContextInfos = nil, nil c.resolutionStart = n c.visibleStart = n c.serializationLevel, c.inlineLevel, c.conditionalConstraintDepth = depthLimit{}, depthLimit{}, depthLimit{} @@ -20521,6 +20541,9 @@ func (c *Checker) endCycleYield() { c.resolutionStart = y.savedResolutionStart c.visibleStart = y.savedVisibleStart c.serializationLevel, c.inlineLevel, c.conditionalConstraintDepth = y.savedDepths[0], y.savedDepths[1], y.savedDepths[2] + r := y.savedReverseMapped + c.reverseMappedSourceStack, c.reverseMappedTargetStack, c.reverseExpandingFlags, c.reverseMappedStart = r.sourceStack, r.targetStack, r.expandingFlags, r.start + c.contextualInfos, c.inferenceContextInfos = y.savedContextual, y.savedInference for _, sh := range y.shadowed { c.resolving.set(sh.key, sh.index) } @@ -20773,6 +20796,42 @@ func (c *Checker) markTypeResolutionCircular(start int) { c.markCircular(start) } +// keepsResultInCycle reports whether the type resolution at index n, which +// observed the cycles whose lowest head is observed (see Checker.observedHead), +// computes what it computes first from scratch although a cycle is in +// progress, so that its result is kept as a participant of the cycle: +// - The resolution re-entered a hidden resolution of itself, which a +// computation from scratch of the outer one always does, and what it +// observed in progress was all entered by the outer one, so its result is +// what the outer one computes first from scratch. +// - The resolution is the one a cycle yield computes again from scratch, +// with everything below it hidden, and it observed nothing hidden. +// - The resolution is inside the outermost measurement of variances, which +// hides what is below it and is measured from the canonical entry of its +// circularity, so what it computes is the same whatever led to it, and it +// only observed its incomplete variances. Computing it first from scratch +// reaches the measurement and computes it again inside, the same way. +func (c *Checker) keepsResultInCycle(n int, f *resolution, observed int32) bool { + r := &f.typeResolution + if r.outerSelf != 0 && observed != 0 && observed >= r.outerSelf && int(observed) <= n { + return true + } + if len(c.cycleYields) != 0 { + y := &c.cycleYields[len(c.cycleYields)-1] + if n >= y.floor && int(f.prevTypeResolution) <= y.floor && (observed == 0 || int(observed) > y.floor) { + return true + } + } + return c.observedOnlyOutermostMeasurement(n) +} + +func minObservedHead(a int32, b int32) int32 { + if a == 0 || b != 0 && b < a { + return b + } + return a +} + // observedOnlyOutermostMeasurement reports whether the cycle in progress is // the one headed by the outermost measurement of variances, which the // resolution at index n is inside, and no other. @@ -20831,21 +20890,9 @@ func (c *Checker) popTypeResolution() bool { debug.Assert(c.typeResolutionTop == n+1, "resolutions left above a type resolution") f := &c.resolutions[n] result := f.typeResolution.result - if r := &f.typeResolution; r.outerSelf != 0 && result && c.circularityStart != 0 && c.circularityStart <= n && c.circularityStart >= int(r.outerSelf) && !r.participant { - // The resolution re-entered a hidden resolution of itself, which a - // computation from scratch of the outer one always does, and what it - // observed in progress was all entered by the outer one, so its result - // is what the outer one computes first from scratch: the outer one - // keeps it, as must the cycle. - r.participant = true - c.cycleParticipants = append(c.cycleParticipants, *r) - } else if r := &f.typeResolution; result && !r.participant && c.observedOnlyOutermostMeasurement(n) { - // The outermost measurement of variances hides what is below it and - // is measured from the canonical entry of its circularity, so what - // it computes is the same whatever led to it. This resolution only - // observed its incomplete variances, so its result is what it - // computes first from scratch too, which reaches the measurement and - // computes it again inside, as main keeps the first result set. + observed := c.observedHead + c.observedHead = minObservedHead(f.prevObservedHead, observed) + if r := &f.typeResolution; result && !r.participant && c.circularityStart != 0 && c.keepsResultInCycle(n, f, observed) { r.participant = true c.cycleParticipants = append(c.cycleParticipants, *r) } @@ -20877,6 +20924,8 @@ func (c *Checker) beginTypeResolution(target TypeSystemEntity, propertyName Type f.prevMemo = int32(c.memoTop) f.isTypeResolution = true f.prevTypeResolution = int32(c.typeResolutionTop) + f.prevObservedHead = c.observedHead + c.observedHead = 0 f.typeResolution.target = target f.typeResolution.propertyName = propertyName f.typeResolution.result = true diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index e3911b86aef6a..f4ac559783e47 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -1926,6 +1926,7 @@ func (c *Checker) discardCycle(mark int, retain bool) { // is incomplete is discarded when it finishes, as for the outermost, rather // than read by the rest of the outer cycle. func (c *Checker) extendCircularity(head int) { + c.observedHead = minObservedHead(c.observedHead, int32(head)) if c.checking && c.memoTop != 0 { c.recordFromCheck() } diff --git a/tsc/internal/checker/resolutions.go b/tsc/internal/checker/resolutions.go index 227de5327a988..77ef9afbab742 100644 --- a/tsc/internal/checker/resolutions.go +++ b/tsc/internal/checker/resolutions.go @@ -45,6 +45,7 @@ type resolution struct { typeResolution TypeResolution isTypeResolution bool prevTypeResolution int32 // Checker.typeResolutionTop on entry + prevObservedHead int32 // Checker.observedHead on entry // Checker.searchableTop on entry, for a type resolution other than that // of a current node. prevSearchable int32 From 776fadbc14e75bf943445d5b4edee54029d595cf Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 1 Nov 2026 23:28:02 -0800 Subject: [PATCH 191/194] Don't keep the failure of a resolution a yield recomputes When a type resolution is re-entered through a member table, yieldCycleToMembers computes it again as if the table had been entered first, with the outer computation of the same resolution still in progress below. If that recomputation then fails in a cycle of its own, markResolutionCycle kept its failed result as a participant, so it survived the cycle's end and the outer computation, which is not part of that cycle, found the result already set and returned it in place of its own. Querying the name of a computed member first made it fail this way inside the member tables it depends on, so the member was never bound. The recomputation's failure is now discarded with the cycle, leaving the result to the computation below. (seen in lateBoundMutualMemberTables) --- tsc/internal/checker/checker.go | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 98515ed06de9a..94592b3a0d473 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -20552,17 +20552,30 @@ func (c *Checker) endCycleYield() { } // markResolutionCycle records that the type resolution entries from start to -// the top of the stack form a cycle, so each of them fails. +// the top of the stack form a cycle, so each of them fails. The failed +// results are kept, except that of a resolution yieldCycleToMembers computes +// again while it is in progress below: the computation below sets its own. func (c *Checker) markResolutionCycle(start int) { for i := start; i < len(c.resolutions); i++ { if r := &c.resolutions[i].typeResolution; c.resolutions[i].isTypeResolution && r.result { - c.cycleParticipants = append(c.cycleParticipants, *r) + if !c.isRecomputedByYield(i) { + c.cycleParticipants = append(c.cycleParticipants, *r) + } r.result = false } } c.markTypeResolutionCircular(start) } +func (c *Checker) isRecomputedByYield(i int) bool { + for j := range c.cycleYields { + if c.cycleYields[j].end == i { + return true + } + } + return false +} + // observeResolutionInProgress is for computations that are skipped rather // than failed when re-entered. Skipping still observes the incomplete // computation, so everything on the stack since it started is in a cycle. From cf4597c06b6141811745842e5b60677f84db0fd2 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 2 Nov 2026 02:49:14 -0800 Subject: [PATCH 192/194] Don't count symbol IDs toward the length of printed types A late-bound property name ends with the ID of the symbol it was bound from, as in "\xfe@a1@288". The node builder added the whole name to the approximate length it truncates types at, so where a type was cut off with "..." depended on how many digits that ID had, which depends on when the symbol was created and so on the order of checking. Only the part of the name before the ID is now counted. (seen in iteratorZip) --- tsc/internal/checker/nodebuilderimpl.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tsc/internal/checker/nodebuilderimpl.go b/tsc/internal/checker/nodebuilderimpl.go index 72d63144120d4..595d2aecbf887 100644 --- a/tsc/internal/checker/nodebuilderimpl.go +++ b/tsc/internal/checker/nodebuilderimpl.go @@ -2591,6 +2591,16 @@ func (b *NodeBuilderImpl) getPropertyNameNodeForSymbolFromNameType(symbol *ast.S return nil } +// approximateNameLength returns the length of a property name, without the +// symbol ID a late-bound name ends with, which depends on when the symbol was +// created and so would make truncation depend on the order of checking. +func approximateNameLength(name string) int { + if isLateBoundName(name) { + return strings.LastIndexByte(name, '@') + } + return len(name) +} + func (b *NodeBuilderImpl) addPropertyToElementList(propertySymbol *ast.Symbol, typeElements []*ast.TypeElement) []*ast.TypeElement { propertyIsReverseMapped := propertySymbol.CheckFlags()&ast.CheckFlagsReverseMapped != 0 var propertyType *Type @@ -2627,7 +2637,7 @@ func (b *NodeBuilderImpl) addPropertyToElementList(propertySymbol *ast.Symbol, t } propertyName := b.getPropertyNameNodeForSymbol(propertySymbol, saveEnclosingDeclaration) b.ctx.enclosingDeclaration = saveEnclosingDeclaration - b.ctx.approximateLength += len(ast.SymbolName(propertySymbol)) + 1 + b.ctx.approximateLength += approximateNameLength(ast.SymbolName(propertySymbol)) + 1 if propertySymbol.Flags()&ast.SymbolFlagsAccessor != 0 { writeType := b.ch.getWriteTypeOfSymbol(propertySymbol) From a43e4947c9879f4fc84a78b1d7fa5faedead4eec Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 2 Nov 2026 02:53:18 -0800 Subject: [PATCH 193/194] Start counting instantiations again for each outermost computation The limit on the number of instantiations counts from the start of the current statement or expression. A query that resolves a declaration directly, such as the type of a type alias, starts neither, so it inherited the count left by whatever was computed before it. After a runaway instantiation in one query used up the limit, an unrelated query failed at its first instantiation and its error type was cached for checking to find. The count now also starts again when a computation starts with nothing else in progress. (seen in instantiationLimitsCheckOrder) --- tsc/internal/checker/checker.go | 2 +- tsc/internal/checker/memo.go | 3 ++- tsc/internal/checker/resolutions.go | 5 +++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 94592b3a0d473..95b9034c32160 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -812,7 +812,7 @@ type Checker struct { tracer *Tracer // Optional tracer for trace events and type recording (for --generateTrace) checking bool // Whether side effects such as diagnostics are applied; see memo.go observingMemos bool // See syncObserving - instantiationCount uint32 // Instantiations since the start of the current statement or expression; see "Instantiation limits" + instantiationCount uint32 // Instantiations since the start of the current statement, expression or outermost computation; see "Instantiation limits" memoTop int // 1 + index in resolutions of the innermost computation recording effects, or 0; see memo.go } diff --git a/tsc/internal/checker/memo.go b/tsc/internal/checker/memo.go index f4ac559783e47..b29b356fd165d 100644 --- a/tsc/internal/checker/memo.go +++ b/tsc/internal/checker/memo.go @@ -2116,7 +2116,8 @@ func (c *Checker) typeResolutionMemo(r *TypeResolution) *memoHeader { // The limit on the number of instantiations is likewise only reached by // runaway instantiations, and depends on what was cached before: it counts // the instantiations performed since the start of the current statement or -// expression, and reused results add none. Making it independent would mean +// expression, or of the outermost computation in progress, and reused +// results add none. Making it independent would mean // keeping, for every cached result, the work needed to compute it from // scratch, which costs far more than the limit is worth. diff --git a/tsc/internal/checker/resolutions.go b/tsc/internal/checker/resolutions.go index 77ef9afbab742..f614e2a364639 100644 --- a/tsc/internal/checker/resolutions.go +++ b/tsc/internal/checker/resolutions.go @@ -70,6 +70,11 @@ func (c *Checker) initResolutions() { // copying in a whole resolution. func (c *Checker) pushResolution() *resolution { n := len(c.resolutions) + if n == 1 { + // An outermost computation, such as a query, counts its own + // instantiations; see "Instantiation limits" in memo.go. + c.instantiationCount = 0 + } if n == cap(c.resolutions) { c.resolutions = append(c.resolutions, resolution{}) } else { From b4fe2682a924873fadc76fd69a90e17b76029ba1 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 2 Nov 2026 11:02:22 -0800 Subject: [PATCH 194/194] Remember where flow walks run out of depth Applying the flow depth limit to each reference on its own, rather than disabling flow analysis for the whole checker, made deep flow graphs quadratic: every reference walked up to 2000 nodes before giving up. A walk that is too deep from a node with some depth left is also too deep from it with less, so record the largest failing budget for each flow node and reference key and stop there on later walks. Walks inside loop analysis or with reduce labels depend on more than the node and reference, so they are not recorded, and a failure recorded during a cycle is undone if the cycle discards its results. A reference that hits the limit anywhere gets the error type as a whole, so its type does not depend on how far the walk got. (seen in largeControlFlowGraph) --- tsc/internal/checker/checker.go | 1 + tsc/internal/checker/flow.go | 60 +++++++++++++++++++++++++++++++-- 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 95b9034c32160..89df61a46908d 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -706,6 +706,7 @@ type Checker struct { discardLogTrims int // Number of times trimDiscardLog cleared discardLog circularityMark int // Length of discard log when the cycle in progress was detected innerCycles []innerCycle // Cycles detected inside the one in progress; see extendCircularity + flowDepthFailures map[FlowLoopKey]int // Largest depth budget known to be too small for a flow walk from a node; see getTypeAtFlowNode observedHead int32 // 1 + index in resolutions of the lowest head of a cycle observed by the innermost type resolution in progress, or 0 cycleParticipants []TypeResolution // Computations that observed a cycle in progress effectsMarkDepth int // 1 + resolution index of the innermost effects mark that may be discarded, or 0 diff --git a/tsc/internal/checker/flow.go b/tsc/internal/checker/flow.go index 755d56a9bb94b..d8a0632d00dce 100644 --- a/tsc/internal/checker/flow.go +++ b/tsc/internal/checker/flow.go @@ -47,6 +47,7 @@ type FlowState struct { flowContainer *ast.Node refKey CacheHashKey depth int + limitHits int sharedFlowStart int reduceLabels []*ast.FlowReduceLabelData next *FlowState @@ -96,6 +97,11 @@ func (c *Checker) getFlowTypeOfReferenceEx(reference *ast.Node, declaredType *Ty f.sharedFlowStart = len(c.sharedFlows) c.flowInvocationCount++ evolvedType := c.getTypeAtFlowNode(f, flowNode).t + if f.limitHits != 0 { + // Give up on the whole reference, so its type does not depend on how + // deep the walk got before giving up. + evolvedType = c.errorType + } c.sharedFlows = c.sharedFlows[:f.sharedFlowStart] c.putFlowState(f) // When the reference is 'x' in an 'x.length', 'x.push(value)', 'x.unshift(value)' or x[n] = value' operation, @@ -114,14 +120,64 @@ func (c *Checker) getFlowTypeOfReferenceEx(reference *ast.Node, declaredType *Ty return resultType } +const maxFlowDepth = 2000 + func (c *Checker) getTypeAtFlowNode(f *FlowState, flow *ast.FlowNode) FlowType { - if f.depth == 2000 { + // A walk that is too deep from a node is also too deep from it with less + // depth left, so remember the failure to avoid repeating it for every + // reference after the first. Loops being analyzed and reduce labels make + // walks depend on more than the node and reference, so such walks are not + // remembered. + budget := maxFlowDepth - f.depth + remember := len(c.flowLoopStack) == 0 && len(f.reduceLabels) == 0 + if remember && len(c.flowDepthFailures) != 0 && c.hasFlowReferenceKey(f) { + if b, ok := c.flowDepthFailures[FlowLoopKey{flowNode: flow, refKey: f.refKey}]; ok && budget <= b { + f.limitHits++ + c.reportFlowControlError(f.reference) + return FlowType{t: c.errorType} + } + } + hits := f.limitHits + t := c.getTypeAtFlowNodeWorker(f, flow) + if f.limitHits != hits && remember && c.hasFlowReferenceKey(f) { + key := FlowLoopKey{flowNode: flow, refKey: f.refKey} + if b, ok := c.flowDepthFailures[key]; !ok || b < budget { + if c.flowDepthFailures == nil { + c.flowDepthFailures = make(map[FlowLoopKey]int) + } + if c.logResults() { + // The walk may have depended on results a cycle in progress + // discards. + c.discardLog = append(c.discardLog, discardEntry{nil, func() { + if ok { + c.flowDepthFailures[key] = b + } else { + delete(c.flowDepthFailures, key) + } + }, false}) + } + c.flowDepthFailures[key] = budget + } + } + return t +} + +func (c *Checker) hasFlowReferenceKey(f *FlowState) bool { + if f.refKey.IsZero() { + f.refKey = c.getFlowReferenceKey(f) + } + return f.refKey != nonDottedNameCacheKey +} + +func (c *Checker) getTypeAtFlowNodeWorker(f *FlowState, flow *ast.FlowNode) FlowType { + if f.depth == maxFlowDepth { // We have made 2000 recursive invocations. To avoid overflowing the call stack we report an error // and give up on this reference. Each reference hits the limit on its own, so its type does not depend - // on which other references were analyzed first. + // on which other references were analyzed first; see getTypeAtFlowNode. if tr := c.tracer; tr != nil { tr.Instant(tracing.PhaseCheckTypes, "getTypeAtFlowNode_DepthLimit", map[string]any{"depth": f.depth}) } + f.limitHits++ c.reportFlowControlError(f.reference) return FlowType{t: c.errorType} }